改进线性搜索技术?

时间:2018-11-20 22:39:42

标签: java

恐怕我们手边有些虐待狂的老师,因为老实说我不理解这个问题,也从未在教科书中找到答案,也没有在互联网上搜索。

“ 2。如果列表已经排序,那么如何利用这些信息来改进线性搜索技术?在线性搜索算法中显示您的改进。”

据我所知,线性搜索只有一项工作,它正在按顺序检查每个元素。如何改进?我所知道的是线性搜索Big-O表示法是O(n),并且O(n)是最差情况的性能,因为该元素位于列表或数组的最后。我打算通过切换到二进制搜索来回答这个问题,但后来我发现二进制搜索将花费更长的时间,因为它需要n / 2次来定位,n / 4,n / 8并进行线性搜索。尽可能多的时间。

让我知道,如果我以错误的方式得到这个问题,或者我对此有所遗漏。感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

  

我发现二进制搜索将花费更长的时间,因为它需要n / 2次来定位,n / 4,n / 8并进行搜索,而线性搜索将花费相同的时间。

这取决于List::get(int)O(1)操作还是O(N)操作。这取决于列表类。

  • 对于LinkedList,它是O(N)。从列表的开头开始,调用get(i)必须链接i次。

  • 对于ArrayList,它是O(1)。调用get(i)只是列表元素数组上的array[i]操作。

getO(1)的假设下重做二进制搜索的计算,并且(如果您的分析是正确的,并且您对二进制搜索的理解是正确的),您应该得到O(logN)使用二进制搜索按值查找。

(但是,是的,相对于线性搜索,链表上的二进制搜索不是一种优化。鉴于线性搜索为O(N^2),它会是O(N)-一种反优化)。


  

恐怕我们手上有些虐待狂的教员。

可能。另一种解释是,讲师试图鼓励您自己动手做事,从而提高分析思维能力。这包括找出错误,包括可能做出的错误假设。有时,学习基本错误的最佳方法是“艰难的方法”。