내가 읽고있는 것 this 내 알고리즘에 어떤 변화가 영향을 주는지 알아 내려고하는 Big O 기사 (및 다른 책 참고서). 큰 O - O (N^2) 또는 O (N^2 + 1)?
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;
}
나는 다음과 같이 변경했다 :
때문에 (N^2) 코드를 다음 O를 제공
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
{
if(strings[i] == strings[j])
{
return true;
}
}
}
}
return false;
}
지금 모두 IF의 중첩하고 '계속'는 제거됩니다. 이 알고리즘이 실제로 O (N^2 + 1)이 되었습니까? 그리고 왜 ? IF 체크가 무의식 전에 존재했기 때문에 처음에는 여전히 O (N^2)라고 생각했습니다.
큰 오 표기법에서는 상수가 포함되지 않기 때문에 (* 점근 적 복잡도 ** ** 동일한 복잡도가 아니기 때문에) 'O (N^2 + 1)'과 같은 것은 없습니다. –
은 런타임과 복잡도가 동일하다는 것을 의미합니까? 두 함수 모두 O (N^2)입니까? – Fawix
N² *가 * 1을 지배하므로 O (N² + 1)은 O (N²)와 동일합니다. – dkrikun