| 
											 
													Последний раз редактировалось Черный Евгений 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}. 
					 					 |