【问题标题】:Number guessing game with a twist数字猜谜游戏
【发布时间】:2013-01-09 04:02:48
【问题描述】:

通常情况下,如果知道猜测大于或小于该秘密数字,则给定一些秘密数字的数字猜谜游戏算法只是对二分搜索算法的修改。假设秘密数字是 13。算法会尝试 1(小于 13)、2(小于 13)、4(小于 13)、8(小于 13)、16(大于 13,回溯)、10(小于 13), 13(等于秘密,停止。)

但是,如果不知道猜测是小于还是大于秘密数字,并且唯一的状态是相等或不相等怎么办?什么算法最有效?当然不是暴力破解……

编辑:对于这两种情况,数字可能有一个上限和下限。

【问题讨论】:

  • 如果相等或不相等,我会记住 101324134807025 并作为第一个用户测试您的算法。但我没有一整天的时间..

标签: performance algorithm random numbers


【解决方案1】:

嗯,你得到的信息是答案不正确。由于它是唯一可用的信息,我认为蛮力将是唯一的方法。你也可以从零开始往上走。

【讨论】:

    【解决方案2】:

    我不确定您对此类问题的预期性能提升。正如大多数人所建议的那样,没有重要的方法可以改善 O(n) 的最坏情况。您仍然可以坚持使用二分搜索方法,在这种方法中,每个不相等的猜测最初都被视为小于操作“。在玩“猜数字游戏”的实际场景中,我相信这“可能”比顺序暴力更好。

    一般来说,如果我们能找到一种算法,可以确定地猜测最小猜测中的数字,我相信世界各地的许多游戏很快就会变得多余:)

    【讨论】:

      【解决方案3】:

      如果相等/不相等是您获得的唯一信息,那么没有任何算法可以比蛮力提供更好的平均情况或更好的最坏情况性能(即从下限开始直到上限) .

      要获得更好的平均案例性能,您需要一些额外的信息。至少有一些统计数据,例如“只有 10% 的秘密数字低于 20”等,然后可以用来获得更好的平均案例性能(在本例中,可能是从 21 开始搜索)。

      即便如此,最坏情况下的性能仍然不会比蛮力更好。

      【讨论】:

        【解决方案4】:

        如果您想象一个对手直到他们必须要确定数字时才真正决定数字,那么您可以看到您可能必须依次询问每个数字。他们可以简单地说“错误的答案”,直到你猜出所有可能的数字,并且他们的答案可能是真实的,基于你猜到的最后一个数字的初始选择。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-08-16
          相关资源
          最近更新 更多