如何找到计算数组中和值的算法??
是这样的吗?
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符号。
答案 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上的线性函数。