3

各文字列に 0 または 1 つの親がある文字列階層を含む C# クラスを設計しています。

私の傾向はDictionary<string,string>、キーが子で値が親である a でこれを実装することです。ディクショナリには大量の値が含まれている可能性がありますが、正確なサイズはわかりません。これは、親への参照を使用して複合ラッパーを作成するよりも高速に実行されるはずですが、間違っている可能性があります。

より良いパフォーマンス速度を確保するために私が取ることができる別のアプローチはありますか?

4

2 に答える 2

11

からの値の取得Dictionary<K,V>は非常に高速です (O(1) に近い、つまり、コレクションのサイズに関係なくほぼ一定時間のルックアップ)。これは、基礎となる実装がハッシュ テーブルを使用するためです。もちろん、型がひどいハッシュ アルゴリズムを使用している場合は、パフォーマンスが低下する可能性がありますが、フレームワークの型keyには当てはまらない可能性が高いので安心してください。string

ただし、コメントで尋ねたように、いくつかの質問に答える必要があります。

  1. 最も重要なパフォーマンス メトリック、つまり、時間 (CPU) またはスペース (メモリ) を定義します。
  2. あなたの要件は何ですか?これはどのように使用されますか?あなたの最悪のシナリオは何ですか?これは、比較的まれなルックアップで大量のデータを保持することになりますか、短時間で多くのルックアップを実行する必要がありますか、それとも両方に当てはまりますか?

このDictionary<K,V>クラスは、項目を追加すると大きくなる配列も内部的に使用します。これでよろしいですか?繰り返しになりますが、誰かが完全な回答を得る前に、要件に関してより具体的にする必要があります。

于 2011-07-04T02:32:56.090 に答える
1

ディクショナリを使用すると、直接参照を使用するよりも遅くなります。ディクショナリはハッシュなどを計算する必要があるためです。実際に親のみが必要で、子の操作は必要ない場合 (これは疑問です)、文字列を配列に一緒に格納できます。親文字列のインデックス。

于 2011-07-05T08:03:00.560 に答える