在Prolog中,使用回溯来解决问题。它是一种声明性范式,而不是命令式范式(如C,PHP或Python)。在复杂性方面,这种语言是否值得思考?
你认为问题的自然方式似乎是某人在this question中指出的O(N ^ 2)。
答案 0 :(得分:4)
您可以像任何其他语言一样分析Prolog程序的复杂性。您链接的特定问题可能是O(n ^ 2)。但并非所有Prolog程序都具有这种复杂性。例如,您可以在Prolog中轻松编写SAT求解器,并且该问题是NP-Complete。
答案 1 :(得分:4)
完全取决于问题。
e.g。总结一个数字列表是O(N),据我所知。
sum([],0).
sum(List,Total) :-
sum(List,0,Total).
sum([],Total,Total).
sum([Head|Rest],Accumulator,Total) :-
SoFar is Head + Accumulator,
sum(Rest,SoFar,Total).
唯一的操作是添加(“是”)和递归调用,每个都应该值1。它们都将在列表中的每个项目中执行〜一次,因此总动作应为~2N,即O(N)。
答案 2 :(得分:1)
分析任何语言中的复杂性非常重要,无论是prolog还是任何命令式语言。但是我可以给你一些加速你的prolog程序的技巧