Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 二进制搜索与简单搜索_Algorithm_Sorting_Search_Binary Search - Fatal编程技术网

Algorithm 二进制搜索与简单搜索

Algorithm 二进制搜索与简单搜索,algorithm,sorting,search,binary-search,Algorithm,Sorting,Search,Binary Search,根据算法书籍,二进制搜索的性能是O(logn),而简单搜索的性能是O(n) 但是,我们为什么不考虑排序所花费的时间,这是二进制搜索的先决条件?假定数据将存储在已排序的数据中。由于数据不需要在每次执行搜索时重新排序,因此在大O中不考虑数据。简言之:因为构建该列表通常只进行一次,而搜索(和更新)则进行多次 构造排序列表确实需要O(n logn)。使用二进制搜索的意义在于,一旦对集合进行了排序,我们就可以对该列表执行多个查询,每个查询都带有O(logn) 此外,如果使用二元搜索树,还可以执行O(log

根据算法书籍,二进制搜索的性能是O(logn),而简单搜索的性能是O(n)


但是,我们为什么不考虑排序所花费的时间,这是二进制搜索的先决条件?

假定数据将存储在已排序的数据中。由于数据不需要在每次执行搜索时重新排序,因此在大O中不考虑数据。

简言之:因为构建该列表通常只进行一次,而搜索(和更新)则进行多次

构造排序列表确实需要O(n logn)。使用二进制搜索的意义在于,一旦对集合进行了排序,我们就可以对该列表执行多个查询,每个查询都带有O(logn)

此外,如果使用二元搜索树,还可以执行O(logn)中元素的插入和删除,因此更新集合也可以很便宜(假设使用有效的数据结构)


例如,在数据库中,经常使用索引执行快速查找。通常,读取的数量比更新的数量大。更新单个元素需要O(logn),因此在现有数据上创建索引确实很昂贵,但与搜索和更新单个元素相比,这并不常见。

二进制搜索将此作为先决条件。其思想是对列表/数组进行一次排序,然后可以执行多个搜索查询。