質問

の実装を探しています 赤黒の木 C# では次の機能を備えています。

  • O(log n) での検索、挿入、削除。
  • メンバーのタイプは汎用である必要があります。
  • でのサポート コンペアラ(T), 、並べ替え用 T その中のさまざまなフィールドによって。
  • ツリー内の検索は特定のフィールドを使用する必要があるため、受け入れられません T, 、ただし、フィールドタイプをソートして受け入れます。
  • 検索は正確な値だけで行うべきではありません。下位/上位の検索をサポートする必要があります。

ありがとう。

役に立ちましたか?

解決

あなたは、ほとんどのすぐ隣、最低を除いて、 SortedDictionary<T, U> の説明しましたあなたは多くの困難もなく、自分で実装することができます/次に高い値のバイナリ検索、ます。

SortedDictionaryがあなたのために不十分であることが特別な理由はありますか?

他のヒント

C5収集LIBSからTreeSetのをリッピングます。

これはまさにPowerCollectionsでOrderedDictionaryです。これは、スタートキー/終了キーを設定し、その範囲内のすべての値をスキャンする機能を追加していつも同じSortedDictionary(ジェネリック医薬品との赤黒木)までです。

それは初めに開始され、あなたの式を実行します:

SortedDicionaryはコレクションの先頭から始まり、唯一のMoveNext()の呼び出しを可能にするので、あなたは、LINQを使用していても何も魔法の出来事があるGetEnumeratorメソッド()関数を公開できます一つ一つのノードに、順番に、それはあなたのLINQの式に一致するものが見つかるまで。

OrderedDictionaryは、特定のキーに以前に列挙子を取得し、それはO(ログn)のルックアップを行う機能を有している。

しかし注意の単語:PowerCollections OrderedDictionaryで列挙子は「歩留まり」とメモリ使用量と列挙パフォーマンスを使用して実装されているが、少なくともO(N ^ 2)である...あなた自身がそれを実現するために実装を変更することができます伝統的な列挙子とこれらの問題の両方が離れて行きます。私が今までの時間を見つけることができる場合、私はCodePlexににそのパッチを提出します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top