Последний раз редактировалось Черный Евгений 23.09.2008, 12:16, всего редактировалось 2 раз(а).
И все же дать ясное определение случайному возможно.
1. Должно быть не менее двух событий, например, 0 и 1;
2. При их реализации должна быть обеспечена равновероятность, которая задается деревом полной вероятности. Смысл этого дерева таков - если события всего два, то это 0,1 или 1,0 но не 0,0 или 1,1. Если событий восемь, то идущие подряд два нуля не только возможны, но и необходимы. А если событий три? Три события не могут быть корректны на бинарном (0,1) дереве полной вероятности, только 2, 8, 24, ...
А как проверить выполнение пункта 2? Если число событий достаточно велико, например, более миллиона, то равновероятность обязательно родит нормальный закон. Верно и обратное утверждение - если вы нашли нормальный закон, то вы нашли случайные события без всякой примеси закономерного. Все остальные законы распределения это смесь случайного и закономерного.
Теперь берите цепочку своих событий и проверяйте ее нормальным законом. Никаких других проверок не требуется. Что такое нормальный закон? Это частоты повторяющихся энергий цепочек событий одинаковой длины. Например, у вас 24 события: (0,0,0)(0,0,1)(0,1,0)(0,1,1)(1,1,0)(1,1,1)(1,0,0)(1,0,1). Тогда энергии этих цепочек соответственно равны 0,1,1,2,2,3,1,2. Наименьшая и наибольшая энергии встречаются всего по одному разу, а энергии 1 и 2 по три раза. Это и есть нормальный закон для 24 событий.
Теперь по поводу вопроса о произвольности выбора событий из их фактической последовательности - этого делать нельзя. И еще - число 3,14159... не случайно, а вот последовательность его десятичных цифр - идеальная случайная последовательность. Ни под какую "псевдо" ее не подведешь, поскольку у иррационального числа нет периодов.
Добавление после замечания "Ничего нельзя понять".
доп.1) Теория вероятностей допускает самые разнообразные комбинации случайного и закономерного, принимая все за случайное. Случайное в чистом виде это только принцип равновероятности всех событий, составляющих альтернативу (например, 0,1) и следовательно только нормальный закон.
доп.2) Для того, чтобы понять какому закону распределения подвержена наша последовательность событий - нормальному или нет, можно воспользоваться процедурой, подтверждающей принцип равновероятности. Для этого вся последовательность разбивается на единичные события. И подсчитывается их число. Потом повторяем все для пар событий, потом для триад, и так далее. Вот результаты подобного анализа для проверки генератора случайных чисел в Делфи.
Всего событий (0,1) 10 000 008
Вероятности:
(отдельные события, составляющие альтернативу)
"0"=1/1.99286 "1"=1/2.00719
(пары)
"00"=1/3.98638 "01"=1/3.98340
"10"=1/3.98672 "11"=1/4.04414
(триады)
"000"=1/7.96582 "001"=1/7.95832
"010"=1/7.97995 "011"=1/7.97779
"100"=1/7.97525 "101"=1/7.96637
"110"=1/7.98878 "111"=1/8.19663
Исходник на Делфи прилагается (ниже).
доп.3) Все наши споры могут быть разрешимы, если вы позволите мне одну аналогию. Предположим мы ничего не знаем о законах падения тел и аэродинамике. У нас есть точнейшие приборы для регистрации падения тел с Пизанской башни. Тогда мы придем к выводу, что есть прогнозируемые средние величины и случайные отклонения. Галилей не имел очень точных приборов, но сообразил, что здесь есть хитросплетение закономерного и случайного. Удалив аэродинамическое сопротивление, он удалил случайное. А разве аэродинамическое сопротивление случайно? Когда образуются вихри, то до известной степени да. Теперь уже в аэродинамическом сопротивлении мы находим устойчивое среднее и случайные отклонения от него. Дальнейшее уточнение невозможно, поскольку область вихреобразования приблизительно очерчена, но невозможно предсказать развитие конкретного вихря, как и предсказать на какую сторону упадет монета в каждом конкретном случае.
Сегодня уже не следует спорить - случаен этот мир, или закономерен. Там есть и то и другое. Нам важно только уметь отделять одно от другого, как это делал Галилей. Если попытаться выделить случайное в его абсолютно чистом виде - то мы не получим ничего нового, чего не было у Паскаля. Это равновероятность альтернатив, больше ничего. Откуда же берется предмет спора? От нашего желания рассматривать все возможные комбинации случайного и закономерного как только случайное. Это все равно, что пытаться вывести законы падения тел с учетом аэродинамического сопротивления. На каждый конкретный спор о случайном Галилеев не напасешься, но попробовать можно. Теперь самое интересное - что положено в основание мира, детерминизм или случайность. Детерминизм, но для дискретного мира он вынужденно рождает случайность. Вот вам пример. Законы арифметики случайны? Нет, конечно, но будучи применимы к целым числам (в природе это кванты энергии, пространства и времени), они вынужденно дают неопределенность при целочисленном делении! Так же как и мы, природа не знает что делать с остатком от целочисленного деления, поэтому и присоединяет его к результату случайным образом. Мир устроен не очень просто, но мистики там нет.
program NorRasGs; //ver 22/09/2008
//Анализ числовой последовательности на случайность
//Автор Черный Евгений <black_en@mail.ru>
{$APPTYPE CONSOLE}
uses SysUtils;
var
w,w1:byte;
i,j,k24:word;
ii,
ss,//общая длина двоичной последовательности
s00,s01,s10,s11,
s000,s001,s010,s011,s100,s101,s110,s111,
s0,s1:longword;
d00,d01,d10,d11,
d000,d001,d010,d011,d100,d101,d110,d111,
dd,d0,d1:double;
m24:array[1..24] of word;//здесь храним текущие 24 бита (0,1)
m2 :array[1..2] of word;//здесь храним текущую пару
m3 :array[1..3] of word;//здесь храним текущую триаду
function Rus(mes: string):string;
// Функция Rus преобразует ANSI-строку в ASCII-строку
// В ANSI русские буквы кодируются числами от 192 до 255,
// в ASCII - от 128 до 175 (А..Яа..п) и от 224 до 239 (р..я).
// Реализует вывод русского языка в консольном приложении
var i: integer; // номер обрабатываемого символа
begin{F_Rus}
for i:=1 to length(mes) do
case mes[i] of
'А'..'п' : mes[i]:= Chr(Ord(mes[i])-64);
'р'..'я' : mes[i]:= Chr(Ord(mes[i])-16);
end;
rus := mes;
end;{F_Rus}
begin{main}
Randomize;//Запускаем генератор
writeLn(rus('Анализ числовой последовательности на случайность ver 22/09/2008'));
writeLn(rus('Проверка генер случ чисел')); //w:=Random(255);writeLn('w=',w:3);
ss:=0;//Обнуляем счетчик общая длина двоичной последовательности
s0:=0;s1:=0;//Обнуляем счетчик повторений 0 и 1
s00:=0;s01:=0;s10:=0;s11:=0;//Обнуляем счетчик повторений (0,0)(0,1)(1,0)(1,1)
//Обнуляем счетчик повторений (000),(001),(010),(011),(100),(100),(110),(111)
s000:=0;s001:=0;s010:=0;s011:=0;s100:=0;s101:=0;s110:=0;s111:=0;
for ii := 1 to 416667 do
begin//ii большой цикл по 24 битам
//Генерируем три случайных десятичных числа, переводим в 0,1 = 24 бита
k24:=0;
for i:=1 to 3 do
begin//i
//Генерируем число в диапазоне 0..255
w:=Random(255); //write('w=',w:3,' ');
for j:=7 downto 0 do
begin//j в этом цикле достаем биты 0,1 из байта 0..255
k24:=k24+1;
w1:=w shl j;
w1:=w1 shr 7;
m24[k24]:=w1; //write(w1);
end;//j
//writeLn;
end;//i
//for i:=1 to 24 do write(m24[i]);writeLn;
//Анализ 24 бит на (0),(1)
for i:=1 to 24 do if m24[i]=0 then s0:=s0+1 else s1:=s1+1;
//Анализ 24 бит на (00),(01),(10),(11)
k24:=0;
for i:=1 to 12 do
begin//i
for j:=1 to 2 do
begin k24:=k24+1;m2[j]:=m24[k24] end;//j
if m2[1]=0 then
begin if m2[2]=0 then s00:=s00+1 else s01:=s01+1 end
else
begin if m2[2]=0 then s10:=s10+1 else s11:=s11+1 end;
end;//i
//Анализ 24 бит на (000),(001),(010),(011),(100),(100),(110),(111)
k24:=0;
for i:=1 to 8 do
begin//i
for j:=1 to 3 do
begin k24:=k24+1;m3[j]:=m24[k24] end;//j
if m3[1]=0 then
begin
if m3[2]=0 then begin if m3[3]=0 then s000:=s000+1 else s001:=s001+1 end
else begin if m3[3]=0 then s010:=s010+1 else s011:=s011+1 end
end
else
begin
if m3[2]=0 then begin if m3[3]=0 then s100:=s100+1 else s101:=s101+1 end
else begin if m3[3]=0 then s110:=s110+1 else s111:=s111+1 end
end;
end;//i
ss:=ss+24;
end;//ii
dd:=ss;
d0:=s0;d0:=dd/d0; d1:=s1;d1:=dd/d1;
dd:=dd/2; //таким образом учитываем общее число пар
d00:=s00;d00:=dd/d00;d01:=s01;d01:=dd/d01;
d10:=s10;d10:=dd/d10;d11:=s11;d11:=dd/d11;
dd:=ss;dd:=dd/3; //таким образом учитываем общее число триад
d000:=s000;d000:=dd/d000;d001:=s001;d001:=dd/d001;
d010:=s010;d010:=dd/d010;d011:=s011;d011:=dd/d011;
d100:=s100;d100:=dd/d100;d101:=s101;d101:=dd/d101;
d110:=s110;d110:=dd/d110;d111:=s111;d111:=dd/d111;
writeLn(rus('Общая длина последовательности из 0 и 1 = '),ss);
writeLn(rus('Вероятности событий'));
writeLn(' "0"=1/',d0:7:5,' "1"=1/',d1:7:5);
writeLn;
writeLn(' "00"=1/',d00:7:5,' "01"=1/',d01:7:5);
writeLn(' "10"=1/',d10:7:5,' "11"=1/',d11:7:5);
writeLn;
writeLn(' "000"=1/',d000:7:5,' "001"=1/',d001:7:5);
writeLn(' "010"=1/',d010:7:5,' "011"=1/',d011:7:5);
writeLn(' "100"=1/',d100:7:5,' "101"=1/',d101:7:5);
writeLn(' "110"=1/',d110:7:5,' "111"=1/',d111:7:5);
write('End. Press Enter');ReadLn;
end{main}.
|