Модернизация рандома простыми приёмами
Здравствуйте.:victory:
Недавно начал заниматься js, поэтому опыта немного (совсем немного). Но, выполняя одно задание, захотелось создать более равновероятный рандом. Пришла идея добавить ещё один уровень проверки. В приложенном фото разъяснено "что" да "как". Скрипт работает. Хотелось бы узнать мнение о возможном сокращении строк, а также вдруг кому пригодится. ![]() <meta charset = "utf8"> <script> var arr = []; var sum = 0; var sum1 = 0; reg = 0; for( var i = 0; i < 8; i++) { arr[i] = Math.round(Math.random()); if (arr[i] == 1) { sum++; } } sum1 = Math.floor(Math.random() * (sum + 1)); for( var i = 0; i < 8; i++) { if( arr[i] == 1 ) { sum1--; } if( sum1 == 0) { reg = i; break; } } alert(reg); </script> |
Цитата:
Цитата:
Цитата:
|
Из заданного набора происходит рандом каждого по отдельности элемента, а после, из прошедших предыдущий раунд элементов, выбирается финальное число.
Пришла такая мыль после использования простого приёма Math.floor(Math.random()), где не устраивала его максимальная вероятность выпада чисел по середине. |
EvKLaZ,
а можно как-то по проще обьяснить или какую-то статистику показать? Цитата:
|
рони,
вот небольшая статистика. Провёл небольшой тест на игре BlackJack с выдачей две карты игроку, а одну дилеру (да, это GeekBrains). Цель: за 10 раундов необходимо выпадание минимум по разу каждой карты (6, 7, 8, 9, 10, J, Q, K, A). Каждый скрипт испытывался по 5 раз. В результате: - новый рандом: из 5 один раз не выпала одна карта, закрытие происходило на 9, x 7, 8, 9 раунды; - Math.floor(Math.random()): из 5 три раза не выпала одна карта, закрытие происходило на x, x, 6, x 9 раунды. Замечу также, что при Math.floor(Math.random()) не было ни разу замечено (ни до теста, ни после), чтобы все три карты были одной величины. Также две карты одной величины выпадали чаще у нового рандома |
EvKLaZ,
замечательно раз вам этот код помогает, но я не осилил ваших обьяснений и алгоритма который вы хотели достичь, можно не продолжать, наверно нельзя обьять необьятное :) |
А какой период повторения? Являютя ли значения независимыми и образуют ли они выборку? Если да, то какому закону распределения она подчинена? Никакой алгоритм не может генерировать полностью случайные числа, он может только аппроксимировать некоторые их свойства. То что вы проверили на 5 примерах никакой ценной информации в себе не несет. Нужно строить некие статиски типо хи-квадрат, проверять различные гипотезы о законе распределения и так далее.
|
рони,
спасибо, что уделили время:) . destus, я понимаю, что вы хотите, но я не менял алгоритм самой функции Math.random(). Я просто добавил элемент, который из предложенного количества чисел делает выборку, используя ту же самую Math.random(). Для необходимой мне цели это показалось более подходящим вариантом. |
Часовой пояс GMT +3, время: 03:43. |