如果尝试对未排序的数据集进行二进制搜索会发生什么?
答案 0 :(得分:5)
结果不可预测。如果数据集具有目标,则可能找到也可能找不到。
编辑只是为了踢,我做了一个小实验。首先,我选择了一个数组大小并生成了一个int数组{0,1,...,size-1}。然后我改组了数组,对每个值0,1,......,size-1进行了二元搜索,并计算了其中有多少被发现。对于每个大小,我重复了shuffle / search-for-values值步骤100,000次,并记录了成功搜索的百分比。 (对于已排序的数组,这将是100%。)结果是(四舍五入到最接近的百分比):
Size % Hit
10 34%
20 22%
30 16%
40 13%
50 11%
60 10%
70 9%
80 8%
90 7%
100 6%
因此数组越大,不排序的效果越差。即使对于相对较小的阵列,结果也非常激烈。
答案 1 :(得分:0)
你几乎肯定找不到你一直在寻找的元素。如果数组主要排序,那么你可能会很幸运。
该算法可以通过某种方式实现检测,但除非它对数组进行全面扫描,否则无法保证二进制搜索将检测到此错误情况
答案 2 :(得分:0)
二进制搜索用于排序数组,如果在非排序数组上完成,那么<strong>结果肯定会不可预测且不可靠强>
答案 3 :(得分:0)
二进制搜索依赖于正在排序的数据。它选择一个数组中的元素并确定 1.如果这是它正在搜索的元素 2.如果它不是它正在寻找的元素,它可能在哪里找到元素。
第二点依赖于对数据进行排序以做出决定。想象一下未分类的数据。只需将搜索关键字与我们选择的元素进行比较,我们就无法确定元素的位置。
因此,二进制搜索在未排序的数据中无法一致地工作。