【问题标题】:Algorithm for a matter of chance game概率博弈的算法
【发布时间】:2016-11-23 15:08:46
【问题描述】:

我开始开发一种具有以下规则的随机游戏算法:

  • 游戏开始时,玩家从起始案例 S(Start) 开始。

  • 他首先掷骰子,然后将上面指示的空格数向前推进。

  • 骰子的可能值从 1 变为 6。

  • 然后玩家执行当前情况下指示的动作(前进、后退、重新掷骰子(如果当前情况为 R:重新掷骰子)。

  • 每个动作需要 1 回合。

  • 当玩家到达终点 E(End) 时游戏获胜。玩家必须准确落到终点线上,不能超过。

  • 开始和结束的情况 S 和 E 不一定在托盘的开头和结尾。

  • 从棋盘出来的一回合输掉比赛。

这是一个例子:

| 4 | S | -2 | 1 | R | 4 | 3 | 4 | 3 | -5 | 2 | -4 | E |

玩家从 S 机箱开始。最快的获胜方式是:

  • 掷骰子并掷出 3,到达 R 方格(转 1)。

  • 重新掷骰子并掷出 6,到达第 2 格(第 2 回合)。

  • 玩家必须前进 2 个箱子,到达箱子 E(第 3 回合)。

预期结果是 3,因为至少需要 3 次发射才能完成游戏。

我的解决方案基于一种算法,该算法从 End 案例开始并检查哪些案例驱动到 End 案例。然后,我会检查哪些案例可以到达我已经找到的案例。这样一来,我就不必检查不会导致最终案例的案例。

问题是,我更喜欢更重视代码的质量和有效性,因为我认为我找到的算法还不够。

有什么建议吗?

【问题讨论】:

    标签: algorithm performance optimization complexity-theory


    【解决方案1】:

    您可以将您的图板视为有向图。每个案例都是一个节点,编号的案例有边将它们连接到它们指向的案例,而 S 和 R 案例有六个边将它们连接到接下来的六个案例。边的权重都相同。

    在这种情况下,您的问题变成了沿最短路径查找起点和终点节点之间的距离,这是has been widely studied in many different variants 的问题。

    作为参考,您可以查看标准 breadth-first search,您的算法应该与此等效(不过,您可以在找到目的地后立即返回,完整的算法会计算从一个节点到所有其他节点的距离)。

    我认为决定是从 End 案例还是从 Start 开始并不重要,在这两种情况下,您都会有一些董事会结构,分析起来会更慢或更快,但平均复杂度应该是相同的。 (正如您所说,从 End 开始您避免检查不会导致它的案例,但从 Start 开始您将避免检查无法从它到达的案例)

    【讨论】: