理解算法二叉搜索背后的工作原理C++问题

Problems understanding the workings behind C++ Algorithm Binary Search

本文关键字:工作 C++ 问题 搜索 算法 背后      更新时间:2023-10-16

我正在浏览算法列表,并决定看看find方法

查找方法

template<class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val)
{
while (first!=last) {
if (*first==val) return first;
++first;
}
return last;
}

Find的运行时间似乎为 Big O (n),因为它遍历容器中的每个元素以查找值。

我的想法立即想到了二进制搜索,我去看了一下。

二叉搜索

template <class ForwardIterator, class T>
bool binary_search (ForwardIterator first, ForwardIterator last, const T& val)
{
first = std::lower_bound(first,last,val);
return (first!=last && !(val<*first));
}

知道它利用了另一个函数:下界,我继续研究下界,它返回一个迭代器,指向范围[first,last]中的第一个元素,该元素的比较不小于val。

这是我的分析

假设数组数据结构

[ 1,4,7,10,12]

如果我们使用二叉搜索来搜索 6,first等于一个指向 7 的迭代器

*first的值为 1,val的值为 6!(val<*first)是真的

由于first!=last== true &&!(val<*first)== true ,即使数组中不存在 6,二叉搜索函数也会返回 true

我知道我的推理有缺陷,有人可以向我解释在哪里吗 我做错了吗???

*first的值

为 1

有你的问题。first是值为 7 的元素的迭代器,因此*first为 7。这使!(val<*first)变得!(6<7)false