What is the run time of the set difference function in Python?

故事扮演 提交于 2019-12-11 02:28:33

问题


The question explains it, but what is the time complexity of the set difference operation in Python?

EX:

A = set([...])
B = set([...])

print(A.difference(B)) # What is the time complexity of the difference function? 

My intuition tells me O(n) because we can iterate through set A and for each element, see if it's contained in set B in constant time (with a hash function).

Am I right?

(Here is the answer that I came across: https://wiki.python.org/moin/TimeComplexity)


回答1:


looks that you're right, difference is performed with O(n) complexity in the best cases

But keep in mind that in worst cases (maximizing collisions with hashes) it can raise to O(n**2) (since lookup worst case is O(n): How is set() implemented?, but it seems that you can generally rely on O(1))

As an aside, speed depends on the type of object in the set. Integers hash well (roughly as themselves, with probably some modulo), whereas strings need more CPU.




回答2:


https://wiki.python.org/moin/TimeComplexity suggests that its O(cardinality of set A) in the example you described.

My understanding that its O(len(A)) and not O(len(B)) because, you only need to check if each element in setA is present in setB. Each lookup in setB is O(1), hence you will be doing len(A) * O(1) lookups on setB. Since O(1) is constant, then its O(len(A))

Eg:

A = {1,2,3,4,5}
B = {3,5,7,8,9,10,11,12,13}
A-B = {1,2,4}

When A-B is called, iterate through every element in A (only 5 elements), and check for membership in B. If not found in B, then it will be present in the result.

Note: Of course all this is amortised complexity. In practice, each lookup in setB could be more than O(1).



来源:https://stackoverflow.com/questions/48044353/what-is-the-run-time-of-the-set-difference-function-in-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!