Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Иследование ряда на случайность


Автор: Simon14 7.6.2009, 00:25
Мне необходимо проверить ряд на случайность есть формулы 
вот одна из них 
li=Фигурные скобки 1,ui<u1,ui<u2, ui<un 
                               0, иначе 
Но не могу розобраться я правильно написал код или нет
подскажите вот код где ui = v[i].x а u2=v[i-1].x
Код

for ( i=1; i < d; i++)
 if ( v[i].x < v[i-1].x)
   li=  v[i].x-v[i-1].x;

зрание благодарен

Автор: xvr 8.6.2009, 17:11
В книжке Handbook of applied cryptography (есть в Inete) есть целая глава посвященная проверкам на случайность (для генераторов случайных чисел). Они куда более сложные, чем то, что написано выше  smile 

Автор: Simon14 8.6.2009, 18:21
ето только одна формула их там много только я не уверен правильно ли я написал код для данной формулы

Автор: xvr 8.6.2009, 18:57
Если учесть, что li может принималь значения 0 и 1, то li вычисляется явно неправильная.
Если это не принимать во внимание, то нужно уточнение для исходной формулы: не понятно кто такой un и почему использованны только u1 и u2?

Автор: Simon14 8.6.2009, 20:39
Возможно я не правильно написал исходную формулу тогда  примерно так 
li=Фигурные скобки 1,u[i]<u[1],u[i]<u[2], u[i]<u[n] 
                               0, иначе 

Цитата

Если учесть, что li может принималь значения 0 и 1,

1 тоесть первое значение для u[1] а не u[0] 
Цитата

Если это не принимать во внимание, то нужно уточнение для исходной формулы: не понятно кто такой un и почему использованны только u1 и u2?

исходя из выше написаного думаю обяснять что такое u1, u2 и un не следует 
Извеняюсь за некоректное написание формулы переписывал с конспекта 

Автор: xvr 8.6.2009, 20:49
Цитата(Simon14 @ 8.6.2009,  20:39)
Возможно я не правильно написал исходную формулу тогда  примерно так 
li=Фигурные скобки 1,u[i]<u[1],u[i]<u[2], u[i]<u[n] 
                               0, иначе 
Цитата

Если учесть, что li может принималь значения 0 и 1,

1 тоесть первое значение для u[1] а не u[0] 

Нет, именно САМА li (я так понимаю, что это l[i]) может принимать ТОЛЬКО значения 0 и 1 (это и обозначает фигурная скобка в формуле)
Цитата

исходя из выше написаного думаю обяснять что такое u1, u2 и un не следует 
Это нет, а вот что такое 'n' - следует

По поводу формулы - то, как она записана значит, что цикла там нет, и сравниваются только 1, 2 и n'й элементы с i'м элементом

Автор: Simon14 8.6.2009, 21:22
Цитата

Это нет, а вот что такое 'n' - следует

u[n] какоето число например   u[1]u[2]u[2]u[3] и так далее
для точности прикрепляю фотографию формулы

Автор: xvr 8.6.2009, 21:37
Цитата(Simon14 @ 8.6.2009,  21:22)
Цитата

Это нет, а вот что такое 'n' - следует

u[n] какоето число например   u[1]u[2]u[2]u[3] и так далее
для точности прикрепляю фотографию формулы

Да уж, тщательнее надо конспекты читать, там не ,un а  ... u i-1  smile 
В переводе на русский язык это будет звучать так - 
Код

l(i) равно 1, если u(i) меньше всех предшествующих u
и равно 0 в противном случае
В виде кода это будет (считаю, что нулевой индекс в массиве не используется):
Код

bool l(int index)
{
 bool rv=true;
 for (int i=1; i < index; i++)
  if ( v[index].x >= v[i].x)
   rv=false;
 return rv;
}
вызов - l(i)

Автор: Simon14 8.6.2009, 22:00
Цитата

Да уж, тщательнее надо конспекты читать, там не ,un а  ... u i-1

да но конспект не мой и если поставить в цикл і  и начать с 1 то в принципе
как раз данній код должен біть правильно 
Цитата

Код

for ( i=1; i < index; i++)
 if ( v[i].x < v[i-1].x)


вот только не пояму почему у вас 
Код

bool l(int index)
{
 bool rv=true;
 for (int i=1; i < index; i++)
  if ( v[index].x >= v[i].x)
   rv=false;
 return rv;

rv что значит и почему if ( v[index].x >= v[i].x) знак >= что ето значит
 также есть еше один вопросик последуюшая формула имеет следуюший вид 
L = l[1]+l[2]+l[3]... l[n]
 
Код

L=0;
  for ( i=1; i < d; i++)
 L=L+l[i];

тоисть та li которую мы находили в предыыушей формуле
вот  я  и не могу понять как с той формулы которую я вывел как фотку найти програмно li? 


Автор: xvr 8.6.2009, 23:47
Цитата(Simon14 @ 8.6.2009,  22:00)
да но конспект не мой и если поставить в цикл і  и начать с 1 то в принципе
как раз данній код должен біть правильно 
Цитата

Код

for ( i=1; i < index; i++)
 if ( v[i].x < v[i-1].x)



Не правильно. Сравнение должно быть if (v[i].x < v[index].x)

Цитата

вот только не пояму почему у вас 
Код

bool l(int index)
{
 bool rv=true;
 for (int i=1; i < index; i++)
  if ( v[index].x >= v[i].x)
   rv=false;
 return rv;

rv что значит
В этой переменной накапливается возвращаемое значение
Цитата

 и почему if ( v[index].x >= v[i].x) знак >= что ето значит
 У, как все запущенно  smile Это значить 'больше или равно', что является противоположностью условию 'меньше'
Работает это так - изначально предполагается, что будет возвращена 1 (true)
Потом перебираются все элементы, с которыми надо сравнивать u[index], и если для какого нибудь элемента условие не выполняется, то возвращаемое значение меняется на 0 (false). Это собственно и означает условие из формулы: u[index]<u[i] для всех i, меньших index

Цитата

также есть еше один вопросик последуюшая формула имеет следуюший вид 
L = l[1]+l[2]+l[3]... l[n]
 
Код

L=0;
  for ( i=1; i < d; i++)
 L=L+l[i];

тоисть та li которую мы находили в предыыушей формуле
Угу, только вместо l[i] надо поставить l(i)
Цитата

вот  я  и не могу понять как с той формулы которую я вывел как фотку найти програмно li?
Я ж вам формулу написал  smile 
 smile 
В дремучем колхозе лектор из общества 'Знание' читает лекцию о преимуществах электрификации. Рассказывает, как электричество может освещать дом, обогревать и еще много чего делать.
Завершает лекцию, спрашивает у колхозников - какие будут вопросы.
Встает один мужик и говорит -
- Это все конечно хорошо, и свет там и тепло, вот только я никак в толк не возьму - как керосин будет по проводам течь?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)