0

10 個のプロパティを持つクラスのコレクションを 1 つ作成するとします。このコレクションには約 1000 万のアイテムが含まれます。

ここで、このコレクションを O(1) の時間複雑度または O(1) に近いクラスのプロパティで検索したいと考えています (1 つのプロパティ、つまり ID または名前だけではありません)。

List を LINQ クエリで使用すると、O(n) 時間の複雑さが必要になるため、使用できません。

C# には、1 つのキー タイプのみでインデックスを作成できる辞書があります。なのでこちらも使えません。

1 つの解決策として、すべてのプロパティでインデックス付けされた 10 の辞書を作成できますが、この解決策には 1,000 万のアイテムがあるため、大量のメモリが必要になります。したがって、それは実現不可能です。

PS私はメモリソリューション(データベースなし)でのみ必要であり、コレクションはクラスの任意の単一のプロパティで検索できます(例:MyCollection [2]またはMyCollection ["John"]またはMyCollection ["12/12/2013"]など)検索時間は O(1) に近い必要があります。

では、この種のデータ構造をどのように実装できますか??

4

1 に答える 1

2

それはいけません。記憶と時間の間で取引を行う必要があります。10 個の異なるインデックス (つまり、10 個の内部辞書) を作成して O(1) ルックアップ時間を取得するか、線形検索を実行してメモリ フットプリントの増加を防ぎます。

それらはあなたの選択です。ここでは、両方の長所を活かす特効薬はありません。

于 2013-10-15T19:16:58.170 に答える