Учитывая массив n
пар слов частоты:Эффективный алгоритм для случайного выбора элементов с частотой
[ (w0, f0), (w1, f1), ..., (wn-1, fn-1) ]
, где wi
это слово, fi
представляет собой целое число frequencey, а сумма частот ∑fi = m
,
Я хочу использовать генератор псевдослучайных чисел (pRNG) для выбора p
слов wj0, wj1, ..., wjp-1
таких, что вероятность выбора любого слова пропорциональна его частоте:
P(wi = wjk) = P(i = jk) = fi/m
(Заметим, что это выбор с заменой, так же слово могли быть выбраны каждый раз).
Я пришел с тремя алгоритмами до сих пор:
Создать массив размера
m
, и населяют его поэтому первыеf0
записи являютсяw0
, следующиеf1
записи являютсяw1
и т.д. , поэтому последниеfp-1
записей:wp-1
.[ w0, ..., w0, w1,..., w1, ..., wp-1, ..., wp-1 ]
Затем используйте pRNG для выбора индексовp
в диапазоне0...m-1
и сообщите слова, хранящиеся по этим индексам.
Это занимаетO(n + m + p)
работы, что не очень хорошо, так какm
может быть намного больше, чем n.Шаг через входной массив раз, вычислительной
mi = ∑h≤ifh = mi-1 + fi
и после вычисленияmi
, использовать PRNG, чтобы генерировать номерxk
в диапазоне0...mi-1
для каждогоk
в0...p-1
и выберитеwi
дляwjk
(возможно заменить текущее значениеwjk
) еслиxk < fi
.
Для этого требуетсяO(n + np)
работы.- Вычислить
mi
, как и в алгоритме 2, и генерировать следующий массив на п слово-частотной частичной суммы троек:[ (w0, f0, m0), (w1, f1, m1), ..., (wn-1, fn-1, mn-1) ]
, а затем, для каждого к в0...p-1
, использовать PRNG, чтобы генерировать номерxk
в диапазоне0...m-1
затем выполните двоичный поиск по массиву троек, чтобы найтиi
stmi-fi ≤ xk < mi
, и выберитеwi
дляwjk
.
Для работы требуетсяO(n + p log n)
.
Мой вопрос: Есть ли более эффективный алгоритм можно использовать для этого, или это так же хорошо, как он получает?
это OT, и, пожалуйста, не убивайте меня за это, но как вы получаете суб/супер сценарии, а знаки уравнение суммы? – dassouki
Просто используйте ... внутри
блоки (для полной линии). – rampion...
блоки (для встроенных) илиИ для знака суммы просто используйте ∑ (см. Http://www.w3.org/TR/WD-entities-961125 для более html-объектов для математических таблиц) – rampion