Java for循环中两个嵌套while循环的运行时

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){

当我试图找到一个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){
        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是列表节点的数组吗?列表是独立的吗?