【发布时间】:2017-01-15 12:05:22
【问题描述】:
当我试图找到一个算法的复杂性时,我很困惑,其中包含一个 for 循环和 2 个嵌套的 while 循环,涉及两个链接列表。考虑以下代码:
public int func(ClassName b){
// int[] myArray = new Node[n];
Node curA;
Node curB;
int sum = 0;
for(int i =0; i<n ; i++){
curA = this.myArray[i];
while(curA != null){
curB = b.myArray[i]
while(curB != null){
if(curA.data.equals(curB.data) sum++;
curB = curB.next;
}
curA = curA.next;
}
}
return sum;
}
想象一下,有两个对象 this 和 b 属于同一类(比如 ClassName),其中包含字段 myArray。假设我们从这个对象调用函数 func 并传递 b 对象。 this.myArray[i] 列表中的每个节点都将与 b.myArray[i] 列表中的每个节点进行比较。我们不知道 myArray 的每个元素中的列表有多长。有时 b.myArray[i] 可能等于 null 甚至 this.myArray[i] 等于 null 这将减少我认为的迭代和运行时间。我认为这种复杂性将是 O(n^3)。但这是正确的吗?我确信 for 循环的复杂度为 O(n),但我不确定 while 循环发生了什么。 任何帮助将不胜感激!
【问题讨论】:
-
a和b是什么?你永远不会使用第一个myArray,并且“一些工作”会影响复杂性,所以表明 -
您肯定是在迭代 3 个数组。对我来说,它看起来像 O(N x M x K),N - 第一个数组的大小,第二个数组的 M 个大小,第三个数组的 K 个大小如果 N==M==K,那么它是 O(N^3)。跨度>
-
@cricket_007 我编辑了帖子。看看现在是否更清楚了。感谢您的评论
-
myArray 是列表节点的数组吗?列表是独立的吗?
标签: java arrays algorithm linked-list