Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the complexity of bisect algorithm?

I wrote code to understand which of them is faster when it comes to search an element in a list. It turns out to be bisect. What I do not understand is what is complexity of bisect algorithm and does it use Van Emde Boas tree?

#python inbuilt list search using 'in' took 0.0702499200317 secs

def mul3():
    a = [1, 2, 4, 5, 6, 7, 8, 10, 12, 42, 55, 65, 69, 95, 96, 101, 156, 199]
    for x in a:
        if x in a:
            print x, "True"
        else:
            print x, "False"

#using bisect took 0.0649611193601

def mul4():
    a = [1, 2, 4, 5, 6, 7, 8, 10, 12, 42, 55, 65, 69, 95, 96, 101, 156, 199]
    import bisect
    for x in a:
        locate = bisect.bisect_left(a, x)
        if locate == len(a) or a[locate] != x:
            print False
        print True

 #using binary search took 0.0651483638284


a = [1, 2, 4, 5, 6, 7, 8, 10, 12, 42, 55, 65, 69, 95, 96, 101, 156, 199]


for x in a:
    lo = 0
    hi = 18
    while lo < hi:
        mid = (lo+hi)//2
        midval = a[mid]
        if midval < x:
            lo = mid+1
        elif midval > x:
            hi = mid
        else:
            print True
            lo = hi

Reference: http://docs.python.org/library/bisect.html

like image 349
codersofthedark Avatar asked Aug 18 '12 21:08

codersofthedark


People also ask

What is the time complexity of bisection method?

The time complexity of this approach is O ( N ) O(N) O(N), and larger arrays take more time to complete the operation.

What is the time complexity of bisect Python?

It is important to mention that the time complexity of bisect_left and bisect_right is O(log(n)) since their implementation uses Binary Search Algorithm. The time complexity of the insort_right and insort_left functions depends on the complexity of the insert method of the list class which is O(n).

What is bisect bisect?

: to divide into two usually equal parts. intransitive verb. : cross, intersect. Other Words from bisect Synonyms Example Sentences Learn More About bisect.

What is bisect used for?

The purpose of Bisect algorithm is to find a position in list where an element needs to be inserted to keep the list sorted. Python in its definition provides the bisect algorithms using the module “bisect” which allows to keep the list in sorted order after the insertion of each element.


2 Answers

It uses binary search, which makes it O(log n).

like image 79
Ignacio Vazquez-Abrams Avatar answered Oct 15 '22 04:10

Ignacio Vazquez-Abrams


There is binary search, right. O(Ln(n)) is the answer.

But, your list is not sufficient to test all the cases. All algorithms may took different execution times, but you have to test these with all the cases. If you test with enough many lists, you will get the right results.

I hope you're convinced.

like image 31
totten Avatar answered Oct 15 '22 02:10

totten