質問

一部の図書館をコードしているリストを含むことができ50,000項目です。

呼び出し側の図書館で呼び出し方法と結果の文字列がリストに追加されます。どんな効率的にチェックの特徴を明らかにす文字列を追加

現在、追加する前に文字列、スキャン全体のリストを比較する文字列を付加文字列になります。この開始を示す規模の課題以上10,000ます。

私はこのベンチマークで興味の気づきを得ることになる。

  • に交換すればリスト<>辞書<>は、ContainsKey()す較として、一層スピードアップし、リストが10,000項目。
  • 私が繰り延べの独自性を確認後まですべての項目を追加しなが早い?その時点で必要となるであろうをチェック要素に対し他の元素、n^^2動作します。

編集

基本的なベンチマーク。作成した抽象クラスで公開した2つの方法:記入し、スキャン!を埋めを満たしコレクションのnで項目を使って50,000).スキャンのスキャン、リストm回使用した5000)が指定された値が存在します。その仕組みを構築した実装するクラスのリストで、他のパラメータは、HashSet.

文字列を使用した均一11文字の長さのランダムに発生方法では、抽象クラスです。

非常に基本的なマイクロベンチマーク

Hello from Cheeso.Tests.ListTester
filling 50000 items...
scanning 5000 items...
Time to fill: 00:00:00.4428266
Time to scan: 00:00:13.0291180

Hello from Cheeso.Tests.HashSetTester
filling 50000 items...
scanning 5000 items...
Time to fill: 00:00:00.3797751
Time to scan: 00:00:00.4364431

ですから、文字列の長さ、HashSetの約25倍よりも早くリスト、スキャンのためのユニークさ、などの点です。また、このサイズの収集、HashSetがゼロの罰金以上に大き項目を追加します。

その結果を興味深く、有効ではありません。に有効な結果も必要なのウォームアップ間隔で複数の試験ランダムな選択を実施します。がいこのバーのみ。

ります。

EDIT2

を加えたものをランダム化とmultpleの裁判で、HashSet一貫してリストこの場合、約20倍.

これらの結果なの限文字列変数の長さ、複雑なオブジェクトまたは異なる回収サイズです。

役に立ちましたか?

解決

あなたは特別に設計されて HashSet<T> のクラスを、使用する必要がありますあなたは何をやってます。

他のヒント

の代わりにHashSet<string>の使用List<string>が、それは非常にうまくスケールする必要があります。

私のテストから、HashSet<string>List<string>に比べて何も時間がかかりません。)

あるオフ課題でしたが、スケーリングしたい場合には、非常に大きな特定の文字列(単位百万+)言語依存性が見られなかったがチェック ブル.

あなたのために動作しないContains(T)機能をしていますか?

Iは、辞書は、<>連想配列として実装されていることを読みました。一部の言語(.NETに関連する必要はないもの)では、文字列インデックスは、各ノードでのフォークは、ノード内の文字に基づいて、木構造として記憶されます。 http://en.wikipedia.org/wiki/Associative_arrays してご覧ください。

同様のデータ構造は、(私が思う)1973年にアホとCorasickによって考案されました。あなたはこのような構造で50,000文字列を格納した場合、あなたが保存されているどのように多くの文字列ではない重要。これは、複数のの長さの文字列の問題。彼らはほぼ同じ長さであれば、検索アルゴリズムは、あなたが探している文字列の長さに関しては、ランタイムで直線的であるため、あなたはおそらく検索でスローダウンを見ることはありません。でも赤黒木またはAVL木のために、検索実行時には、あなたではなくのためのインデックスの要素数を検索している文字列の長さに多くを依存しています。あなたはハッシュ関数を使用してインデックスキーを実装することを選択した場合は、あなたは今も、インデックス内の文字列の検索、どの(O(M)、M =文字列の長さになるだろう)文字列をハッシュのコストをincurrおそらくインデックスの要素のO(Nログ())、N =番号の順になります。

編集:私は.NETの第一人者ではありませんよ。他の多くの経験を積んだ人は、他の構造を示唆しています。私は私の上に自分の言葉を取るだろう。

EDIT2:あなたの分析は少し一意性を比較するためのオフです。あなたはハッシュ構造や辞書を使用する場合、それはので、私は上記の投稿推論のO(N ^ 2)の操作はできません。あなたは、リストを継続して使用する場合は、リスト内の各要素を毎回調べる必要がありますので、それはO(N ^ 2)*(あなたのセット内の文字列の最大長)であることを正しいます。

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