2017-01-28 4 views
0

https://msdn.microsoft.com/en-us/library/dd412070(v=vs.110).aspxのドキュメントを見ると、私は方法がありません。理想的にはSortedSet<int>のの中央値(中央の要素または両方の中央の合計)を見つけることができるようにしたいと思います(明らかに、リストまたは配列に変換してO(n)時間に実行できます)。簡単な質問:SortedSet <T>には、中央値要素を簡単に見つける方法がありますか?

答えて

3

残念ながら、あなたは正しいです。 SortedSetは、中央値を取得するための組み込みの方法を提供していません。 SortedSetの基礎となるデータ構造が赤黒のツリーであるためです。 (例:WikipediaのRed-black treeを参照してください)

他の種類のコレクションを使用することは可能ですか、それともSortedSetでなければなりませんか?そうでない場合は、リストまたは配列に変換し、インデックスlength+1/2の要素に奇数値length、または要素length/2およびlength/2 - 1の平均値にアクセスしてO(1)時間の中央値を取得することをお勧めします。

+0

ただし、赤黒のツリーを修正して各ノードの総アイテム数を追跡することができ、その数が分かっていれば、O(log(n))のインデックスで要素にアクセスするのに十分な情報です)時間。 'SortedSet'はこれをしませんが、カスタム実装はOPに適しています。 – hvd

関連する問題