O(N) 查找,但在排序列表上使用 upper_bound 时进行 O(log(N)) 比较
O(N) lookups but O(log(N)) comparisons when using upper_bound on a sorted list
list<Person> lp;
...
lp.sort(PersonNameLess());
Person newPerson;
...
lp.insert(upper_bound(lp.begin(), lp.end(),
newPerson, PersonNameLess()), newPerson);
在有效的 c++ 第 3 版第 198 页第 45 项中,它说:
查找需要线性时间,但它只执行对数 比较次数
问题:为什么它只执行对数比较?
为什么它只执行
对数比较?
因为列表已排序,upper_bound执行二叉搜索。
相关文章:
- 如何用数字处理log(0)
- 安装opencv失败-粘贴CMakeError.log的内容
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- boost日志文件无法创建sample.log文件
- Boost::log只在debian中崩溃
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 空集"Out of bound iterator"
- 设置自定义收集器时不会提升::log尊重关键字::max_size吗?
- 我仍然收到此错误未定义的引用:boost::log::v2_mt_posix::trivial::logger::get
- 增强.log含义和功能
- log in cpp 14 and 17
- constexpr exp, log, pow
- Boost Log的琐碎记录器"lazy evaluation"是如何工作的?
- boost::log 设置"Channel"通道记录器中的属性
- V8 控制台.log不打印
- Boost Log:变量不是"boost::log::v2s_mt_posix::trivial"的
- Math.log是以一种避免log(1 x)的精度的方式实现的
- 如何打印通话函数的行号和文件名而不是log.cpp
- boost.log-如何用附加和旋转配置text_file_backend
- Boost::log misbehaves (ubuntu 16.04, boost 1.58)