我在阅读this Big O文章(以及其他书籍参考)试图找出哪些更改会影响我的算法。Big O - O(N^2)or O(N^2 + 1)?
所以给出的以下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;
}
我作了如下改变:
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)。
在big-oh表示法中,不存在'O(N^2 + 1)'这样的事物,因为常数不计数(这是*渐近*复杂性和**不相等)复杂性。 – 2013-12-14 15:13:05
这意味着它们的运行时间和复杂度是相同的吗?这两个函数都是O(N^2)? – Fawix
O(N 2 + 1)与O(N 2)相同,因为N 2 *支配* 1。 – dkrikun