В настоящее время я работаю над проблемой, требующей случайного выбора элемента из набора. Каждый из элементов имеет вес (вероятность выбора), связанный с ним.
Моя проблема в том, что для множеств с небольшим количеством элементов, скажем, 5-10, сложность (время выполнения) решения я была приемлемой, однако, поскольку количество элементов увеличивается, скажем, для 1K или 10K и т.д., выполняется время становится неприемлемым.
Моя текущая стратегия:
- Выберите случайное значение X с диапазоном [0,1)
- Итерации элементов суммирования их веса до тех пор, пока сумма будет больше, чем X
- Элемент, который вызвал сумму, превышающую X, выбирается и возвращается
Для больших множеств и большого количества выборов этот процесс начинает проявлять квадратичное поведение, короче говоря, существует более быстрый способ? возможно, лучший алгоритм?