Изменения

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

Методы получения случайных комбинаторных объектов

493 байта добавлено, 22:45, 7 декабря 2018
Нет описания правки
Будем получать элементы по порядку: сначала определим, какой элемент будет стоять на первом месте, потом на втором и так далее. Считаем, что мы построили префикс длинны <tex> i </tex> : <tex> I = \{a_1, a_2, \ldots, a_i\} </tex>. Будем выбирать элемент <tex> a_{i+1} </tex> из множества всех возможных так, чтобы вероятность выбора элемнта <tex> b \in B </tex>, была пропорциональна числу комбинторных обьектов размера <tex> n </tex> с префиксом <tex> I + b </tex>. Для этого разобъем отрезок натуральных чисел <tex> [1, s] </tex>. где <tex> s </tex> - число различных комбинаторных объектов с текущим префиксом, на <tex> k </tex> диапазонов так, чтобы размер диапазаоны <tex> d_j </tex> был равен числу объектов с префиксом <tex> I + b_j </tex>. С помощью функция для генерации случайного числа получим число <tex> r </tex> в интервале [1, s] и добавим к префиксу <tex> I </tex> элемент <tex> b_j </tex> соответствующий диапазону отрезка в которм находится полученное число.
 
'''object''' randomObject(n: '''int''', k: '''int'''):
'''for''' i = 1 '''to''' n
s = number(prefix) <font color = green> // число комбинаторных объектор с текущим префиксом. </font>
r = random(1, s)
'''for''' j = 1 '''to''' k
'''if''' number(prefix + b[j]) < r
r = r - number(prefix + b[j])
'''else'''
prefix[i] = b[j]
break
'''return''' permutation
74
правки

Навигация