我正在写一个
Connect Four游戏引擎.目前我正在使用
Zobrist hashing为不同的Connect Four板位置生成散列键(为了不做同样的事情两次,评估的板位置存储在散列表中).评估的板位置(极小极大树中的节点)始终彼此靠近.不幸的是,关闭板位置被映射到均匀分布的哈希键,导致大量的cpu缓存未命中.
是否有可能构建一个哈希函数,将关闭板位置映射到关闭哈希键?
一个玩家的棋盘位置由以下结构的位板表示:
. . . . . . . TOP
5 12 19 26 33 40 47
4 11 18 25 32 39 46
3 10 17 24 31 38 45
2 9 16 23 30 37 44
1 8 15 22 29 36 43
0 7 14 21 28 35 42
我不知道是否有可能.
谢谢你的帮助!
最佳答案 我不认为这是可能的.一个好的散列键(如用于棋盘游戏的zobrist散列)很可能具有伪随机属性,以在转置表中实现键的均匀分布.在表格中将“靠近”位置的键彼此靠近是矛盾的.
考虑一下:即使您将电路板位置一对一地映射到具有(2 ^ 7-1)^ 7个位置的表格,您也无法将“关闭”电路板位置映射到关闭存储位置:如果一个位于低指数变化,位置将接近,但是单位指数越高,每次的位置差异加倍,而高位数将相差多个太字节;-)
作为国际象棋引擎的作者,我知道这个问题. AFAIK还没有人解决这个问题,每个人都使用zobrist散列,也许有一些小修改.
无论如何,祝你好运解决Connect-4 …我知道它以前已经完成了,但自己做得更令人满意;-)