存储大型前缀树的最佳方法
我将编写代表人工智能与玩家玩棋盘游戏的程序。 我想保持每个玩过的游戏都在前缀树中搜索相似的游戏。 但是恐怕树会变得太大而不能留在记忆中。 那么存储它的最佳方式是什么? 并且能够快速搜索。 我不认为将它写入文件是很好的解决方案。 可能会在DB的某个国王?
你正在寻找的是一个嵌入式数据库,其中大部分都是用C ++编写的,但也有一些使用C#包装器。 我建议使用Berkeley DB for .NET(这是Oracle Berkeley DB的封装)。
我推荐的是,你为每个前缀树生成一个独特的哈希,其中生成的哈希将具有一个正确表示相似前缀树的局部性:换句话说,两个相似前缀树的哈希应该彼此非常接近。 你所指的游戏称为Tic-Tac-Toe,所以哈希类似的Tic-Tac-Toe游戏应该很容易,下面是一些参考文献(我没有真正阅读它们,我只是做了一个快速搜索“哈希Tic-Tac-Toe”和那些结果):
然后将散列存储在Berkeley DB中,并将前缀树存储在aux文件中,或者如果需要,也可以将其存储在值中。 由于Berkeley DB存储键值对,因此可以将散列设置为键和值(例如,您的前缀树或包含前缀树的辅助文件的路径)。 然后,你所做的就是查找类似的散列并从aux文件中检索相应的树。
Berkeley DB按顺序存储相似的键,所以您可以依赖它不会移动键并打破哈希位置的事实。 由于本地不会被破坏,因此您可以进行额外的优化并检索大量的键值对,并减少查找次数并寻求您在磁盘上执行的操作。
链接地址: http://www.djcxy.com/p/52863.html