algorithm - 奥赛罗棋盘游戏的简单数据结构?

标签 algorithm data-structures tree

我很久以前就完成了我的程序here作为一个 uni 项目,至少它在某种程度上是有效的(你可以尝试 Monkey 和 Novice 级别:))。

我想重新设计并重新实现它,以便练习数据结构和算法。

在我之前的项目中,min-max search 和 alpha-beta pruning 是缺失的部分,也缺少开放字典。

因为游戏板在水平和垂直方向上都是对称的,所以我需要一个比我以前的方法更好的数据结构:

-1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 11 12 13 14 15 16 17 18 -1
-1 21 22 23 24 25 26 27 28 -1
-1 31 32 33 34 35 36 37 38 -1
    . . . . . .

通过这种方式,可以很容易地计算给定任何单元格值的相邻位置,如下所示:

x-11 x-10 x-9
x-1   x   x+1
x+9  x+10 x+11

那些 -1 就像“墙”一样防止错误计算。

最大的问题是它没有考虑对称/方向,即像平行开一样的相同开局在数据库中会有 4 个对应的开局案例,每个方向一个。

有什么好的建议吗?我也在考虑尝试使用 ruby​​ 来获得比 PHP 更快的计算速度(仅用于最小-最大 alpha-beta 修剪,以防我将其编程为向前看 n 步)。

非常感谢您提前提出建议。

最佳答案

当您对要在数据库中存储或查找的位置进行散列时,对所有八个对称位置进行散列,并仅存储或查找八个中最小的位置。因此所有对称位置散列为相同的值。

这会将您的数据库大小减少 8 倍,但会使散列成本增加 8 倍。这是一个很好的权衡吗?这取决于您的数据库有多大以及您进行数据库查找的频率。

关于algorithm - 奥赛罗棋盘游戏的简单数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4111925/

相关文章:

algorithm - TSP : limit time, 的变体访问尽可能多的节点

algorithm - 是否可以使用搜索功能枚举集合中的所有项目

algorithm - 选择策略的动态规划

java - 使用 JPA 创建树

java - 完全二叉树和完美二叉树定义

javascript - 如何将具有相同属性的对象合并到一个数组中?

algorithm - 这个函数在 C 中的时间复杂度是多少?

释放后检查结构体是否释放

algorithm - 为什么线段树需要是满二叉树?

data-structures - 用Rust进行交接锁定