Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 改进线性搜索技术?_Java - Fatal编程技术网

Java 改进线性搜索技术?

Java 改进线性搜索技术?,java,Java,恐怕我们手上有一点虐待狂教练,因为我真的不明白这个问题,也从来没有在课本上找到答案,也没有在网上搜索过 “2.如果列表已按顺序排序,您如何利用这些信息改进线性搜索技术?展示您对线性搜索算法的改进。” 据我所知,线性搜索只有一个任务,即按顺序检查每个元素。如何改进?我知道的是线性搜索Big-O表示法是O(n),并且O(n)是最差的情况性能,因为元素被放置在列表或数组的最后一位。我本来想通过切换到二进制搜索来回答这个问题,但后来我发现二进制搜索需要更长的时间,因为它需要n/2倍的时间来定位,n/4,

恐怕我们手上有一点虐待狂教练,因为我真的不明白这个问题,也从来没有在课本上找到答案,也没有在网上搜索过

“2.如果列表已按顺序排序,您如何利用这些信息改进线性搜索技术?展示您对线性搜索算法的改进。”

据我所知,线性搜索只有一个任务,即按顺序检查每个元素。如何改进?我知道的是线性搜索Big-O表示法是O(n),并且O(n)是最差的情况性能,因为元素被放置在列表或数组的最后一位。我本来想通过切换到二进制搜索来回答这个问题,但后来我发现二进制搜索需要更长的时间,因为它需要n/2倍的时间来定位,n/4,n/8,然后继续,线性搜索也需要同样多的时间

如果我答错了这个问题,或者我遗漏了一些东西,请告诉我。谢谢你的帮助

我发现二进制搜索会花费更长的时间,因为它需要n/2倍的时间来定位,n/4,n/8,然后继续,线性搜索也会花费同样多的时间

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

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

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

假设
get
O(1)
,并且(如果您的分析正确,并且您对二进制搜索的理解正确),您应该得到
O(logN)
,以便使用二进制搜索按值查找

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


恐怕我们手上有点虐待狂教练


可能吧。另一种解释是,讲师试图通过让你自己解决问题来鼓励你提高分析思维能力。这包括找出你的错误,包括可能错误的假设。有时,从根本错误中吸取教训的最佳方法是“艰难的方法”。

如果是链表,则可以选择不同的起点,然后定位中间元素确实需要O(n/2)。对于
ArrayList
来说,我只是做了O(1),正如我前面所说,对于排序列表,二进制搜索速度会越慢越好。您必须指定正在搜索的数据结构和所有其他因素,否则尝试优化是没有意义的。数学问题:列表是数字的,它是否受整数范围的限制?也就是说,如果已知您要排序的值仅为数字(例如,没有字典字符串或小数),则可以采用一种聪明的数学方法来优化该方法。