我正在寻找关于存储条纹模式数据库的所有可能排列的一些建议.
所以十五个瓷砖问题有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
Run Code Online (Sandbox Code Playgroud)
我存储给定数字的位置.我必须使用这些位置作为ID,当我计算启发式值时,我可以快速浏览到给定的组合并检索值.
我对此非常不确定.拼图的状态由数组示例表示:
int[] goalState = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}
Run Code Online (Sandbox Code Playgroud)
我的问题是存储这些值的最佳数据结构是什么?以及检索它们的最佳方法.
(这个问题最初是基于存储在数据库中,但现在我想将它们存储在某种形式的本地数据结构中 - 因为从数据库中检索速度很慢)
我正在学习prolog,我正在为一个非常简单的游戏编写下一个谓词.
你有一个列表[1,0,1,0,0,1]一个合法的移动是1移动到一个零位置,1只能向右移动到包含0的第一个位置,但它允许跳过其他必要时的价值观
首先我写了一个谓词来将值0更改为1:
flip_first_zero([0|Tail], [1|Tail]).
Run Code Online (Sandbox Code Playgroud)
很简单,现在我想找到合法的举动,我会尝试解释我的思考过程:
next([],[],[]).
next([Head|Tail], Rest, Out):-
flip_first_zero([Head|Tail],List1),
append(Rest,List1,Out).
next([Head|Tail], [Head|Rest], List):-
next(Tail,Rest, List).
Run Code Online (Sandbox Code Playgroud)
[1,0,0,1,1,1,0]
输出应该是一个例子[0,1,0,1,1,1,0] ; [1,0,0,0,1,1,1]; [1,0,0,1,0,1,1] ; [1,0,0,1,1,0,1].
[ 1,0,0,1,1,1,0] - > [0,1,0,1,1,1,0]
[1,0,0,1,1,1,0] - > [1,0,0,0,1,1,1 ]
[1,0,0,1,1,1,0] - > [1,0,0,1,0,1,1 ]
[1,0,0,1,1,1,0] - > [1,0,0,1,1,0,1 ]
所以我是如何理解这一点的,我每次都通过在Rest中保存它来循环移除头部,所以我可以在之后重新附加它.
我接近这个错吗?
所以我在文本文件中加载了大量文件名,这些.log
文件都是特定文件:
ls *.log > finished_data.txt
Run Code Online (Sandbox Code Playgroud)
既然我有.log
文件列表,我如何保留名称但删除.log
扩展名?我的思维过程是将它们全部重命名?