比较两个python列表的复杂程度是多少?

时间:2012-07-03 15:13:15

标签: python python-2.7

假设列表仅包含可清除对象。

顺便说一句,我不确定这个问题是否有意义,因为在复杂性和学术性方面,我是一个完整的菜鸟。

2 个答案:

答案 0 :(得分:13)

比较两个列表的复杂性是O(n),如果两个列表的长度都是n,如果列表的长度不同,则为O(1)。

答案 1 :(得分:4)

这在很大程度上取决于“比较”这个词的含义。

如果你比较相等,@ Sven-Marnach的答案适用:相同长度的O(n),不同长度的O(1)。

如果您将多个列表相互比较,使用散列函数可以帮助您:对于不同的列表(具有不同的散列),它是O(1),对于具有相同散列的列表,可能仍然是O(n)哈希值可能会发生冲突,您必须进行真正的比较。这可以通过使用多个哈希函数来缓解,因此冲突的可能性会大大降低。

请注意,仍需要O(n)来计算长度为n的列表的哈希值,因此这里没有免费午餐。

如果你想比较两个列表的相似性,你可能需要Levenshtein distance,它在简单的情况下是时间二次的,但可以通过延迟评估使其成为线性的,可能需要很大的内存费用。

如果您想计算完成的更改列表,以便从另一个列表中创建一个列表(diff),那么它在维基百科中提到的最佳实现中是二次的。