Я предполагаю, что вы сохраняете частоты в виде чисел с плавающей запятой между 0 и 1, которые составляют 1.
Сначала вы должны подготовить таблицу кумулятивных частот, т. Е. Сумму частоты этой буквы и всех букв перед ней.
Для упрощения, если вы начнете с этого распределения частот:
A 0.1
B 0.3
C 0.4
D 0.2
Ваша таблица кумулятивных частот будет:
A 0.1
B 0.4 (= 0.1 + 0.3)
C 0.8 (= 0.1 + 0.3 + 0.4)
D 1.0 (= 0.1 + 0.3 + 0.4 + 0.2)
Теперь сгенерируйте случайное число от 0 до 1 и посмотрите, где в этом списке лежит это число. Выберите букву с наименьшей суммарной частотой, превышающей ваше случайное число. Некоторые примеры:
Скажем, вы случайно выбрали 0,612. Это лежит в диапазоне от 0,4 до 0,8, то есть между B и C, поэтому вы должны выбрать C.
Если ваше случайное число было 0,039, то есть до 0,1, т. Е. До A, поэтому выберите A.
Надеюсь, это имеет смысл, в противном случае не стесняйтесь просить разъяснений!