ソートカウントの実行時間を理解しようとしています。私のメモでは、配列Aのサイズがnであり、kが各数値の発生回数であると仮定すると、
Counting-Sort(A,k) {
for (i=1; i <= k; i++) // initialize number counters to 0
times[i] = 0;
for (j=1; j <= length[A]; j++) // decide how many times each
times[A[j]]++; // number appears in the input
// form the sorted array
m=1;
for ( i=1; i <= k; i++) // consider each number in the range
for ( j=1; j <= times[ i ]; j++) { // generate that number in
A[m]=i; // the output as many times as
m++; // it occurs in the input
}
}
t iは、各iに対して内部ループが繰り返される回数を示します。コードの下部にあるネストされたforループを見ると、内側のループが繰り返されるたびに、出力配列の正しい場所に新しい数値が配置されていることに注意してください。したがって、合計t i(i = 1からkまで)=n。
この合計がnに等しい理由がわかりません。外側のループはk回繰り返され、内側のループは最大n回繰り返される可能性があるため、O(nk)である必要があります。誰かが説明できますか?ありがとう