Взвешенные случайные числа V2 (динамический случай)

Этот вопрос является продолжением вопроса под ссылкой.

Взвешенные случайные числа

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

РЕДАКТИРОВАТЬ Предположим, что нужно выбрать N элементов с разным весом.

Для статических весов метод псевдонима Уокера требует O (N) времени для настройки псевдонима, но стоимость выборки составляет O (1), поэтому он является одним из лучших для достижения моей цели.

И метод бинарного поиска требует также O (N) для создания кумулятивного массива, а стоимость выборки составляет log (N).

Однако в моем случае, поскольку веса часто меняются, временная сложность изменения весов также важна.

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

РЕДАКТИРОВАТЬ Пока я читаю комментарии, я понимаю, что мне нужно наложить дополнительные условия. На каждой фазе модификации изменяются только несколько чисел (в основном два) весов, также эти модификации не изменяют общую сумму весов (условие нормализации).

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


person Sungmin    schedule 14.06.2012    source источник
comment
N - количество элементов/ В ссылке N = 3 {1, 2, 3}   -  person Sungmin    schedule 14.06.2012
comment
Хорошо, я вижу. Предположительно общая сложность зависит от того, как часто вам нужно изменять веса; Вы говорите, что вам нужно делать это на каждой итерации?   -  person Oliver Charlesworth    schedule 14.06.2012
comment
Да, в моей задаче веса меняются ранее выбранным элементом. Поэтому мне нужно изменять веса на каждой итерации.   -  person Sungmin    schedule 14.06.2012
comment
Вы изменяете все веса каждую итерацию (в этом случае вам, вероятно, не повезло) или только некоторые?   -  person Michael Anderson    schedule 14.06.2012
comment
Что, если только O (1) в основном только два веса изменены?? также, если модификация не меняет общий вес, поэтому нет необходимости нормализовать?   -  person Sungmin    schedule 14.06.2012


Ответы (1)


Я столкнулся с той же проблемой. Я опишу свой текущий план по ее решению, но буду признателен за любые другие предложения и/или указатели реализации.

Мой текущий план состоит в том, чтобы адаптировать алгоритм для динамической статистики заказов, как описано в разделе 14.1 «Введение в алгоритмы» Кормена/Лейзерсона/Ривеста. Вы помещаете свои элементы в сбалансированное двоичное дерево, такое как красно-черное дерево, с весами в качестве ключей. Вы расширяете дерево, чтобы каждый узел хранил сумму весов в своем поддереве. Затем корень сохраняет сумму весов во всем дереве, скажем, S. Суммы поддеревьев можно обновлять во время операций с деревьями так же, как размеры поддеревьев для статистики динамического порядка. Чтобы сделать взвешенную выборку, вы равномерно выбираете число в [0..S], скажем, x; затем ищите вниз по дереву узел N так, чтобы сумма весов узлов, предшествующих N, при обходе по порядку равнялась <x, но сумма плюс вес узла N равнялась >x — аналогично операции OS-Select для динамической статистики порядка.

person user410315    schedule 24.09.2012