嵌套循环的复杂性(递归关系)

时间:2012-11-01 02:13:51

标签: algorithm complexity-theory time-complexity

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)。但是,我需要内循环的确切执行次数,以便通过递归关系来证明这一点。

4 个答案:

答案 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。