Изменения

Перейти к: навигация, поиск

Методы генерации случайного сочетания

915 байт добавлено, 16:30, 16 декабря 2014
Нет описания правки
Необходимо сгенерировать случайное сочетание из <tex> n </tex> элементов по <tex> k </tex> с равномерным распределением вероятности, если есть в наличии функция для генерации случайного числа в заданном интервале.
}}
 
==Решение за время <tex>O(n ^ 2)</tex>==
 
Пусть <tex>S</tex> — массив из <tex>n</tex> элементов, тогда для генерации случайного сочетания сделаем следующее:
* отсортируем <tex>S</tex>,
* запишем в массив <tex>C</tex> первые <tex>k</tex> элементов(это первое сочетание),
* выберем случайные номер сочетания <tex>r</tex>,
* применим алгоритм генерации следующего сочетания <tex>r - 1</tex> раз к массиву <tex>C</tex>.
 
===Псевдокод===
 
<code>
randomCombination(S, n, k)
sort(S);
'''for''' i = 1 '''to''' k
C.push_back(S[i])
r = rand(1, n! / (k!(n - k)!))
'''for''' i = 1 '''to''' r - 1
next_Combination(C, n, k)
'''return''' res
</code>
==Решение за время <tex>O(n ^ 2)</tex>==
Анонимный участник

Навигация