Algorithm 未排序数组上的二进制搜索?

Algorithm 未排序数组上的二进制搜索?,algorithm,binary-search,Algorithm,Binary Search,我看到了这篇文档,其中作者证明/解释了二进制搜索也可以用于未排序的数组(列表)。我在一读时没有仔细阅读过很多文件 你们中有人已经探讨过这个问题吗?我刚刚读了这篇文章。对我来说,作者使用术语二进制搜索来解决用于查找连续函数的零的问题 本文中的例子明显地启发了一些问题,比如在一个函数中求零 间隔(y轴上有平移)或在表格数据中查找函数的最大/最小值 数组中的数组不是随机填充的数组,你会找到一个规则来构造它们(这是与转储函数相关联的规则) 他说,这是一个很好的机会,可以对属于同一个家族的不同算法进行修补

我看到了这篇文档,其中作者证明/解释了二进制搜索也可以用于未排序的数组(列表)。我在一读时没有仔细阅读过很多文件


你们中有人已经探讨过这个问题吗?

我刚刚读了这篇文章。对我来说,作者使用术语二进制搜索来解决用于查找连续函数的零的问题

本文中的例子明显地启发了一些问题,比如在一个函数中求零 间隔(y轴上有平移)或在表格数据中查找函数的最大/最小值

数组中的数组不是随机填充的数组,你会找到一个规则来构造它们(这是与转储函数相关联的规则)

他说,这是一个很好的机会,可以对属于同一个家族的不同算法进行修补,以找到相似之处和差异。这是一个拓展你的经验的好机会


绝对不是一个新概念或被低估的概念。

用二进制或二等分在未排序的列表中查找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正好位于中间点。。。宾果

嗯,还没有读过,但目前我不知道这对未排序的数组如何起作用(当然,排序可以用函数完成,但仍然可以排序)。我很确定这是一个骗局。在未排序的列表中查找某些内容始终是一个O(n)问题,至少在当前的宇宙法则范围内是这样。当然,您可以对未排序的数组进行二进制搜索。问题仍然是你是否能找到你要找的东西:-)因为二进制搜索的定义包含输入必须排序的事实,这不是二进制搜索。它可能类似于“二进制搜索”,但它不是二进制搜索。请看,但是还有成千上万个地方可以找到相同的定义。@Philippe如果递归地划分数组的适当部分,当前的宇宙法则允许您在日志(n)中找到它。这很酷,有点像“半快速排序”。不过,在评论中解释有点太长了。参见Cormen(中位数和订单统计)。