次のループの実行時間を見つけようとしています。
int m=1;
for(i=1;i<=k;i++)
{
for(j=1;j<=A[i];j++)
{
B[m]=i;
m++;
}
}
ここで、Aは整数を保持する配列であり、これらの整数の合計はnです。たとえば、Aの長さが2で、A [1]=2およびa[2]= 4の場合、内部ループは6回実行されます。
したがって、私の講義ノートでは、このコードの実行時間はO(n + k)であると書かれています。ただし、たとえば、kが5、配列Aの長さが4、A [1] = 3、A [2] = 0、A [3] = 0、A [4] = 9、A[ 5]=0。したがって、n=12です。次に、k = 1の場合、内側のループは2回繰り返され、k = 2の場合、外側のループは1回繰り返され、k = 3の場合、外側のループは1回実行され、k = 4の場合、内側のループは9回実行されます。 k = 5の場合、外側のループは1回実行されるため、反復の合計は14です。これはkとnの両方より大きく、実行時間はO(n)でもO(k)でもありません。私はここで何が間違っているのですか?
ありがとうございました