Псевдослучайное предсказание двоичной последовательности - PullRequest
6 голосов
/ 23 июня 2010

Учитывая псевдослучайную двоичную последовательность (например: 00101010010101) конечных значений, предсказать, как последовательность будет продолжаться.Может кто-нибудь сказать, пожалуйста, самый простой способ сделать это?Или в случае, если это слишком сложно для того, кто едва может играть в пасьянс на своем компьютере, кто-то может сказать мне, где получить мои первые шаги ... PS: можно ли использовать эту технику, чтобы предсказать цвет следующего номера электронной рулетки (например:присвоение 1 и 0 красному и черному соответственно)?

Ответы [ 6 ]

3 голосов
/ 23 июня 2010

Криптографически безопасные генераторы псевдослучайных чисел предназначены специально для того, чтобы сделать то, что вы хотите, невозможно. В частности, они удовлетворяют «следующему битовому тесту»: учитывая k бит их вывода, вы не можете угадать бит k+1 с вероятностью, превышающей 1/2.

Обычные генераторы псевдослучайных чисел, которые не удовлетворяют следующему битовому тесту, могут быть атакованы, и на самом деле в реальных системах были обнаружены уязвимости, связанные с выбором PRNG. В частности, известно, что линейные конгруэнтные генераторы несколько (или полностью) предсказуемы, и некоторые версии Unix random могут использовать этот алгоритм. Этот метод довольно интенсивный, хотя математика. Если вы хотите пойти по этому пути, то поиск «линейного конгруэнтного предсказания генератора» - это место, с которого стоит начать.

Другая атака, если вам известно о реализации PRNG, - попытаться определить начальное число, используемое для создания последовательности, которую вы анализируете. Семя иногда основывается на предположительной информации, такой как время суток, идентификатор процесса и т. Д.

1 голос
/ 23 июня 2010

Это достойный вопрос, но я думаю, что если "вы едва можете играть в пасьянс", это может быть вне вашей досягаемости прямо сейчас.

Вы должны изучить выбор базового языка, и большинство из них скажут PHP, но я с осторожностью рекомендую это новичку (хотя довольно легко начать работать, см .: XAMPP).Java, вероятно, является языком, который «легко заставить работать и работать», но я уверен, что здесь есть лучшие темы о том, с какого языка начинать (Python или что-то, вероятно, выигрывает, потому что опытные программисты любят его).

Кстати, ваш английский в порядке (я не заметил, что вы не являетесь носителем английского языка).

Теперь, что касается вашего вопроса, если вы смотрите на истинный образецсоответствия.Я был бы склонен преобразовать эту идею в код:

 "CURRENTPOINT" is end of first letter.
 LOOP: Pick letter(s) from Start to "CURRENTPOINT"
 Break the rest of your binary string into blocks of the same size.
 See if these blocks all equal your picked letters.
 If not, move "CURRENTPOINT" along and repeat the LOOP until you run out of letters.
 If so, you have your "repeating section."

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

1 голос
/ 23 июня 2010

Ну, для псевдослучайных последовательностей единственная возможность состоит в том, чтобы подсчитать, сколько из каждой возможности появилось раньше.Если 1 перевешивают 0, более вероятно, что следующее будет 0. Насколько более вероятно, зависит от относительных вхождений каждого.

Обратите внимание, что это не будет работать для истинной случайности, так как событиянезависимый, несмотря на то, что статистики говорят вам: -)

Вы обнаружите это (мучительно) в первый раз, когда получите 13 красных столов, когда вы используете удвоение при потереметод игры в рулетку.В любом случае дом получает свое преимущество от 0 (и двойного 0 на некоторых столах), которые не являются ни красными, ни черными.

1 голос
/ 23 июня 2010

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

Общий вопрос сложный и интересный. Этот веб-сайт может вывести удивительное количество последовательностей из их начальных значений:

http://www.research.att.com/~njas/sequences/

Обратите внимание, что это для произвольных целочисленных последовательностей.

Я попробовал это на простых шаблонах, таких как {0,0,1,1,0,0,1,1, ...}, и это говорит о правильном.

0 голосов
/ 15 мая 2014

Что вам нужно подумать, так это свойства случайности, изучите их.Например, «Случайность работает в пучках».Сравните случайную последовательность с предсказуемой: обычно вы не найдете сгустки в предсказуемой.Чтобы воспользоваться пучками, ждите их.И если повезет, вы выиграете.

0 голосов
/ 11 января 2011

Я заметил, что никто не говорил вам о периодичности.

Псевдослучайная последовательность всегда работает над математической операцией.(до количественного компьютера ^^)

Обычный способ сгенерировать один - разделить два простых числа (не уверен, что это правильное слово, но как угодно).

, например

1/3=1.333333.....
9/7=1,2857142857142857142857142857143

Это довольно небольшое число, и что мы замечаем?Периодичность.

1/3=1.3 3 3 3 3 3.....
9/7=1,2857 142857 142857 142857 142857 143

Чем больше простое число, тем больше последовательность в этом случае: 3 и 142857 будут большими

Так что, если вы посмотрите на псевдослучайную последовательность дляДолгое время вы можете найти периодичность и сможете «угадать» следующее число.Но это может занять некоторое время.

PS: извините за мой английский, я немного заржавел ^^

...