【发布时间】:2012-09-18 12:43:05
【问题描述】:
在 n x m 的游戏板上检查所有可能长度为 l 的线的时间复杂度是多少?
例如,井字棋盘是 3x3,线被定义为长度 3;有 8 条可能的线路。我们还可以想象一个 9x9 的棋盘和一条规则,即您需要一条长度为 5 的线才能获胜。您如何描述用 n、m 和 l 的不同值检查每条可能的线的复杂性?
请注意,这不考虑将游戏树遍历到未来的游戏状态,只是检查棋盘的当前状态以查看当前状态是否有赢家。
【问题讨论】:
-
为什么首先要检查整个板子?
-
@phant0m 大概是因为您想知道是否有人赢了 - 除非您到处检查(直到找到一个),否则您不会知道。
-
@corsiKa 在每个玩家每次移动都将棋子放在棋盘某处的游戏中,不需要重新检查整个棋盘,至少在简单游戏中不需要,因为单个棋子不会影响整个董事会。例如,在连接 5 游戏中,您最多只需要检查 28 个字段,即使它是 1000x1000 字段。
-
@phant0m 我明白你的意思,特别是问题中的注释特别指出它不考虑遍历游戏树。我可以看到需要进行广域搜索来确定是否要做出获胜的举动,仅检查棋盘状态,并且如果做出举动,那么它是在尚未进入的棋盘上进行的。获胜状态,获胜状态的唯一可能性意味着最近的移动必须是获胜组合的一部分。
-
@corsiKa 我想我不明白你的意思。为什么要遍历游戏树?这不是我的意思,我也不是要寻找获胜的举动。我的意思是,在采取行动之后,您通常不需要评估整个棋盘来确定是否有人赢了。
标签: algorithm scalability big-o game-engine graph-algorithm