在Prolog中,使用回溯來解決問題。這是一個聲明式的範例,而不是一個命令式的範例(就像在C,PHP或Python中一樣)。在這種語言中,是否值得從複雜性角度來思考?Prolog程序的複雜性?
您認爲問題的自然方式似乎是O(N^2),正如有人指出this question。
在Prolog中,使用回溯來解決問題。這是一個聲明式的範例,而不是一個命令式的範例(就像在C,PHP或Python中一樣)。在這種語言中,是否值得從複雜性角度來思考?Prolog程序的複雜性?
您認爲問題的自然方式似乎是O(N^2),正如有人指出this question。
它對於分析任何語言的複雜性非常重要,無論是序言還是任何命令式語言。不過,我可以給你一些提示,以加快你的prolog程序
您可以像任何其他語言一樣分析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).
的唯一動作是在加入(「是」),並遞歸調用,它都應該是值得1每個。它們都會在列表中每個項目執行一次,因此總操作應該是〜2N,即O(N)。
使_ 0爲0,這是正確的。 – starblue 2009-11-22 06:39:24
感謝starblue,現在修復 – pfctdayelise 2009-11-22 22:54:01
當然,我認爲是。有列表,你遍歷它們。遞歸地完成這個事實並不意味着我們不能說存在O(n)的複雜性。 – AndyG 2009-11-22 00:24:12