【发布时间】:2014-11-25 10:48:52
【问题描述】:
我需要一个 O(n log n) 算法来从列表中删除重复的元素。例如,我知道我可以使用一个集合,但我需要一个具有这种特定复杂性的算法,但我不知道如何对其进行编码。由于我现在有了这段代码,但我不知道它的复杂性是什么,尽管我相信它不是 n log n。
def removing(a):
for e in a:
if e in a[a.index(e)+1:]:
a.remove(e)
return a
练习说它需要一个 O(n*log(n)) 算法,并没有说明之前对列表进行排序。
【问题讨论】:
-
在下面的其中一个 cmets 中,您提到“是的,我知道我可以使用 list(set(a)),但是练习说的是它需要一个 n*log n 算法,并且没有说之前对列表进行排序”。在这里不鼓励期待家庭作业问题的答案。但是提示 - log N 需要分而治之的方法。使用快速排序中的分区。
-
如果你不知道它有多复杂,我建议你尝试一下。给它一个包含 10 个成员、100 个成员、1000 个成员、10000 个成员的“a”列表。绘制计算它所需的时间 (docs.python.org/2/library/timeit.html) 与元素数量的关系图,看看它是否具有正确的形状 (stackoverflow.com/questions/7830727/n-log-n-is-on)
-
这是一个很长的练习列表中的一个小问题。我被卡住了,可能是因为我不太了解复杂性是如何工作的。谢谢你的回答