Случайный выбор из списка с взвешенными вероятностями

У меня есть массив из N элементов (представляющих N букв данного алфавита), и каждая ячейка массива содержит целочисленное значение, это целое значение, означающее количество вхождений в данном тексте этой буквы. Теперь я хочу случайным образом выбрать букву из всех букв алфавита, исходя из его числа появлений с заданными ограничениями:

Если буква имеет положительное (ненулевое) значение, то она всегда может быть выбрана алгоритмом (конечно, с большей или меньшей вероятностью).

Если буква A имеет более высокое значение, чем буква B, то она должна быть с большей вероятностью выбрана алгоритмом.

Теперь, принимая это во внимание, яМы придумали простой алгоритм, который мог бы справиться с этой задачей, но мне было просто интересно, есть ли что-нибудь лучше. Это кажется довольно фундаментальным, и я думаю, что есть более умные вещи, чтобы сделать это более эффективно. Это алгоритм, который я подумал:

Сложите все частоты в массиве. Сохраните это в суммеВыбор случайного значения от 0 до СУММЫ. Храните это в РАН[Пока] РАН> 0, начиная с первого, посетите каждую ячейку в массиве (по порядку) и вычтите значение этой ячейки из RANПоследняя посещенная ячейка является выбранной

Итак, есть ли что-то лучше, чем это? Я что-то упустил?

Я знаю, что большинство современных компьютеров могут вычислить это так быстро, что я выигралЯ даже не замечаю, что мой алгоритм неэффективен, так что это скорее теоретический вопрос, нежели практический.

Я предпочитаю объясненный алгоритм, а не просто код для ответа, но если выМне удобнее давать ответ в коде, у меня нет проблем с этим.

Ответы на вопрос(2)

Ваш ответ на вопрос