【发布时间】:2017-03-10 01:46:04
【问题描述】:
我正在寻找一些关于存储条纹图案数据库的所有可能排列的建议。
所以十五个瓷砖问题有 16 个!可能的排列,但是存储 fringe 的值,因此 0(空白图块)、3、7、11、12、13、14、15 是 16!/(16-8)! = 518,918,400 个排列。
我希望将所有这些排列与启发式函数的值一起存储在数据结构中(每次迭代广度优先搜索时都会递增),到目前为止,我正在这样做,但速度非常慢,并且采取了我 5 分钟存储 60,000 这是我没有的时间!
目前我有一个看起来像这样的结构。
Value Pos0 Pos3 Pos7 Pos11 Pos12 Pos13 Pos14 Pos15
我存储给定数字的位置的位置。当我计算启发式值时,我必须使用这些位置作为 ID,我可以快速搜索到给定的组合并检索该值。
我对此非常不确定。拼图的状态用一个数组例子来表示:
int[] goalState = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
我的问题是存储这些值的最佳数据结构是什么?以及检索它们的最佳方法。
(这个问题最初是基于存储在数据库中,但现在我想将它们存储在某种形式的本地数据结构中——因为从数据库中检索速度很慢)
【问题讨论】:
-
“我花了 5 分钟来存储 60,000 个” – 你当时是如何存储它们的?
-
哪个数据库,用什么代码?
-
我认为如果您提供您正在解决的难题的一些详细信息会有所帮助,这样我们就可以了解您要保存哪些排列,哪些不保存。
fringe到底是什么? -
为什么要存储可以生成的内容?似乎是解决回溯问题的一种过度设计的方法。