Я хотел бы создать случайную строку (или последовательность случайных строк, допустимых повторений) длиной между символами 1 и n
из некоторого (конечного) алфавита. Каждая строка должна быть одинаково вероятной (другими словами, строки должны быть равномерно распределены).
Требование однородности означает, что такой алгоритм не работает:
alphabet = "abcdefghijklmnopqrstuvwxyz"
len = rand(1, n)
s = ""
for(i = 0; i < len; ++i)
s = s + alphabet[rand(0, 25)]
(псевдокод, rand(a, b)
возвращает целое число между a
и b
, включительно, каждое целое число равномерно)
Этот алгоритм генерирует строки с равномерно распределенной длиной, но фактическое распределение должно быть взвешено по отношению к более длинным строкам (в 26 раз больше строк с длиной 2, так как есть длина 1 и т.д.). Как я могу достичь этого