Intersection complexity

前端 未结 3 1225
小蘑菇
小蘑菇 2020-12-09 10:33

In Python you can get the intersection of two sets doing:

>>> s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> s2 = {0, 3, 5, 6, 10}
>>> s1 &a         


        
3条回答
  •  囚心锁ツ
    2020-12-09 10:52

    Set intersection of two sets of sizes m,n can be achieved with O(max{m,n} * log(min{m,n})) in the following way: Assume m << n

    1. Represent the two sets as list/array(something sortable)
    2. Sort the **smaller** list/array (cost: m*logm)
    3. Do until all elements in the bigger list has been checked:
        3.1 Sort the next **m** items on the bigger list(cost: m*logm)
        3.2 With a single pass compare the smaller list and the m items you just sorted and take the ones that appear in both of them(cost: m)
    4. Return the new set
    

    The loop in step 3 will run for n/m iterations and each iteration will take O(m*logm), so you will have time complexity of O(nlogm) for m << n.

    I think that's the best lower bound that exists

提交回复
热议问题