【发布时间】:2014-06-01 21:56:29
【问题描述】:
我试图在 prolog 中编写一些排序算法并发现它们的复杂性,当我开始考虑它们是否会因为它们是用逻辑语言编写的而具有不同的复杂性时。
以快速排序为例。它的平均复杂度为 nlogn,其代码(不完整)如下所示:
quicksort([Head|Tail], SortedList) :-
split(Head, Tail, Left, Right),
quicksort(Left, SortedLeft),
quicksort(Right, SortedRight),
append(SortedLeft, [Head|SortedRight], SortedList).
split 有 n。快速排序登录。这给出了(平均)nlogn。但是追加呢?它还具有线性复杂性。那么整体是 (n^2)logn 吗?
在 prolog 中我们只能以线性方式访问列表的元素这一事实是否会损害我们程序的复杂性。从这个意义上说,使用另一种语言(例如 C)不是更好吗?
【问题讨论】:
-
您可以查看
append/3作为split/4成本的一部分。但是尽管如此,append/3可以通过使用语法完全避免,请参阅en.wikipedia.org/wiki/Prolog#Quicksort
标签: sorting prolog complexity-theory