Множество различных идентифицируемых результатов в независимых бросках матрицы с гранями имеет элементов. Когда кубик справедлив, это означает, что каждый результат одного броска имеет вероятность а независимость означает, что каждый из этих результатов будет иметь вероятность то есть они имеют равномерное распределениеΩ ( d , n ) Ω(d,n)n nd = 6 d=6d ndn 1 / d 1/d( 1 / d ) n : (1/d)n:P d , n .Pd,n.
Предположим, что вы разработали некоторую процедуру которая либо определяет результатов кубика c ( = 150 ), то есть элемента Ω ( c , m ), либо сообщает об ошибке (что означает, что вам придется повторить это для того, чтобы получить результат). То есть,т tмmc(=150)Ω(c,m)
t : Ω ( d , n ) → Ω ( c , m ) ∪ { Отказ } .t:Ω(d,n)→Ω(c,m)∪{Failure}.
Пусть FF - вероятность t,t приводящая к провалу, и отметим, что FF - некоторое целое кратное d - n ,d−n, скажем
F = Pr ( t ( ω ) = отказ ) = N Fд - н .F=Pr(t(ω)=Failure)=NFd−n.
(Для справки в будущем, обратите внимание, что ожидаемое количество раз должно быть вызвано, прежде чем не произойдет сбой, равно )t t1 / ( 1 - F ) .1/(1−F).
Требование , чтобы эти результаты в быть однородными и не зависит условный от не сообщают средства отказа , что сохраняет вероятность того, в том смысле , что для каждого событияΩ ( с , м ) Ω(c,m)t t A ⊂ Ω ( с , м ) ,ttA⊂Ω(c,m),
P d , n ( t ∗ A )1 - F =Pc,м(А)Pd,n(t∗A)1−F=Pc,m(A)(1)
где
t ∗ ( A ) = { ω ∈ Ω ∣ t ( ω ) ∈ A }t∗(A)={ω∈Ω∣t(ω)∈A}
набор бросков кубика, который процедура назначает событиют tа .A.
Рассмотрим атомное событие , которое должно иметь вероятностьПусть (броски костей, связанные с ) имеют элементов. становитсяA = { η } ⊂ Ω ( c , m ) A={η}⊂Ω(c,m)c - m . c−m.t ∗ ( A )t∗(A) η ηN ηNη ( 1 )(1)
N η d - n1 - N F d - n = P d , n ( t ∗ A )1 - F =Pc,m(A)=c-m.Nηd−n1−NFd−n=Pd,n(t∗A)1−F=Pc,m(A)=c−m.(2)
Непосредственно все равны некоторому целому числуN пNη N . N.т. с Осталось только найти наиболее эффективные процедуры Ожидаемое число не-отказов в рулон односторонней штамповой ISt.c
1м (1-F).1m(1−F).
Есть два непосредственных и очевидных значения. Одна из них заключается в том, что если мы можем сохранить маленьким при увеличении , то эффект сообщения об ошибке асимптотически равен нулю. Другое состоит в том, что для любого заданного (количество бросков симулятора sided для моделирования) мы хотим сделать как можно меньшим.F Fm mm mc cFF
Давайте внимательнее посмотрим на , очистив знаменатели:( 2 )(2)
N c m = d n - N F > 0.Ncm=dn−NF>0.
Это делает очевидным, что в данном контексте (определяемом ), делается настолько малым, насколько это возможно, делая равным наибольшему кратному , которое меньше или равно Мы можем написать это в терминах наибольшей целочисленной функции (или «этажа») какc , d , n , m c,d,n,mF Fd n - N F dn−NFc m cmd n . dn.⌊ ∗ ⌋⌊∗⌋
N = ⌊ d nс м ⌋.N=⌊dncm⌋.
Наконец, ясно, что должно быть как можно меньше для достижения максимальной эффективности, потому что он измеряет избыточность по . В частности, ожидаемое число рулонов односторонняя умирают необходимо произвести один рулон односторонняя штампаN Nт д сtdc
N × nм ×11 - ф .N×nm×11−F.
Таким образом, наш поиск высокоэффективных процедур должен быть сосредоточен на тех случаях, когда равна или едва превышает некоторую мощностьд н dnс м .cm.
Анализ заканчивается, показывая, что для данных и существует последовательность, кратная для которой этот подход приближается к идеальной эффективности. Это равносильно нахождению для которого приближается к в пределе (автоматически гарантируя ). Одна такая последовательность получается путем взятия и определенияd dc , c,( n , m ) (n,m)( n , m ) (n,m)d n / c m ≥ 1 dn/cm≥1N = 1 N=1F → 0 F→0n = 1 , 2 , 3 , …n=1,2,3,…
m = ⌊ n log dlog c ⌋.m=⌊nlogdlogc⌋.(3)
Доказательство простое.
Все это означает , что , когда мы готовы свернуть оригинальный односторонняя умирают достаточно большое число раз мы можем ожидать , чтобы имитировать почти результата односторонняя умирают за рулон , Эквивалентноеd dn , n,log d / log c = log c d logd/logc=logcdcc
Можно смоделировать большое количество независимых бросков кубика sided, используя кубик sided, используя среднее значение катится по результатам», где « можно сделать сколь угодно малым, выбрав « достаточно большим.m mc cd dlog ( c ) / log ( d ) + ϵ = log d ( c ) + ϵ log(c)/log(d)+ϵ=logd(c)+ϵϵ ϵmm
Примеры и алгоритмы
В вопросе и откудад = 6 d=6с = 150 ,c=150,
log d ( c ) = log ( c )log ( d ) ≈2.796489.logd(c)=log(c)log(d)≈2.796489.
Таким образом, наилучшая возможная процедура потребует в среднем не менее бросков a для имитации каждого результата.2.7964892.796489d6
d150
Анализ показывает, как это сделать. Нам не нужно прибегать к теории чисел для ее выполнения: мы можем просто составить таблицу степеней и степеней и сравнить их, чтобы найти, где близко. Этот расчет грубой силы дает парd n = 6 n dn=6nc m = 150 м cm=150mc m ≤ d ncm≤dn ( n , м )(n,m)
( n , m ) ∈ { ( 3 , 1 ) , ( 14 , 5 ) , … }(n,m)∈{(3,1),(14,5),…}
например, соответствующий номерам
( 6 n , 150 м ) ∈ { ( 216 , 150 ) , ( 78364164096 , 75937500000 ) , … } .(6n,150m)∈{(216,150),(78364164096,75937500000),…}.
В первом случае связывает результатов трех бросков a до отказа, а остальные результатов будут связаны с одним результатом a . t t216 - 150 = 66 216−150=66d6
150150d150
Во втором случае связал бы из результатов 14 бросков a до отказа - около 3,1% от всех - и в противном случае бы последовательность из 5 результатов a .т t78364164096 - 7593750000078364164096−75937500000d6
d150
Простой алгоритм реализацииtt d 0 , 1 , … , d - 1 c 0 , 1 , … , c - 1. n n d . с . м м т помечает грани кубика sided цифрами а грани кубика sided цифрами В рулоны первого кристалла интерпретируется как -значного числа в базовом Это преобразуется в число в базе Если он имеет не более цифр, последовательность последних цифр является выходной. В противном случае, возвращает Failure, вызывая себя рекурсивно.d0,1,…,d−1c0,1,…,c−1.nnd.c.mmt
Для гораздо более длинных последовательностей вы можете найти подходящие пары , рассматривая все остальные сходящиеся продолжающегося расширения дроби Теория непрерывных дробей показывает, что эти конвергенты чередуются между меньшим, чем и большим, чем оно (при условии, что еще не рационально). Выберите те, которые меньше, чем( n , m ) (n,m)n / m n/mx = log ( c ) / log ( d ) . x=log(c)/log(d).х xх xх .x.
В вопросе, первые несколько таких конвергентов
3,14/5,165/59,797/285,4301/1538,89043/31841,279235/99852,29036139/10383070….3,14/5,165/59,797/285,4301/1538,89043/31841,279235/99852,29036139/10383070….
В последнем случае последовательность из 29 036 139 бросков a d6
будет производить последовательность из 10 383 070 бросков a d150
с частотой отказов менее умножить на для эффективности неотличимой от асимптотического предела.2×10−8,2×10−8,2.796492.79649
Для случая , бросание d6 трижды отчетливо создает результатов.N=150N=150 63=21663=216
Желаемый результат может быть сведен в таблицу следующим образом:
Вероятность сохранения результата равна . Все броски независимы, и мы повторяем процедуру до «успеха» (результат в ), поэтому количество попыток сгенерировать 1 ничью между 1 и 150 распределяется как геометрическая случайная величина, которая имеет ожидание . Следовательно, использование этого метода для генерации 1 розыгрыша требует броска броска костей в среднем (поскольку каждая попытка бросает 3 кубика).p=150216=2536p=150216=2536 1,2,…,1501,2,…,150 p−1=3625p−1=3625 3625×3=4.323625×3=4.32
Благодарим @whuber, чтобы он предложил это в чате.
источник
Вот еще более простая альтернатива ответу Sycorax для случая, когда . Поскольку вы можете выполнить следующую процедуру:N=150N=150 150=5×5×6150=5×5×6
Этот метод может быть обобщен на большее , но он становится немного более неуклюжим, когда значение имеет один или несколько простых факторов больше .NN 66
источник
В качестве иллюстрации алгоритма для равномерного выбора между значениями с использованием шестигранных кубиков, попробуйте это, в котором каждый бросок умножает доступные значения на и делает равным вероятность каждого из новых значений:150150 66
Если вы находитесь на одном из оставшихся значений после бросков, то вы находитесь в ситуации, аналогичной позиции после броска. Таким образом, вы можете продолжить таким же образом: вероятность того, что вы остановитесь после бросков, равна , после бросков - и т. Д.66 6 1 7 0279936 81501679616
их, и вы увидите, что ожидаемое количество необходимых бросков составляет около . Он обеспечивает равномерный выбор из , поскольку вы выбираете значение только в тот момент, когда вы можете выбрать каждый из с равной вероятностью.3.39614 150 150
Sycorax попросил в комментариях более явный алгоритм
Алгоритм последовательных бросков костей:
первые три кубика, чтобы получить число от до . Поскольку вы берете сгенерированное значение (которое также является его остатком от деления на ), если сгенерированное значение строго ниже и остановитесь;000 6 555 6 1000 6 ÷ 410 6 = 1 6 остаток 150 6 410 6 1000 6 - 150 6 = 410 6
Если вы продолжаете, бросьте четвертый кубик, чтобы сгенерировать число от до . Поскольку вы берете остаток от сгенерированного значения при делении на если сгенерированное значение строго ниже и останавливаетесь;4100 6 5555 6 10000 6 ÷ 410 6 = 12 6 остаток 240 6 410 6 10000 6 - 240 6 = 5320 6
Если вы продолжите, бросьте пятый кубик, чтобы сгенерировать число от до . Поскольку вы берете остаток от сгенерированного значения при делении на если сгенерированное значение строго ниже и останавливаетесь;5320065555561000006÷4106=1236 remainder 330641061000006−3306=552306
Если вы продолжите, бросьте шестой кубик, чтобы сгенерировать число от до . Поскольку вы берете остаток от сгенерированного значения при делении на если сгенерированное значение строго ниже и останавливаетесь;5523006555555610000006÷4106=12356 remainder 106410610000006−106=5555506
и т.п.
источник