【问题标题】:Pseudo-Random Binary Sequence Prediction伪随机二进制序列预测
【发布时间】:2010-06-23 01:09:01
【问题描述】:

给定一个有限值的伪随机二进制序列(例如:00101010010101),预测该序列将如何继续。有人可以告诉我最简单的方法吗?或者如果对于几乎无法在计算机上玩纸牌的人来说太难了,有人可以告诉我从哪里开始我的第一步...... PS:这个技术可以用来预测下一个电子轮盘号码的颜色吗(例如:将10分别指定为红色和黑色)?

【问题讨论】:

    标签: random binary sequence prediction


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      请注意,这不适用于真正的随机性,因为事件是独立的,尽管统计学家告诉您:-)

      当您使用双输法玩轮盘赌时,您会(痛苦地)第一次在桌面上获得 13 个红牌。在任何情况下,庄家都从既非红非黑的 0(在某些牌桌上为双 0)获得优势。

      【讨论】:

      • 我的直觉不会让我放弃蒙特卡洛谬误。事实上,黑色和红色在很长一段时间内都是一样的,似乎在某个阶段你需要一连串红色来对抗黑色的奔跑。显然,在理智上我知道这是一个谬误,但这是一个该死的狡猾的谬误。
      • 如果您假设事件是独立的,那么您是对的。但如果不是,那么您提出的统计方法可能会完全失败。例如,统计方法将建议 0 作为 {1,0,0,1,0,0,1,0,0,1,0,0,...} 中的下一个数字。将其提供给整数序列在线百科全书(请参阅我的答案),它会正确推断下一个数字是 1。(当然,如果您知道事件确实是独立的,那么看起来的模式是巧合,您真的应该说0!)
      • 很难放手,@Graphain。但在我看来,“长时间”意味着数万亿和数万亿的事件,而不是你在赌场一晚可以做的事情 :-) 你需要注意的另一件事是,这些事件虽然相互独立,但不一定独立于影响。我见过可以将球可靠地放置在特定象限中的荷官(虽然这是谣言,但我被告知有些人可以将球降低到八分之一)。那是你想要的人而不是房子(至少在他在统计分析中发现房子总是这样做之前)。
      • 我看到人们基于这样的偏见而获胜。我想知道荷官会不会觉得无聊,然后说“我整晚都瞄准 22 号”
      【解决方案3】:

      这是一个不错的问题,但我认为如果“你几乎不能玩纸牌”,那现在可能是你无法企及的。

      您应该考虑学习一种基本语言,大多数人会说 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

      【讨论】:

      • "大多数人会说 PHP"?真的吗? :P
      • 是的,每次我看到“菜鸟应该学什么”时,都会有人建议 PHP,这很困难,因为它们很容易部署,而且很多程序员都缺少 Web 基础知识,但同时 PHP 会惩罚你用于正确编码并给您作为新手带来可怕的错误。
      【解决方案4】:

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

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

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

      请注意,它适用于任意整数序列。

      我在 {0,0,1,1,0,0,1,1,...} 之类的简单模式上进行了尝试,结果正确。

      【讨论】:

        【解决方案5】:

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

        伪随机序列始终适用于数学运算。 (直到量子计算机^^)

        生成一个通常的方法是将两个素数相除(不确定它是否正确,但无论如何)。

        例如

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

        【讨论】:

        • 欢迎来到 Stack Overflow!请给出完整的答案:在这种情况下,您应该提供一些代码,或者至少提供一个算法来证明您的概念。也欢迎链接到外部资源。
        • 另外,请注意英文字母表不使用“àccéntéd léttérs”;)
        【解决方案6】:

        您需要考虑的是随机性的属性,研究这些。例如,“随机性成束运行”。将随机序列与可预测序列进行比较:您通常不会在可预测序列中找到束。要利用束等待束。运气好的话,你会赢的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-05-27
          • 2011-11-03
          • 1970-01-01
          • 2015-08-26
          • 1970-01-01
          • 2020-09-07
          • 2017-08-28
          相关资源
          最近更新 更多