Java for循环中两个嵌套while循环的运行时
当我试图找到一个for循环和两个嵌套while循环的算法的复杂性时,我感到非常困惑,因为其中涉及两个linkedlist。考虑下面的代码:Java for循环中两个嵌套while循环的运行时,java,arrays,algorithm,linked-list,Java,Arrays,Algorithm,Linked List,当我试图找到一个for循环和两个嵌套while循环的算法的复杂性时,我感到非常困惑,因为其中涉及两个linkedlist。考虑下面的代码: 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){
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;
}
public int func(类名b){
//int[]myArray=新节点[n];
丘脑结节;
节点路缘;
整数和=0;
对于(int i=0;i因此,为了澄清,myArray
字段是一个链表数组。如果用伪代码表示,代码实际上就是这样做的:
for each index i in this.myArray
iterate over all elements of this.myArray[i]
iterate over all elements of b.myArray[i]
do O(1) work
如果this.myArray
的长度为N,则this.myArray
中列表的最大长度为M,而b.myArray
中列表的最大长度为K,则运行时复杂性为O(M x N x K).您的困惑似乎是试图用n
的函数来表示算法的时间复杂度。如果列表的长度与n
无关,这是不可能的
对于从0
到n-1
的每个i
,让Ai
成为列表的长度this.myArray[i]
和Bi
成为列表的长度b.myArray[i]
执行最内层循环的确切次数为:
A0×B0+A1×B1+…+An-1×Bn-1
为了确定时间复杂度,您需要对Ai
和Bi
的值进行一些限制
举几个例子:
- 假设每个列表的长度以
M
为界
Ai≤ 从0
到n-1
Bi≤ 从0
到n-1
A0×B0+A1×B1+…+An-1×Bn-1≤ n×M²
所以时间复杂度是什么是a
和b
?你从不使用第一个myArray
,而且“一些工作”会影响复杂度,所以一定要表明你在迭代3个数组。对我来说,它看起来像O(nxmxk),N-第一个数组的大小,M-第二个数组的大小,K-第三个数组的大小如果N==M==K,那么它就是O(N^3)。@cricket_007我编辑了这篇文章。现在检查一下,看它是否更清晰。谢谢你的评论。myArray是列表节点的数组吗?列表是独立的吗?