Faster than binary search for ordered list

后端 未结 11 1738
自闭症患者
自闭症患者 2020-12-12 13:51

is there an algorithm that is faster than binary search, for searching in sorted values of array?

in my case, I have a sorted values (could be any type values) in an

11条回答
  •  粉色の甜心
    2020-12-12 14:07

    What about the following algo? it is called Exponential Search and is one of the variations of binary search. http://en.m.wikipedia.org/wiki/Exponential_search

    Searching for element k in sorted array A of size n. Lookup A[2^i] for i=0, 1, 2,... until you go beyond k's position in A. then do a binary search on the part of the array left (smaller) than i.

    int exponential_search(int A[], int key)
    {
      // lower and upper bound for binary search
      int lower_bound = 0;
      int upper_bound = 1;
    
      // calculate lower and upper bound
      while (A[upper_bound] < key) {
        lower_bound = upper_bound;
       upper_bound = upper_bound * 2;
      }
      return binary_search(A, key, lower_bound, upper_bound);
    }
    

    This algo will run on O(log idx) where idx is the index of k in A. (both stpes are in log idx). In the worst case, the algo is in O(log idx), if k is amongst the largest elements of A or bigger than any element of A. The multiplicative constant is larger than for binary search but the algo would run faster for very large arrays and when looking for data that's towards the beginning of the array.

    I'D like to have some idea of the minimal size n where this algo becomes preferable to binary search, but I don't know.

提交回复
热议问题