数字のリストの中央値を見つけるプログラムを作成しました。数値のリストは動的であり、数値を削除および挿入でき(重複する数値を入力できます)、この間に新しい中央値が再評価されて印刷されます。
マルチマップを使用してこのプログラムを作成したのは、
1)すでにソートされていることの利点、
2)簡単な挿入、削除、検索(multimapはバイナリ検索を実装しているため)
3)重複エントリが許可されます。
エントリ数+削除数(Nとして表される)の制約は次のとおりです。0<N<=100,000。
私が書いたプログラムは機能し、正しい中央値を出力しますが、十分な速度ではありません。unsorted_multimapはmultimapよりも高速であることは知っていますが、unsorted_multimapの問題は、並べ替える必要があることです。中央値を見つけるには、ソートされたリストが必要なので、ソートする必要があります。だから私の質問は、unsorted_multimapを使用してからエントリをすばやくソートするのが実用的でしょうか、それともばかげているだけでしょうか?ベクトルを使用し、ベクトルをクイックソートし、バイナリ検索を使用する方が速いでしょうか?あるいは、私が考えもしなかった素晴らしい解決策を忘れているのかもしれません。
私はC++に不慣れではありませんが、時間計算量に関する私のスキルはやや中核的であることを認めます。
自分の質問を見れば見るほど、データ構造は基本的にすでにベクトルを実装しているので、クイックソートと二分探索でベクトルを使用する方が良いと思い始めています。