2009-06-29 7 views
0

私は現在、それぞれの要求に対して再処理するのではなく、ほぼ即時のデータアクセスを可能にするために非常に複雑なツリー構造を実装しています。ツリーと辞書の合理的なサイズ

ツリーのサイズが大きくなりすぎるという理論的な、または実用的な制限があるのか​​、ディクショナリがあまりにも衝突/衝突して正しく機能するようになったのかは疑問です。

一般的な答えは分かりますが、C#固有の情報ははるかに良いでしょう!

答えて

2

.NETでは、ツリーまたはディクショナリの最大値は2^31 - 1です(オーバーヘッドではおそらく数が少なくなります)。

現実的に言えば、あなたはたぶんその前にメモリ不足に陥っているでしょう!

ツリーがバランスのとれたままの場合、検索はほぼそのままです。 O(log N)である。

ディクショナリは、使用される基礎となるアルゴリズムに対してより敏感です。たとえば、特性の異なる多くのハッシュ方式があります。

+0

逆のくさびのような形をしているので、実際には辞書のような検索はありません。新しい項目はすべての項目の子として追加されます(信じられないほど良い知識があれば意味がありますサイトの無作為の要求!= D) –

1

大量になると思われることによります。数百人または数千人がOKであるべきですが、何百万人もの専門家を探す価値があります。

ストレージテクニックと再調整によって、ツリーの成長が遅くなります。

辞書はかなり一貫している必要がありますが、保存する可能性のあるデータ量に適したサイズ(おそらくx2は安全)で構築する必要があります。

1

this questionを参照してください - それは私が上の答え:)

問題を最初の一つだが、約90万アイテムと辞書を構築し、パフォーマンスが低下しました。私は10分以上から0.34秒までの時間を得ました。

辞書はあなたのハッシュ関数と同じくらい良好です。ユニークなハッシュをすばやく生成できれば、軽量化のように動作します。このことができます

希望、

EDIT:

比較クラスは重要ではありません、.NET文字列は非常に強力なハッシュ関数を持っている - ので - 辞書で優れた性能を持っています。その人の問題は、文字列のペアの代わりに単一の文字列を使用していたのであれば、 "離れてしまった"ばかりでした。

+0

ええ、辞書は強力なハッシュ関数を使用すると良いことがわかりますが、自分自身を実装することを避けようとしていました。私は文字列の辞書をキー入力しているので、比較クラスはそれほど有用ではありません。これは残念です! –