Algorithm-1 (A:array[p..q] of integer)
sum, max: integer
sum = max = 0
for i = p to q
sum = 0
for j = i to q
sum = sum + A[j]
if sum > max then
max = sum
return max
嵌套循环执行多少次?
我知道第一个for
循环具有O(n)
复杂度,整个算法的总复杂度为O(n^2)
。但是,我需要内循环的确切执行次数,以便通过递归关系来证明这一点。
答案 0 :(得分:1)
可能不是您要找的答案。事实上,你认为内部循环有O(n)并且整个程序具有O(n ^ 2)复杂度。只需扔进一个计数器并在内循环中递增它。这应该会给你确切的执行次数。
答案 1 :(得分:1)
如果您想要一个确切的数字,则调用内部循环(n + n-1+ ...1) = n(n+1)/2 ~= O(n^2)
此处n = q-p
答案 2 :(得分:1)
它不仅仅是Sum(i = 1 -> n, i)
,等于n(n+1)/2
吗?
在您的情况下,n = q-p+1
,您获得(q-p+1)(q-p+2)/2
。
扩展这一点 - 如果我做对了 - 你得到(q^2-qp+2q-pq+p^2-2p+q-p+2)/2
= (q^2+p^2-2qp+3q-3p+2)/2
。
答案 3 :(得分:0)
内循环运行q-i + 1次,执行总数为
\ sum {i = p} ^ {q}(q-i + 1)= \ sum {k = 1} ^ {q-p + 1}(k)= n *(n + 1)/ 2
其中n = q-p + 1。