あるタイプのコレクションがあるとしましょう。
IEnumerable<double> values;
次に、いくつかのパラメーターkについて、そのコレクションからk個の最高値を抽出する必要があります。これは、これを行うための非常に簡単な方法です。
values.OrderByDescending(x => x).Take(k)
ただし、これは(私がこれを正しく理解している場合)最初にリスト全体をソートし、次に最初のk個の要素を選択します。しかし、リストが非常に大きく、kが比較的小さい(log nよりも小さい)場合、これはあまり効率的ではありません-リストはO(n * log n)でソートされますが、リストからk個の最高値を選択すると思いますO(n * k)のようにする必要があります。
それで、これを行うためのより良い、より効率的な方法について誰かが何か提案がありますか?