btreemap vs hashmap 换位表

问题描述

我创建了一个极小极大算法,该算法使用 alpha beta 修剪和转置表来加快搜索速度。我目前正在使用一个哈希图,它使用板状态作为键并将分数保存为值。 (游戏是 5x5 棋盘上的井字游戏)

这样做的问题是散列速度很慢,并且使用整个板状态作为密钥会占用大量内存。棋盘状态由具有 3 种可能类型的 2d 枚举数组表示:Blank、X 和 O。我想使用我自己的哈希(可能是 zobrist)作为键,根本不保存棋盘状态,但是哈希图会拿走我的钥匙并再次散列它。我曾考虑使用将键视为唯一的 btree 映射,但访问时间是 log(n) 而不是 O(1)。我也不关心键的顺序,所以 btree 似乎并不适合这里。

所以我的问题是,哪种数据结构在这里是理想的?即使它第二次散列我的密钥,我也应该使用散列图吗?

解决方法

我一直在做类似的事情,这是我最终得到的,适合您的情况:

所有这一切都是一粒盐。就我而言,它有助于加快搜索速度,但您必须单独测试您的案例。