作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
根据算法书籍,二分搜索的性能为 O(log n),而简单搜索为 O(n)。
但为什么我们不考虑排序所花费的时间,这是二分查找的先决条件?
最佳答案
简而言之:因为通常构建该列表只进行一次,而搜索(和更新)则进行多次。
构造一个排序列表确实需要 O(n log n)。使用二分查找的要点在于,一旦集合被排序,我们就可以对该列表执行多个查询,每个查询的复杂度为O(log n)。
此外,如果您使用二叉搜索树,您也可以在 O(log n) 中执行插入和删除元素,因此更新集合也可以很便宜(假设您为此使用了有效的数据结构)。
例如,在数据库中,人们经常使用索引来执行快速查找。通常读取的数量比更新的数量大。更新单个元素需要 O(log n),因此在现有数据上创建索引确实很昂贵,但与搜索和更新 B-tree datastructure [wiki] 相比这并不常见。 .
关于algorithm - 二分搜索与简单搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56618108/
我正在尝试编写一个程序,在名为 items 的数组中进行顺序搜索和二分搜索,该数组具有 10000 个已排序的随机 int 值。第二个名为 targets 的数组加载了 1000 个 int 值(50
当我尝试使用图表并为其编写一些代码但没有成功时,我遇到了一个问题:/!! 我想创建一些东西来获取图形数据并检查它是否:1- 连接2-二分法3-有循环4-是一棵树 所以我想知道,例如,是否可以将其写入以
我是一名优秀的程序员,十分优秀!