二进制搜索的最坏情况是什么?

时间:2018-05-11 11:09:15

标签: search runtime time-complexity binary-search

元素应该在数组中的哪个位置,以便二进制搜索算法的运行时间为O(log n)?

2 个答案:

答案 0 :(得分:1)

第一个或最后一个元素将在二进制搜索中给出最坏情况的复杂性,因为您必须进行最大数量的比较。 例如:

  

1 2 3 4 5 6 7 8 9

在这里搜索1会给你最坏的情况,结果将在第4遍传出。

  

1 2 3 4 5 6 7 8

在这种情况下,搜索8将给出最坏情况,结果是4次传递。

请注意,在第二种情况下,只需3次传递即可完成搜索1(第一个元素)。 (比较1和4,比较1& 2,最后1)

所以,如果没有。元素是偶数,最后一个元素给出了最坏的情况。

这假设所有数组都被索引为0。这是因为将mid作为(start + end)/ 2的浮点数。

答案 1 :(得分:0)

//迭代二进制搜索的Java实现

class BinarySearch
{
    // Returns index of x if it is present in arr[], 
    // else return -1
    int binarySearch(int arr[], int x)
    {
        int l = 0, r = arr.length - 1;
        while (l <= r)
        {
            int m = l + (r-l)/2;

            // Check if x is present at mid
            if (arr[m] == x)
                return m;

            // If x greater, ignore left half
            if (arr[m] < x)
                l = m + 1;

            // If x is smaller, ignore right half
            else
                r = m - 1;
        }

        // if we reach here, then element was 
        // not present
        return -1;
    }

    // Driver method to test above
    public static void main(String args[])
    {
        BinarySearch ob = new BinarySearch();
        int arr[] = {2, 3, 4, 10, 40};
        int n = arr.length;
        int x = 10;
        int result = ob.binarySearch(arr, x);
        if (result == -1)
            System.out.println("Element not present");
        else
            System.out.println("Element found at " + 
                                   "index " + result);
    }
}

时间复杂性: 二进制搜索的时间复杂度可以写为

T(n)= T(n / 2)+ c 可以使用Recurrence T ree方法或Master方法解决上述重现。在Master方法II中,并且复发的解决方案是Theta(Logn)。

辅助空间:在迭代实现的情况下为O(1)。在递归实现的情况下,O(Logn)递归调用堆栈空间。