求和数组和大O表示法

时间:2009-05-24 16:44:08

标签: algorithm sum big-o

如何找到计算数组中和值的算法??

是这样的吗?

Algorithm Array Sum
Input: nonnegative integer N, and array A[1],A[2],...,A[N]
Output: sum of the N integers in array A
Algorith Body:
j:=1
sum:=0
while j<N
      sum := sum + a[J]
      j:=j+1
  end while
end Algorithm Array Sum

我如何通过使用O-Notation

将其与算法的运行时间联系起来

这是过去一年的考试,我需要修改考试。

问题
给出包含n整数值的数组A [] 1.给出一个计算数组中所有值之和的算法
2.找出算法运行时间最简单,最好的O符号。

4 个答案:

答案 0 :(得分:12)

问题是找到所有值的总和,以便迭代数组中的每个元素,并将每个元素添加到临时总和值。

temp_sum = 0
for i in 1 ...array.length
    temp_sum = temp_sum + array[i]

由于您需要遍历数组中的所有元素,因此程序线性地依赖于元素的数量。如果你有10个元素,那么迭代10个元素,如果你有100个元素,除了遍历所有的百万元素并添加它们之外你别无选择。因此,时间复杂度为Θ(n)

如果您找到所有元素的总和,并且您不知道有关数据的任何内容,那么您需要至少查看一次所有元素。因此n是下限。您也不需要多次查看该元素。 n也是上限。因此,复杂度为Θ(n)。

但是如果你对元素有所了解,那么你得到n个自然数的序列,你可以用n(n + 1)/ 2在恒定时间内完成。如果您获得的数据是随机的,那么您别无选择,只能执行上述线性时间算法。

答案 1 :(得分:4)

由于 n 是数组的大小,所有你需要做的就是从开始到结束迭代,Big O表示法是O [n]

integer N= Size_array;
array a[N]
j=1 
sum=0
while j<=N 
 sum += a[j]  
 j++
end while

答案 2 :(得分:0)

我认为你的意思是“当j&lt; = N”时,你需要指定它。

我认为,运行时间应为O(n),因为你只有一个循环。

答案 3 :(得分:0)

要计算此算法的O,您需要计算每行代码执行的次数。稍后您将只计算基本操作,但首先计算所有操作。

那么j:= 1行会运行多少次?总和:= 0运行多少次? while循环的条件执行多少次? while循环中的语句?

总结这些。你会注意到你得到的值将是1 + 1 + n + n + n = 2 + 3n。因此,您可以得出结论,它是n上的线性函数。