Предположим, что у меня есть n-сторонняя загруженная матрица, где каждая сторона k имеет некоторую вероятность появления p k, когда я откатываю ее. Мне любопытно, есть ли хороший алгоритм для хранения этой информации статически (т.е. Для фиксированного набора вероятностей), чтобы я мог эффективно имитировать случайный рулон матрицы.
В настоящее время у меня есть решение O (lg n) для этой проблемы. Идея состоит в том, чтобы хранить таблицу кумулятивной вероятности первых k сторон для всех k, чтобы они генерировали случайное действительное число в диапазоне [0, 1) и выполняли бинарный поиск по таблице, чтобы получить наибольший индекс, совокупный значение не больше выбранного значения. Я предпочитаю это решение, но кажется странным, что среда исполнения не учитывает вероятности. В частности, в экстремальных случаях, когда одна сторона всегда поднимается или значения равномерно распределены, можно получить результат рулона в O (1), используя наивный подход, хотя мое решение по-прежнему будет логарифмически много шагов.
Есть ли у кого-нибудь предложения по решению этой проблемы так или иначе "адаптивно" в ней?
EDIT. На основе ответов на этот вопрос я написал статью, описывающую многие подходы к этой проблеме, наряду с их анализом. Похоже, что реализация Vose метода псевдонима дает & theta; (n) время предварительной обработки и O (1) раз за бросок кубика, что действительно впечатляет. Надеюсь, это полезное дополнение к информации, содержащейся в ответах!