Linked List和ArrayList之间的运行时间?代码分析

时间:2016-04-14 01:35:08

标签: java arraylist time linked-list time-complexity

下周我有一个中期,其中一些与代码分析/总和简化有关。我很迷茫,正在努力理解我的教授在练习工作单上给我们的这个问题。

这是伪代码:

 List <Integer> method( List <Integer> ints) { 
     for ( int i = 0; i < ints.size() / 2; i ++) { 
         swap(i, n − i − 1);
  }

问题是:假设List是一个ArrayList,将此方法的最坏情况运行时间表示为一个总和? 其中我得到了O(log n),因为列表的大小每次被分成两半。

但接下来的问题是:假设List是LinkedList,将此方法的最坏情况运行时间表示为总和? 现在我很困惑,我知道ArrayLists和LinkedLists有不同的时间复杂性,但答案是不是相同的O(log n)?

另外,我如何将此表达为每个问题的总和?这不是作业,但我正在尽力理解这个主题。

1 个答案:

答案 0 :(得分:1)

如果ints是一个ArrayList,它可以在恒定时间内访问任何元素。因此,它将通过元素的前半部分并使用下半部分中的相应元素进行交换。这仍然被认为是O(n),因为迭代的总数将是1/2 * (n),并且您删除了大O表示法的常量。

如果ints是LinkedList,则您没有时间访问任何元素 - 您必须遍历整个列表才能访问每个元素。因此,对于列表前半部分中的每个元素,您将再次迭代以查找后半部分中的相应元素。这导致O(n^2)的最坏情况运行时。