Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.03.2016, 21:46
Новичок на форуме
Отправить личное сообщение для EvKLaZ Посмотреть профиль Найти все сообщения от EvKLaZ
 
Регистрация: 16.03.2016
Сообщений: 4

Модернизация рандома простыми приёмами
Здравствуйте.
Недавно начал заниматься 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>
Ответить с цитированием
  #2 (permalink)  
Старый 17.03.2016, 23:54
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от EvKLaZ
более равновероятный рандом
а что это?
Сообщение от EvKLaZ
В приложенном фото разъяснено "что" да "как".
не осилил
Сообщение от EvKLaZ
вдруг кому пригодится.
а что код делает?
Ответить с цитированием
  #3 (permalink)  
Старый 18.03.2016, 09:48
Новичок на форуме
Отправить личное сообщение для EvKLaZ Посмотреть профиль Найти все сообщения от EvKLaZ
 
Регистрация: 16.03.2016
Сообщений: 4

Из заданного набора происходит рандом каждого по отдельности элемента, а после, из прошедших предыдущий раунд элементов, выбирается финальное число.
Пришла такая мыль после использования простого приёма Math.floor(Math.random()), где не устраивала его максимальная вероятность выпада чисел по середине.
Ответить с цитированием
  #4 (permalink)  
Старый 18.03.2016, 10:37
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

EvKLaZ,
а можно как-то по проще обьяснить или какую-то статистику показать?
Сообщение от EvKLaZ
не устраивала его максимальная вероятность выпада чисел по середине.
а какая была вероятность до того и какая стала после?
Ответить с цитированием
  #5 (permalink)  
Старый 18.03.2016, 18:51
Новичок на форуме
Отправить личное сообщение для EvKLaZ Посмотреть профиль Найти все сообщения от EvKLaZ
 
Регистрация: 16.03.2016
Сообщений: 4

рони,
вот небольшая статистика.
Провёл небольшой тест на игре 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()) не было ни разу замечено (ни до теста, ни после), чтобы все три карты были одной величины. Также две карты одной величины выпадали чаще у нового рандома
Ответить с цитированием
  #6 (permalink)  
Старый 18.03.2016, 19:18
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

EvKLaZ,
замечательно раз вам этот код помогает, но я не осилил ваших обьяснений и алгоритма который вы хотели достичь, можно не продолжать, наверно нельзя обьять необьятное
Ответить с цитированием
  #7 (permalink)  
Старый 18.03.2016, 20:46
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

А какой период повторения? Являютя ли значения независимыми и образуют ли они выборку? Если да, то какому закону распределения она подчинена? Никакой алгоритм не может генерировать полностью случайные числа, он может только аппроксимировать некоторые их свойства. То что вы проверили на 5 примерах никакой ценной информации в себе не несет. Нужно строить некие статиски типо хи-квадрат, проверять различные гипотезы о законе распределения и так далее.
Ответить с цитированием
  #8 (permalink)  
Старый 19.03.2016, 08:22
Новичок на форуме
Отправить личное сообщение для EvKLaZ Посмотреть профиль Найти все сообщения от EvKLaZ
 
Регистрация: 16.03.2016
Сообщений: 4

рони,
спасибо, что уделили время .
destus,
я понимаю, что вы хотите, но я не менял алгоритм самой функции Math.random(). Я просто добавил элемент, который из предложенного количества чисел делает выборку, используя ту же самую Math.random(). Для необходимой мне цели это показалось более подходящим вариантом.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск