Поиск:

Ответ в темуСоздание новой темы Создание опроса
> идеальный random 
V
    Опции темы
szz
Дата 3.12.2005, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: нет
Всего: 33



У меня такая загвоздка.
Сделал я такой тренажер интуиции (можно его тут попробовать http://xkiosk.net/pea/game.php )
Зайдите туда, посмотрите чтоб дальше понять о чем я говорю.
Так вот, загвоздка в том, чтобы сделать идеальный генератор случайных чисел, точнее такой генератор, который бы выводил всего два рандомальных числа : 0 и 1.

Чтоб идиализировать этот генератор, я делаю в той программе следующее: перед началом тренировки заставляю пользователя двигать мышью по экрану, а сам собираю координаты его движения в массив. Каждая точка, по которой бегал хаотично человек по экрану, собирается в массив длиной в тыщу элементов.

А потом для сброса черных и белых горошин использую следующую функцию (простите за привидение кода, напишу я ее на нескольких языках, чтоб как мжно большему количеству людей понятно было):
generated_impulse - в нашем случае - массив из тех самых 1000 элементов:
Код

function random2(){
    return (rand(998) + generated_impulse[rand(1000)] ) % 2;    
}
function rand(n){   return int(Math.random()*(n-1));}

Код

srand(time(0));
function random2(){
   global $generated_impulse;
    return (rand()%998 + $generated_impulse[rand()%1000] ) % 2;    
}

Код

sub random2{
    return (rand(998) + $generated_impulse[rand(1000)] ) % 2;    
}

Код

srand(time(0));
int random2(){
    return (rand()%998 + generated_impulse[rand()%1000] ) % 2;    
}


То есть как можно сильнее запутываю: генерирую случайное число, прибавляю к нему случайный элемент из пользоватеьского импульса и возвращаю остаток на два.
Только вот почему в большинстве случаев выпадает черная горошина (0) ?
Единственное, чего я пытаюсь добиться - это убиение закономерности стандартной псевдорандомальности, а у меня почему-то к нулю больше тянет...


--------------------
PM   Вверх
cardinal
Дата 3.12.2005, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 5
Всего: 99



Посмотри тут:
VB-VB-002236
и тут
http://forum.vingrad.ru/index.php?showtopi...ndpost&p=308153
если дисскусию почитать хочешь...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
esperant0
Дата 3.12.2005, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 714
Регистрация: 20.5.2005

Репутация: 4
Всего: 14



определи вначале понятие идеальный рандом формално, и быть может тебе смогут помочь

как правило правильный вопрос это половина ответа


--------------------
 
 Student->Teacher Assistant ->Research assistant->Microsoft Software Development Engineer 

Пользователь получил наказание за то, что проигнорировал замечание которое было написано модератором  а затем стерто и которое он - пользователь не мог видеть. 
PM MAIL   Вверх
nworm
Дата 3.12.2005, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 502
Регистрация: 22.10.2005

Репутация: 4
Всего: 8



szz, Вы где-то ошибаетесь. По датчикам случайных чисел много всего написано. Например, можно посмотреть начало 2-го тома книге Д. Кнута "Искусство программирования".
PM MAIL WWW   Вверх
maxim1000
Дата 3.12.2005, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



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

поому я бы посоветовал просто взять один из изученных генераторов (на форуме обсуждалось) или придумать свой и исследовать его характеристики (ну это, если нравится сам процесс smile), но не идти по пути "запутать, как можно больше"...


--------------------
qqq
PM WWW   Вверх
Helicopterr
Дата 16.2.2006, 03:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 20.8.2005
Где: Stavropol

Репутация: нет
Всего: 3



szz
Вот уж не знаю кто первый придумал заставлять пользователя двигать по экрану мышей и тыкать по клавиатуре для генерации случайных значений, но сейчас это делает, например, клиентская прога Web Money. Как ещё не заставили пользователя болтать ногами, ерзать на стуле, бится головой в разные участки монитора, этим, ведь похоже, можно повысить рандомальность... smile

Ты писал о "разработке" идеального рандома?
Вообще я иногда думаю, что наш бог/природа и тот на генерирование по-настоящему случайных чисел не способен. Так что ты без всяких угрызений совести можешь заняться заботами более мирскими и насущными smile


--------------------
people can fly
PM MAIL   Вверх
szz
Дата 16.2.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: нет
Всего: 33



Цитата

Так что ты без всяких угрызений совести можешь заняться заботами более мирскими и насущными


Судя по тому, что ты написал ответ через 2 месяца после того, как к этой тебе все потеряли интерес, я уже как раз все это время и занимаюсь более мирскими и насущными заботами.

В любом случае, большое спасибо за мораль.


--------------------
PM   Вверх
DENNN
Дата 16.2.2006, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата(Helicopterr @ 16.2.2006, 03:33 Найти цитируемый пост)
кто первый придумал заставлять пользователя двигать по экрану мышей и тыкать по клавиатуре для генерации случайных значений, но сейчас это делает, например, клиентская прога Web Money.

В последних версиях FReeBSD при первом запуске SSH генерится ключ. В этот момент пользователя просят "постучать" по клавиатуре и нажать Enter, навроде как добавить случайности при генерации. smile
PM ICQ   Вверх
teplotaya
Дата 14.3.2006, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 10.3.2006

Репутация: нет
Всего: 2



szz

чувак спасибо крутая маза а дай мне исходники пажалусто ?
PM MAIL   Вверх
teplotaya
Дата 16.3.2006, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 10.3.2006

Репутация: нет
Всего: 2



Код


procedure TForm1.click(x,y,pause:integer);
var rect : TRect;
p1, p2 : TPoint;
PT:TPoint;
begin
Application.ProcessMessages;
Pt.x:=x;
Pt.y:=y;
Pt.x := Round(Pt.x * (65535 / Screen.Width));
Pt.y := Round(Pt.y * (65535 / Screen.Height));
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE,Pt.x,Pt.y,0,0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN,Pt.x,Pt.y,0,0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP,Pt.x,Pt.y,0,0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN,Pt.x,Pt.y,0,0);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP,Pt.x,Pt.y,0,0);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer;
i2:integer;
a: array of array of Integer;
xx1,yy1:integer;
begin
SetLength(a, 5,2);
a[0,1]:=361;
a[0,2]:=561;
a[1,1]:=413;
a[1,2]:=558;
a[2,1]:=465;
a[2,2]:=560;
a[3,1]:=410;
a[3,2]:=512;
for i:=0 to 10000 do begin
randomize;
sleep(1000);
click(630,287,0);
sleep(4000);
for i2:=0 to 230 do begin
sleep(250);
count:=random(4);
xx1:=a[count,1];
yy1:=a[count,2];
click(xx1,yy1,0);
end;
sleep(10000);
click(649,457,0);
sleep(2000);
end;
end;





машина на машину ;)
PM MAIL   Вверх
szz
Дата 16.3.2006, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: нет
Всего: 33



Ой, не напоминай - я исходники случайно все стер при переустановке винды нескоко месяцев назад...


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1069 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.