对操作数进行大O估计,其中操作是比较或乘法, 用于此算法段(忽略用于测试条件的比较) 在for循环中,其中a1,a2,...,an是正实数)。另外,max函数从索引'i'到'j'找到最大值,而不是只比较两个值。
m := 0
for i := 1 to n
for j := i + 1 to n
m := max(ai, aj, m)
问题给出了没有描述的max函数。 function得到三个值,'ai'是起始索引,'aj'是end,'m'是变量来保存最大值。我认为函数的时间复杂度是O(n),因为'A'只是数组,我们必须遍历该部分才能获得最大值。我们想要知道代码的bigO以及max函数。
答案 0 :(得分:1)
首先,可以在没有通过数组的那么多迭代的情况下找到数组中的最大元素。您只需要一次通过并将m设置为高负数。
m := (highly negative number) -inf
for i := 1 to n
m := max(ai,m)
对于您的算法,时间复杂度为O(n2),因为您不止一次地访问数组的不同部分,而不是如您所提到的那样。
更准确地说,算法的时间复杂度为:
(n-1)+(n-2)+(n-3)+ ... 1 = n * n - c(某些常数)
=> O(n2)