在 Prolog 中,使用回溯来解决问题。它是一种声明性范例,而不是命令性范例(如 C、PHP 或 Python)。在这种语言中,是否值得考虑复杂性?
正如有人在这个问题中指出的那样,您认为问题的自然方式似乎是 O(N^2) 。
在 Prolog 中,使用回溯来解决问题。它是一种声明性范例,而不是命令性范例(如 C、PHP 或 Python)。在这种语言中,是否值得考虑复杂性?
正如有人在这个问题中指出的那样,您认为问题的自然方式似乎是 O(N^2) 。
就像任何其他语言一样,您绝对可以分析 Prolog 程序的复杂性。您链接的那个特定问题可能是 O(n^2)。但并不是所有的 Prolog 程序都会有这种复杂性。例如,您可以在 Prolog 中轻松编写 SAT 求解器,而该问题是 NP-Complete。
这完全取决于问题。
例如,据我所知,对数字列表求和是 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).
唯一的动作是加法(“is”)和递归调用,它们的值都应该是 1。它们都将被执行〜列表中的每个项目一次,因此总操作应该是〜2N,即O(N)。
分析任何语言的复杂性很重要,无论是序言还是任何命令式语言。但是我可以给你一些提示来加快你的序言程序