Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List prolog列出了所有不同的fd\u,并且设置了什么更快?_List_Prolog_Set_Clpfd - Fatal编程技术网

List prolog列出了所有不同的fd\u,并且设置了什么更快?

List prolog列出了所有不同的fd\u,并且设置了什么更快?,list,prolog,set,clpfd,List,Prolog,Set,Clpfd,我只是想知道你们谁知道什么更快 L=[1,2,3,4,5], all_different(L). % needs use_module(library(clpfd)). 或 有人知道吗?我的数独游戏需要更快的解决方案。谢谢 使用predicate time/1来测量推断的数量和执行计算所花费的实际时间。 在您的示例中,您将执行以下操作 time((L=[1,2,3,4,5], all_different(L))) vs. time((L=[1,2,3,4,5], is_set(L))) 请注

我只是想知道你们谁知道什么更快

L=[1,2,3,4,5], all_different(L). % needs use_module(library(clpfd)).


有人知道吗?我的数独游戏需要更快的解决方案。谢谢

使用predicate time/1来测量推断的数量和执行计算所花费的实际时间。 在您的示例中,您将执行以下操作

time((L=[1,2,3,4,5], all_different(L))) vs. time((L=[1,2,3,4,5], is_set(L)))

请注意,测量的时间直到第一次成功。

使用谓词time/1来测量推断的数量和执行计算所花费的实际时间。 在您的示例中,您将执行以下操作

time((L=[1,2,3,4,5], all_different(L))) vs. time((L=[1,2,3,4,5], is_set(L)))

请注意,测量的时间直到第一次成功。

所有不同/1和之间的区别在于前者使用“约束逻辑”,可以在列表的条目完全实例化之前施加预期限制,这样,当Prolog引擎被迫统一列表参数的两个条目或为其分配相等的值时,就会发生故障

我们可以通过以下一对查询说明所有不同的“约束逻辑”:

?- length(L,5), all_different(L), L=[1,2,3,4,5].
L = [1, 2, 3, 4, 5].

?- length(L,5), all_different(L), L=[1,2,3,4,1].
false.
有必要为所有不同的条目提供一个适当的列表,但不能有一个完全绑定的条目或“基本”条目。上述情况表明,所有不同的都可能对列表的条目施加约束

将结果与is_set进行比较:

?- length(L,5), is_set(L), L=[1,2,3,4,5].
L = [1, 2, 3, 4, 5].

?- length(L,5), is_set(L), L=[1,2,3,4,1].
L = [1, 2, 3, 4, 1].
一旦设置成功,它就无法阻止将来创建相等项的绑定


因此,谓词all_different依赖约束逻辑库中的额外机制来完成设置的无法完成的任务,在大多数情况下,这个额外机制会增加开销。然而,在维克多的问题中,用了简单的方法,额外的机器并没有用得太多。检查是在完全约束的条件下进行的,而不是以预期的方式,效率是可比的。

所有不同的/1
之间的区别在于前者使用“约束逻辑”,并且可以在列表的条目完全实例化之前施加预期限制,这样,当Prolog引擎被迫统一列表参数的两个条目或为其分配相等的值时,就会发生故障

我们可以通过以下一对查询说明所有不同的“约束逻辑”:

?- length(L,5), all_different(L), L=[1,2,3,4,5].
L = [1, 2, 3, 4, 5].

?- length(L,5), all_different(L), L=[1,2,3,4,1].
false.
有必要为所有不同的条目提供一个适当的列表,但不能有一个完全绑定的条目或“基本”条目。上述情况表明,所有不同的都可能对列表的条目施加约束

将结果与is_set进行比较:

?- length(L,5), is_set(L), L=[1,2,3,4,5].
L = [1, 2, 3, 4, 5].

?- length(L,5), is_set(L), L=[1,2,3,4,1].
L = [1, 2, 3, 4, 1].
一旦设置成功,它就无法阻止将来创建相等项的绑定


因此,谓词all_different依赖约束逻辑库中的额外机制来完成设置的无法完成的任务,在大多数情况下,这个额外机制会增加开销。然而,在维克多的问题中,用了简单的方法,额外的机器并没有用得太多。检查是在完全约束条件下进行的,而不是以预期的方式进行的,效率是可比的。

>4-时间((L=[1,2,3,4,5],所有不同的(L))。>%165个推论,0.000秒0.000 CPU(?%CPU,无限嘴唇)>L=[1,2,3,4,5]。>5?-时间((L=[1,2,3,4,5],是_集(L))。>%11个推论,0.000秒内0.000 CPU(?%CPU,无限嘴唇)>L=[1,2,3,4,5]。那么这意味着你的速度更快?11<165?@viktor:好吧,你的样本输入有点短(两个都是0.000 CPU),但后者似乎更好。>4次((L=[1,2,3,4,5],都不同(L))。>165个推论,0.000秒0.000 CPU(?%CPU,无限嘴唇)>L=[1,2,3,4,5]。>5?-时间((L=[1,2,3,4,5],是_集(L))。>%11个推论,0.000秒内0.000 CPU(?%CPU,无限嘴唇)>L=[1,2,3,4,5]。那么这意味着你的速度更快?11<165?@viktor:好吧,你的示例输入有点短(两个都是0.000 CPU),但后者似乎更好。