二元搜索分析

时间:2014-09-23 04:27:36

标签: c++ algorithm binary-search

我正在以下位置阅读数据结构和算法。

http://www.brpreiss.com/books/opus4/html/page191.html

对于二进制搜索代码,如下所示

unsigned int SortedListAsArray::FindOffset (
    Object const& object) const
{
    int left = 0;
    int right = count - 1;

    while (left <= right)
    {
    int const middle = (left + right) / 2;

    if (object > *array [middle])
        left = middle + 1;
    else if (object < *array [middle])
        right = middle - 1;
    else
        return middle;
    }
    return count;
}

在分析作者中提到如下

  

在最坏的情况下,所寻求的项目不在排序列表中。具体地,最坏的情况发生在所寻找的项目小于列表中的任何项目时,因为这种情况需要在二进制搜索循环的每次迭代中进行两次比较。在最坏的情况下,需要(ceiling(log n) + 2 )次迭代。因此,FindOffset函数的运行时间为2(ceiling(log n) + 2) * T(op < ) + O(log n),其中T(op <)表示与Object实例进行比较所需的运行时间。

我对上述分析的疑问是

  1. 作者如何在声明+ 2中提出(ceiling(log n) + 2 )

  2. 其他问题作者为何在O(log n)语句中添加2(ceiling(log n) + 2) * T(op < ) + O(log n)

  3. 谢谢!

0 个答案:

没有答案