Big-Oでこの投稿を読ん
でいます。次のコードはO(n ^ 2)であると表示されています。
bool ContainsDuplicates(String[] strings)
{
for(int i = 0; i < strings.Length; i++)
{
for(int j = 0; j < strings.Length; j++)
{
if(i == j) // Don't compare with self
{
continue;
}
if(strings[i] == strings[j])
{
return true;
}
}
}
return false;
}
しかし、なぜか分かりません。
内側のループは一定のことを行います。
つまり、定数の1 .... Nの合計です。つまり、定数O(1)です。
外側のループはO(1)の合計です。
だから私はそれがn * O(1)であると想像します。
私はここで何かを誤解していると思います。
すべてのネストされたループがO(n ^ 2)を意味するとは思いませんか?
i+1
代わりにで開始することにより、これをO(N ^ 2/2)に減らすことができます0
。書かれているように、最悪の場合(重複なし)1/2の比較は冗長です。
O(N)
、このコードは実際にO(N^2 * M)
はMが文字列の長さであることです。