パフォーマンスの重複をチェック
-
01-07-2019 - |
質問
ってプロジェクトに取り組んでいかに対して繰り返し処理を実行するによりデータ収集や除去の作品の主キー"が重複しています。私にしてみました
List<int>
や
Dictionary<int, bool>
の辞書はこのような性能をもったものを必要なのBooleanタグを付けます。私とが期待されることができます.これはリストで物価連動アクセスや辞書ではできません。どうか、迷いましたが、あのシーンをこの問題です。いらないアクセスし、応募にあただけでボランティアは"主キーをいただいみを行うほか、仕事に応募して新しいその有効なタイプを利用します。私C#ます。純2.0にアクセスしてください。かなり固定し入力データの重複からのソース(残念ながら!).いい感じスケール、全体的に私はチェックの重複を約1,000,000回のアプリケーションですが、サブセットに以約64,000する必要のあるユニークです。
解決
これは、HashSetクラスです。純3.5.ことができるようになれを辞書で調べました。場合は以下のような100要素リストも行う。
他のヒント
編集:データが消えるのは注意私のコメントとなります。と思ったきゃC++.わからない場合は関連する、C#です。
ハッシュテーブルがtadが速くなります。バイナリの木(その辞書)が相対的に遅い方法によっては、メモリがご利用いただけます。これは特に、真の場合はツリーとなります。
しかし、変更データ構造を持たないため、またカスタムプールアロケータのご辞書?私はベットの時間が過ごした横木そのものが数百万の割当ておよびdeallocationsの辞書はだと思わないでください。
って見える場合があり率10の速度-圧を差し込むだけで簡単にアロケータプールの辞書テンプレートを作成します。Afaik向のコンポーネントで直接使用します。
別のオプション:まっている場合のみ64.000数の整数存在しまれるファイルを作成し完璧なハッシュ機能です。そのようにご利用いただけるハッシュ機能を地図に表示す整数の0 64.000範囲指数、ビット配列になります。
あることができ、柔軟性があります。きらやり直なたにぴったりのハッシュ機能では自動的に実行されるのであればセットの整数型の変わります。
思っていると思います。
まずは逆転かと言えるでしょう。辞書には物価連動アクセス(ハッシュテーブルがドリストだった。
さだき,誠にありがとうございデータ辞書のすべてのキーがありすることはできない重複している。
I susspectのデータが保存されて別のデータタイプやすいで格納する辞書です。この場合に挿入し、データ二つのdictionarys.
foreach (int key in keys)
{
if (!MyDataDict.ContainsKey(key))
{
if (!MyDuplicatesDict.ContainsKey(key))
MyDuplicatesDict.Add(key);
}
else
MyDataDict.Add(key);
}
の場合はチェックのための一意性の整数型の範囲の整数が制約されることはあり得ますがあることができ使用する配列の型になります。
より良い包装が実施するビットマップデータ構造に基配列がintの配列は32intにキースペースを1ビットの尊重できる方が希望です。この場合の最大数1,000,000する必要があるの~30.5KBのメモリのデータ構造です。
を行い、ビットマップするにはO(1)(単チェック)である。
がありましたので少し戻る から重複を削除する配列.目的の性能をはっきりしたの償で入手できるかもしれませんが、たいへの答えをどう過ごせばよいかを教えてくれる。また、どうすればベースがの場合は排除に努める複製配列からそのLINQコマンドライン Enumerable.異なる なお以上のパフォーマンスに何かを書いてます。ともありわかりやすく伝えるための LINQ。純2.0 これルートの価値を検討.
この場所での使用の一覧をご利用BinarySearch:
// initailize to a size if you know your set size
List<int> FoundKeys = new List<int>( 64000 );
Dictionary<int,int> FoundDuplicates = new Dictionary<int,int>();
foreach ( int Key in MyKeys )
{
// this is an O(log N) operation
int index = FoundKeys.BinarySearch( Key );
if ( index < 0 )
{
// if the Key is not in our list,
// index is the two's compliment of the next value that is in the list
// i.e. the position it should occupy, and we maintain sorted-ness!
FoundKeys.Insert( ~index, Key );
}
else
{
if ( DuplicateKeys.ContainsKey( Key ) )
{
DuplicateKeys[Key]++;
}
else
{
DuplicateKeys.Add( Key, 1 );
}
}
}
することもできますの他の型を定義できますIComparerによる過負荷:BinarySearch(T項目IComparer< T>);