我遇到了这个文档Binary Search Revisited,其中作者已经证明/解释了二进制搜索也可以用于未排序的数组(列表)。我在第一次阅读时没有弄清楚大部分文件。
你们有没有人探讨过这个问题?
答案 0 :(得分:5)
我刚读过这篇论文。对我来说,作者使用术语二分搜索来解决用于查找连续函数的零的Bisection method。
本文中的例子清楚地受到了诸如将零变成一个问题的启发 interval(在y ax上有平移)或在表格数据中找到函数的最大值/最小值。
论文所考虑的数组不是随机填充的数组,你会发现构造它们的规则(它是与用于转储它们的函数相关的规则)
表示很有可能修改属于共同家庭的不同算法以找到相似性和差异。这是一个扩展经验的好机会。
绝对不是一个新概念或被低估的概念。
答案 1 :(得分:1)
查看带有二进制或二分的未排序列表中的3:
L = 1 5 2 9 38 11 3
1 - 在整个列表L:9中取中点 3< 9删除列表的右侧部分(38 11 3) 在这里你已经可以理解你永远不会找到3
2 - 取剩余列表中的中点1 5 2:5 3> 5所以删除列表的右边部分(5 2) 仍然是1
结果:3不合理
两个评论:
1 - 二进制或二分算法将右和左视为顺序的指示 所以我粗暴地应用了通常的算法,考虑到右边是高而左边是低 如果你是对立面,即右边低而左边高,那么,试图在这个略微相似的列表中找到3会导致“3不完整” L'= L = 1 5 2 9 3 38 11 3< 9 /右侧部分:3 38 11 中点38 3< 38采取正确的部分:11 3没有了
2-如果你接受系统地重新应用列表的删除部分而不是导致搜索n个元素列表中的元素复杂性将是O(n)与运行所有列表的完全相同求最终搜索你的价值。 搜索时间可能会略短。 为什么?让我们考虑你从乞讨一个接一个。以排序列表中的值100000结束。你会在列表的最后找到它! :-)
如果现在这个列表是无序的,你的值100000例如恰好在中间点...宾果游戏!