Integer: FindMedian(Integer: array[])
For i = 0 To array.Length - 1
// Find the number of values greater than and less than array[i].
Integer: num_larger = 0
Integer: num_smaller = 0
For j = 0 To array.Length - 1
If (array[j] < array[i])
Then num_smaller = num_smaller + 1
If (array[j] > array[i])
Then num_larger = num_larger + 1 Next j
If (num_smaller = num_larger)
Then Return array[i]
End If
Next i
End FindMedian
现在关于算法的复杂性,作者说:
如果数组包含N个值,则外部For i循环执行N次。对于这些迭代中的每一个,内部For j循环执行N次。这意味着内循环内的步骤执行N×N = N次,给出算法运行时间为O(N)。
我认为复杂性应该是O(N ^ 2)。我错了吗?
答案 0 :(得分:2)
当然Order将是o(N ^ 2),因为对于每个外部循环,你的内部循环将运行n次,因此有n个外部循环。 时间复杂度为o(n ^ 2)。
你能否分享一下书的链接和你找到它的页码?
答案 1 :(得分:0)
是的,我认为是。
来自https://rob-bell.net/2009/06/a-beginners-guide-to-big-o-notation/
O(N^2)
表示一种算法,其性能与输入数据集大小的平方成正比。这涉及涉及数据集上的嵌套迭代的算法。更深入的嵌套迭代将导致O(N^3)
,O(N^4)
等。
bool ContainsDuplicates(IList<string> elements)
{
for (var outer = 0; outer < elements.Count; outer++)
{
for (var inner = 0; inner < elements.Count; inner++)
{
// Don't compare with self
if (outer == inner) continue;
if (elements[outer] == elements[inner]) return true;
}
}
return false;
}
这正是你所要求的。