2010-06-23 143 views
6

给定有限值的伪随机二进制序列(例如:00101010010101),预测序列将如何继续。有人能告诉我最简单的方法吗?或者,如果某人在其计算机上几乎不能玩单人纸牌游戏时很难,有人可以告诉我在哪里开始第一步... PS:可以使用此技术来预测下一个电子轮盘赌数字的颜色(例如:分别将10分配给红色和黑色)?伪随机二进制序列预测

回答

1

首先回答PS:不,因为轮盘赌旋转是独立的事件,所以在历史结果序列中没有任何预测性。

一般问题很难和有趣。 这个网站可以从他们的初始值推断序列的数量惊人:

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

注意,它是任意整数序列。

我尝试了{0,0,1,1,0,0,1,1,...}这样的简单模式,它说的是正确的。

1

那么,对于伪随机序列,唯一的可能性是保持计数每种可能性之前有多少。如果1s大于0,则下一个更可能为0.更可能取决于每个的相对出现次数。

请注意,这不会对真正的随机性,因为事件是独立的,尽管什么统计学家告诉你:-)

工作,你会发现,出(痛苦)你第一次得到的运行当您使用轮盘赌的双重丢失方法时,桌上有13个红色。在任何情况下,房屋的优势都是从0(在某些桌子上是双倍的0)中获得的,既不是红色也不是黑色。

+0

我的直觉不会让我放弃蒙特卡罗的方式。事实上,黑色和红色甚至在很长一段时间内看起来像是在某个阶段,你需要一连串红色来对付黑色。显然,在智力上,我知道这是一个谬论,但它是一个非常狡猾的。 – 2010-06-23 01:23:09

+0

如果你认为事件是独立的,你是对的。但是,如果不是,那么你提出的统计方法将会完全失败。例如,统计方法将建议0作为{1,0,0,1,0,0,1,0,0,1,0,0,...}中的下一个数字。把它提供给整数序列的在线百科全书(参见我的答案),它会正确地推断出下一个数是1.(当然,如果你知道事件真的是独立的,那么看起来的模式是巧合,你应该说0!) – dreeves 2010-06-23 01:29:25

+0

这是一个很难放过的@格拉辛。但我脑海中的“漫长时间”意味着数万亿和数万亿的事件,而不是你在一天晚上可以在赌场做的事情:-)另一件需要注意的事情是,事件虽然彼此独立,但并不一定不受影响。我已经看到可以将球放置在特定象限的赌徒们(尽管这是传言,我知道有些人可以把它降到八分之一)。这是你想要在你身边而不是房屋的那个人(至少在他在统计分析中发现他的房子总是这么做)。 – paxdiablo 2010-06-23 01:51:18

1

这是一个体面的问题,但我认为如果“你几乎不能玩单人纸牌”,它现在可能已经不在你的范围之内了。

你应该研究一下基本语言,大多数人都会说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秒的计数,并说另一个更可能是基于你的基线的偏差。但是,请注意Monte Carlo fallacy

+0

“大多数人会说PHP”?真? :P – 2010-06-23 04:39:34

+0

是的,每当我看到“应该学什么”的时候,PHP都会被建议,这很困难,因为确定它们很容易部署,许多程序员缺少网络基础知识,但同时PHP会惩罚你正确编码,你作为一个新手可怕的错误。 – 2010-06-23 06:50:04

3

密码安全的伪随机数生成器专门用于使你想做的事情不可能。特别是,它们满足“下一位测试”:给定k位的输出,你不能猜测位k+1的概率大于1/2

由于选择了PRNG,不能满足下一位测试的普通伪随机数发生器可能受到攻击,事实上在现实世界的系统中发现了安全漏洞。特别是,已知线性同余生成器有点(或完全)可预测,并且某些版本的Unix随机可能使用此算法。这种方法虽然数学密集。如果你想沿着这条路走下去,搜索“线性同余发生器预测”是一个开始的地方。

如果您知道PRNG实现的另一个攻击是尝试确定用于生成您正在分析的序列的种子。种子有时基于可猜测的信息,如时间,进程ID等。

0

我注意到没有人告诉过你周期性。

伪随机序列总是在数学运算上工作。 (直到量子计算机^^)

通常的方式来产生一个是分裂两个素数(不知道这是正确的词,但不管)。

例如

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:对不起,我的英语,我有点生锈的^^

+0

欢迎来到Stack Overflow!请给出完整的答案:在这种情况下,您应该提供一些代码或至少一个算法来证明您的概念。也欢迎链接到外部来源。 – 2012-12-02 13:53:09

+0

此外,请注意,英文字母不使用“àccéntédléttérs”;) – 2012-12-02 13:54:46

0

你需要考虑什么是随机性的特性,研究这些。例如,“随机性运行在一束”。将随机序列与可预测的序列进行比较:通常情况下,您不会在可预测的序列中找到丛集。为了利用束等待一堆。如果运气好一点,你就会赢。