二叉搜索如何比线性搜索更快?
How is binary search faster than linear search?
我们需要一个排序数组来执行二叉搜索。在这种情况下,时间复杂度已经大于线性搜索,那么在这种情况下线性搜索不是更好的选择吗?
线性搜索在O(N)
时间内运行,因为它从头到尾扫描数组。
另一方面,二叉搜索首先按O(NlogN)
时间内对数组进行排序(如果尚未排序(,然后在O(logN)
时间内执行查找。
对于少量查找,使用线性搜索比使用二叉搜索更快。然而,每当查找次数大于logN
时,二叉搜索理论上在性能上占上风。
因此,您的问题的答案是:线性搜索和二叉搜索以不同的方式执行查找。线性搜索扫描整个数组,而二叉搜索首先对数组进行排序。这两种搜索技术具有不同的时间复杂性,但这并不意味着一种总是比另一种更好。
具体来说,当列表的大小较小和/或您只需要执行少量查找时,线性搜索效果很好。二叉搜索在所有其他情况下应该表现得更好。
如果您的容器已经排序或想要搜索许多值,那就更好了。
首先,对于二叉搜索,前提是数组被排序,这意味着你不需要重新排序它。其次,如果你在谈论整数数组,你可以使用RadixSort O(d*n(或CountingSort O(n+l(,它们在复杂度方面类似于线性搜索。
当给定数组已经排序时,二叉搜索比线性搜索更快。
对于排序数组,二叉搜索提供平均 O(log n(,而线性提供 O(n(。
对于任何未排序的给定数组,线性搜索成为最佳选择,因为 O(n( 比对数组进行排序(例如使用快速排序,例如 O(n log n((然后应用二叉搜索更好,因此给定 O(n log n + log n( 复杂性。
相关文章:
- 向量上的线性搜索
- 二叉搜索如何比线性搜索更快?
- C++(线性搜索和排序)
- C++线性搜索算法,确定数组中元素的数量
- 如何在 c++ 中线性搜索两个数组?
- 变量未在此范围内声明 数组线性搜索
- 如何在 c++ 中对两个向量进行线性搜索?
- 线性搜索 MPI(在其他进程中停止)
- SIMD 线性搜索比展开循环慢
- 是否可以显示需要线性搜索的时间才能找到您在程序中找到的密钥
- 如何在C 中解决线性搜索问题
- 这是哨兵线性搜索的错误方法吗?
- 数组中的线性搜索返回意外结果
- 在不进行线性搜索的情况下,在非常大的数组中找到比给定数字更小的数字
- C++线性搜索算法
- 线性搜索算法
- 关于修复对向量的线性搜索函数的调用的建议
- 链表中的线性搜索[语言:C++编译器:Dev Cpp 4.9.9.2]
- C++ 数组上的线性搜索算法
- 如何创建一个线性搜索算法比我的教科书提供的更容易