Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Детеминированный рандом? (http://www.flasher.ru/forum/showthread.php?t=206837)

Zebestov 09.03.2014 18:32

Пардон за "ленивый порт" — выдрал этот рандомайзер из текущего проекта на javascript. Но суть ясна.
Код AS3:

var rands:Array = [];
var count:int = 1000;
 
function seededRandom(max:Number = 1, min:Number = 0):Number
{
    seed = (seed * 9301 + 49297) % 233280;
    var rnd:Number = seed / 233280;
    return min + rnd * (max - min);
}
 
// Указываем какой-то определенный seed
var seed:int = 333;
 
for ( var i:int = 0; i < count; i++ ) {
        var randIndex:int = int( seededRandom(10, 0) );
        rands[randIndex] = int( rands[randIndex] ) + 1;       
}
 
for ( var j:int = 0; j < 10; j++ ) {
        trace( j, '=>', Math.floor( rands[j] / ( count / 1000 ) ) / 10, '%' );
}

Конкретно этот код выдает такое распределение:
Код:

0 => 10.7 %
1 => 8.9 %
2 => 8.8 %
3 => 10.5 %
4 => 9.2 %
5 => 10.8 %
6 => 10.7 %
7 => 10 %
8 => 11.1 %
9 => 9.3 %


mikhailk 09.03.2014 18:51

Цитата:

вы хотите на 1000 итераций на 10 групп получить абсолютно равномерное распределение и при этом хотите чтобы это был рандом? чего-то вы не того хотите.
не-не, не абсолютно
я же написал "примерно":

Код:

// - rand1, rand2, rand3 запонены числами от 0 до 9, при
//  этом все числа встречаются с примерно равной
//  частотой

результат работы стандартной функции рандом я привел просто для примера, что такрй вариаент мнея вполне устраивает.


Цитата:

Почему перемешивание? Потому что ваша задача по-сути комбинаторная, а не статистическая. Перемешивание - суть перестановка заранее известного неизменяемого набора элементов. По крайней мере, формулировка задачи наводит именно на такой подход.
на самом деле, это вопрос терминологии.
но в любом случае я уже пришел к выводу, что проще всего нагенерить через Math.random() тыщу значений и затем брать оттуда наборы последовательных значений.

Добавлено через 1 минуту
Цитата:

Сообщение от Zebestov (Сообщение 1161366)
Пардон за "ленивый порт" — выдрал этот рандомайзер из текущего проекта на javascript. Но суть ясна.

О, супер.
То, что и было нужно.

Aquahawk 09.03.2014 21:04

а то что это линейный конгурентный вас не смущает?

mikhailk 10.03.2014 20:30

Цитата:

а то что это линейный конгурентный вас не смущает?
А вот в этом случае почему-то нет. :)


Часовой пояс GMT +4, время: 08:40.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.