左右の中央値と要素を効率的に選択する


14

コーダーののセットがあるとします。NS={a1,a2,a3,,aN}N

各コーダーの評価はで、金メダルの数はです。E iRiEi

ソフトウェア会社は、アプリケーションを開発するために正確に3人のコーダーを雇いたいと考えています。

3人のコーダーを雇用するために、彼らは次の戦略を開発しました。

  1. 彼らはまず、評価者の昇順および金メダルの降順でコーダーを配置します。
  2. この整理されたリストから、3人の中間コーダーを選択します。たとえば、配置されたリストが場合、コーダーを選択します。a 2a 3a 1(a5,a2,a3,a1,a4)(a2,a3,a1)

ここで、このタスクのためのプログラムを作成して、会社を支援する必要があります。

入力:

最初の行には、つまりコーダーの数が含まれます。N

次に、2行目に番目のコーダーの評価が含まれます。 iRii

3行目には、番目のコーダーによってバギングされた金メダルの数が含まれています。i

出力:

会社が選択する3人のコーダーが獲得した金メダルの合計を含む1行のみを表示します。


3
それで、より高い評価のコーダーは常により少ないメダルを獲得しますか?? そうでない場合、実際に並べ替えに使用している順序は何ですか?
JeffE

回答:


16

これは、Selection Algorithmsと呼ばれるアルゴリズムのクラスによって解決されるリストから番目に小さい要素を選択する問題です。確定的な線形時間選択アルゴリズムが存在するため、元の未ソートリストから番目に小さい要素を選択することにより、線形時間で問題を解決できます。n / 2 n / 2 1 n / 2 + 1kn/2,n/21,n/2+1


6
必要に応じて、選択アルゴリズムを1回実行して中央値を見つけ、1回で左右のパーティションの最小値と最大値をそれぞれ見つけることができます。
ザックラングレー

@Sid @ Zach Langleyこんにちは、Pseudo Codeを提供してもらえますか。iwiki paediaにアクセスしましたが、理解するのが少し難しいと感じました。
ジャック

@Jackは、クイックソートの仕組みをよく知っていますか?ランダム化選択アルゴリズムは、各ピボットの片側でのみ再帰することを除いて、基本的に同じです。
ザックラングレー

6
@Jack:選択アルゴリズムに関するウィキペディアの記事(Sidの回答にリンクされています)には擬似コードが含まれています。Googleも機能します。
JeffE

@Sid :: wikiアルゴリズム(パーティションベースの一般選択アルゴリズム)を読みました。k= n / 2、k = n / 2-1、k / 2でselect関数を3回呼び出す必要がありますか?関数selectを呼び出している間のleft、rightの値。パーティション関数でも、パーティションインデックスの値はどうなりますか。
ジャック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.