当前位置: 首页 > 知识库问答 >
问题:

LinkedList和BinarySearch的大O表示法[重复]

宰父淳
2023-03-14
public int search( List<T> list, T target ) {

        int low = 0;
        int high = list.size() - 1;
        int middle;

        while ( low <= high ) {             // frequency << log( n )
            middle = ( low + high ) / 2;
            int cmp = target.compareTo( list.get( middle ) );   // time << n

            if ( cmp < 0 ) high = middle - 1;
            else if ( cmp > 0 ) low = middle + 1;
            else return middle;

        }   // time << n log( n )

        return -1;

}   // time << n log( n )

我得到O(n log(n))作为答案。这是计算这种类型列表的搜索方法的正确方法吗?

共有1个答案

岳正阳
2023-03-14

从此以后的第三行(),

list.get( middle )

对于linkedList来说是昂贵的,它是O(n/2)平均情况==O(n),但是对于arrayList来说是O(1),所以即使算法缩小到O(log n)中的一个元素,在每个循环中访问数组元素也会导致O(n)得到O(n log n)。

我猜如果将ArrayList传递给函数,它会给你更好的性能。试试看。很好,您使用List泛型接口实现了函数,您应该能够传递ArrayList。

 类似资料:
  • 我在期中考试中遇到了这个问题,我不确定我的答案是O(n^2)。我想要有解释的答案,谢谢。

  • 我想确定两个函数的复杂性。 第一个我只需要知道我的解决方案是否正确,第二个是因为我正在努力寻找解决方案的两个递归调用,如果可能的话,最好进行工作,这样我就可以了解它是如何完成的。 第一: 尝试的解决方案: 第二: 任何帮助将不胜感激。 当做

  • 问题内容: 我有一个通用的实践,可以使用O()表示法确定一小段代码的复杂性。 代码是: 有问题的列表是链接列表。对于我们的实践,我们给了现成的LinkedList类,尽管我们必须编写自己的和方法。 使我困惑的是在最终计算中该算什么。问题问: 如果列表中有100个元素,它将进行多少次查找?基于此,使用O()表示法计算程序的复杂度。 如果我只是在计算方法,它将平均进行n / 2次查找,从而导致O(n)

  • 我很难确定简单递归方法的大O。我不知道当一个方法被多次调用时会发生什么。我想更具体地谈谈我的困惑领域,但目前我正试图回答一些硬件问题,为了不想作弊,我要求任何回复本文的人提出一个简单的递归方法,并对所述方法的大O进行简单解释。(最好是Java语言……我正在学习的一种语言。) 谢谢你。

  • 可能重复: 何时使用LinkedList 我应该什么时候使用arrayList,什么时候使用LinkedList? 什么时候应该使用,和?