2016-06-22 11 views
2

この前SOポストは、.NET交差()メソッドを使用して説明:時間/空間複雑.NET交差()メソッド

Intersection of two sets in most optimized way

をそれが(M Oの方法の複雑さO大きいが記載されて+ n)。それは時間の両方のための大きな複雑さですか?スペース?

また、nが大きなo表記でmよりも前に行くべきであると読んだので、上記の複雑さはo(n + m)と書いてください。適切なシーケンスの前にnか、またはこれらの変数のシーケンスは大きなo表記で(大いに)問題ではありませんか?

答えて

1

(1)答えは、1つのリストからハッシュセットを構築し、それに対する他のリストの要素をチェックすることについて説明しています。スペースの複雑さは、ハッシュセットを構築することから生まれます。ハッシュセットのサイズは、ハッシュセットを作成するコレクションに応じて、mまたはnのいずれかに入れる要素の数に比例します。最悪の場合に大きなセットからハッシュセットを構築するとしましょう。次に、空間の複雑さはO(max(m、n))である。この複雑さクラスは、O(m + n)と同じです。どうして?すべての正のm、nについて、max(m、n)< 1 *(m + n)すべての正のm、nについて、m + n < = 2 * max(m、n)。したがって、説明された方法の時間と空間の複雑さは、O(m + n)またはそれと同等のO(max(m、n))です。

(2)m + n < =すべての正のm、nについて1 *(n + m)。すべての正のm、nについてn + m < = 1 *(m + n)。従って、O(m + n)はO(n + m)と同一である。

0

これは時間と空間の両方にとって非常に複雑ですか?

O(m + n)メソッドを使用している場合、空間の複雑さはO(m < n ? m : n)になります。どうして?それらの中の小さいほうのものをメモリに保持し、大きなものから一度に1つのアイテムを読み取って、その大きいものの1つのアイテムが小さいものにあるかどうかをテストすることができます。それ以外の場合は、両方のメモリを保持する場合は、空間の複雑さはO(1)になりますが、時間の複雑さはO(mn)になります。

nは適切なシーケンスの前にありますか、またはこれらの変数のシーケンスは大きなo表記で(大変)問題ではありませんか?

m + n = n + mであるので、全く問題ではない。複雑さがO(m Log n)やO(mn )のようなものであれば、O(n Log m)またはO(nm )と書くことはできません。