【发布时间】:2016-04-14 01:35:07
【问题描述】:
下周我有一个期中考试,其中一些与代码分析/求和简化有关。我很迷茫,正在努力理解我的教授在练习工作表上给我们的这个问题。
下面是伪代码:
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) 吗?
另外,我如何将其表达为每个问题的总和?这不是家庭作业,但我正在尽力理解这个主题。
【问题讨论】:
-
在 ArrayList 场景中是 nlog(n)。在 LinkedList 场景中,它的 n^2.log(n)
-
@ImeshaSudasingha 这是因为列表的运行时间是 O(n),而链表的运行时间是 O(n^2)?这很有意义。
-
@ImeshaSudasingha 为什么会是 nlogn?如果
ints是一个 ArrayList,那么它就是 O(n)。如果它是一个 LinkedList,它将是 O(n^2),因为您必须为每个元素再次遍历列表。不应该有任何日志,因为长度只减半一次 - 不是每次迭代。 -
对不起,应该是O(n)和O(n^2)。
-
@LukeLaFountaine 我很困惑,既然它在循环中,为什么每次迭代都不会减半?
标签: java arraylist time linked-list time-complexity