哪个对未排序的数据执行更好的二进制搜索或顺序搜索
which one performs better binary search or sequential search on unsorted data
如果给定一个未排序的数组,在以下两种情况中,时间复杂度会更低或性能会更好
- 二分搜索 - 首先对数组进行排序,然后使用二分搜索算法
- 顺序搜索 - 在未排序的数组上
所以如果给定一个未排序的数组来搜索一个元素,我们应该先对其进行排序然后应用二分查找还是直接对未排序的数组应用顺序搜索算法。
两者都有,因为都有用武之地。
如果您只搜索一次,顺序搜索是最快的。但是如果你做很多查询,那么二分查找会更快。鉴于排序是 O(n log(n))
,如果您必须进行 O(log(n))
次搜索,二分查找将变成相同数量的操作。
但是,操作并非生而平等。特别是二分搜索需要 yes/no 个难以进行分支预测的问题。因此,如果您要搜索少于 100 个整数的列表,则二分搜索可能比顺序搜索慢,因为二分搜索有多个流水线停顿(每个错误预测的二元选择),而顺序搜索只有一个(当你找到了你要找的元素)。
因此,如果您要进行多次查找,并且您有大量数据或复杂数据(例如字符串),则二分查找更好。
如果给定一个未排序的数组,在以下两种情况中,时间复杂度会更低或性能会更好
- 二分搜索 - 首先对数组进行排序,然后使用二分搜索算法
- 顺序搜索 - 在未排序的数组上
所以如果给定一个未排序的数组来搜索一个元素,我们应该先对其进行排序然后应用二分查找还是直接对未排序的数组应用顺序搜索算法。
两者都有,因为都有用武之地。
如果您只搜索一次,顺序搜索是最快的。但是如果你做很多查询,那么二分查找会更快。鉴于排序是 O(n log(n))
,如果您必须进行 O(log(n))
次搜索,二分查找将变成相同数量的操作。
但是,操作并非生而平等。特别是二分搜索需要 yes/no 个难以进行分支预测的问题。因此,如果您要搜索少于 100 个整数的列表,则二分搜索可能比顺序搜索慢,因为二分搜索有多个流水线停顿(每个错误预测的二元选择),而顺序搜索只有一个(当你找到了你要找的元素)。
因此,如果您要进行多次查找,并且您有大量数据或复杂数据(例如字符串),则二分查找更好。