根据算法书籍,二进制搜索的性能为O(log n),而简单搜索的性能为O(n)。
但是为什么我们还不考虑排序所花费的时间,这是二进制搜索的先决条件?
答案 0 :(得分:2)
简而言之:因为通常该列表的构建仅执行一次,而搜索(和更新)则进行多次。
构造排序列表确实需要 O(n log n)。使用二进制搜索的目的是,对集合进行排序后,我们可以对该列表执行多个查询,每个查询都带有 O(log n)。
此外,例如,如果您使用二叉搜索树,则可以执行插入操作,也可以删除 O(log n)中的元素,因此更新也会很便宜(前提是您为此使用了有效的数据结构)。
例如,在数据库中,一个人经常使用索引来执行快速查找。通常,读取次数比更新次数大。更新单个元素需要 O(log n),因此在现有数据上创建索引确实很昂贵,但是与搜索和更新B-tree datastructure [wiki]相比,这不是很常见。
答案 1 :(得分:1)
假定已存储数据已排序。由于无需在每次执行搜索时都对数据进行重新排序,因此Big O中无需考虑数据。