0

そうではないと思いますが、誰かが確認できれば。

2 つのセットを交差させようとすると: A (100 万アイテム) B (1 アイテム)

フレームワークは、B.Contains(A) を 100 万回ではなく、常に A.Contains(B) を 1 回実行しますか?

これは、私が気付いていない派手なアルゴリズムとは対照的に、インターセクトがフードの下でどのように機能するかを想定しています。

アップデート:

B.InsersectWith(A)B << A.Intersect()が定義されてIEnumerableおり、以下の回答(およびMSDN)に基づいて効率が大幅に低下する場合、c#の場合は明らかに行う必要があります。したがって、最適なツールである を使用する場合、順序は重要ですIntersectWith()

4

3 に答える 3

3

ドキュメントから

other パラメーターによって表されるコレクションが、現在の HashSet オブジェクトと同じ等値比較子を持つ HashSet コレクションである場合、このメソッドは O(n) 操作です。それ以外の場合、このメソッドは O(n + m) 操作です。ここで、n は Count で、m は other の要素の数です。

HashSet.IntersectWith メソッド

また、データから意味のあるハッシュを導出できる場合は、高速実装 (オーバーライド) GetHashCode を探している場合。そして、Equal をオーバーライドします。コレクションに含まれるすべてのクラスに対してこれを行います。

Object.GetHashCode メソッド

于 2012-09-07T14:40:41.457 に答える
0

一般的な質問をするのか、特定の言語について質問するのかによって異なります。

Java では、2 番目のセットを反復し、次に最初のセットを反復して、その要素が含まれているかどうかを確認します。したがって、両方のセットを繰り返し処理します。

C# では、メソッドは最初のセット (A) の要素を列挙し、次に 2 番目のセット (B) の要素を列挙し、共通のものをマークします。その後、それらの要素をその順序で生成します。

ですから、あなたの質問に答えるために、私はそうではないと言います。これは、すべてのコンテナを通過する必要があることです

于 2012-09-07T13:47:08.757 に答える
0

コードは一般的なケース用に書かれています。そのような特殊なケースの場合は、特定のユース ケースで効率的なカスタム ロジックを実装する必要があります。

Contains() メソッドは、一致するものが見つかるまでリストを反復するだけなので、それが何をしていたかは間違いなく重要ですが、それがどのように機能するかという点では、他の答えが正しいと思います。アイテムは最大 1 回ですが、「Contains」ソリューションでは、マスター リスト内の各要素の「子」リスト全体を反復できます。

実際の解 = x+y 反復 解を含む = x+(x*y) 反復

于 2012-09-07T13:59:15.203 に答える