入力を変更せずに時間と追加メモリセルを使用して選択できる場合は、未解決の問題です(ここを参照)。しかし、これにかなり近づくことができます。O (1 )O(n)O(1)
MunroとRamanは、時間で実行される選択アルゴリズムを提案し、追加ストレージ(セル)のみを使用しました。このアルゴリズムでは、入力は変更されません。小さな選択でき。O (1 / ε )ε > 0O(n1+ε)O(1/ε)ε>0
基本的に、マンロとラマンのアルゴリズムは、古典的なアルゴリズムとして機能します。これは、ランクが既知の2つの要素である左と右の境界(filterと呼ばれます)を維持します。要求された要素は、2つのフィルターの間に含まれます(ランク順)。適切なピボット要素を選択することにより、フィルターとに対してすべての数値をチェックできます。これにより、フィルターを更新し、チェックする要素の数を減らすことができます(ランクごと)。リクエスト要素が見つかるまで繰り返します。p pO(n)pp
従来のアルゴリズムと異なるのは、の選択です。LETアルゴリズムその解く選択すること。アルゴリズム は、配列を同じサイズのブロックに分割し、ランクがフィルターの間にある多くの要素があるブロックを特定します(鳩の巣の原理による存在)。次に、アルゴリズム使用して、このブロックをスキャンし、適切なピボット要素を探します。再帰アンカーは簡単なアルゴリズムです。上記のように、適切なブロックサイズ(および計算)により、実行時間とスペースの要件が得られます。A (k )ε = 1 / k A (k )A (k − 1 )A (1 )pA(k)ε=1/kA(k)A(k−1)A(1)
ところで、お探しのアルゴリズムは最近、定数ワークスペースアルゴリズムと呼ばれていました。
下限については知りません。