ソートされていない配列(またはソートされているかどうかはわかりません)でk番目に小さい要素を選択するアルゴリズムの基本的なコードが与えられました。通常、これには quickselect を使用しますが、関数名として「countingselect」とラベル付けされた別の選択肢が与えられています。
「選択のカウントは、並べ替えのカウントと同様のアプローチを使用します。リスト内のアイテムは、カウントの配列へのインデックスとして使用されます。次に、配列の低い値の終わりから始めて、合計が目的の値を超えるまで、アイテムのカウントが累積されます。」
// return the kth smallest item
int countingSelect(int items[], int first, int last, int k) {
int counts[cap];
for (int c = 0; c < cap; c++) {
counts[c] = 0;
}
for (int i = first; i < last; i++) {
counts[items[i]] += 1;
}
int c = 0;
while (k >= 0) {
k -= counts[c++];
}
return c-1;
}
関数がどのように機能するかを正確に理解できるように、これを疑似コードに分解するのに非常に苦労しています。与えられたコードで最初に混乱したのは、'cap' の値とは何か、そしてその機能とは何かということです。キャップは通常どのような値ですか? 私はこの情報を与えられていません。
アルゴリズムを疑似コードに分解することは、それを理解するための良い方法であり、コードを分解してステップ実行するための支援をお願いします。
前もって感謝します。