算法的频率计数

时间:2010-12-06 03:52:08

标签: algorithm math

我需要知道如何在以下程序中确定 sum:= sum + 1 语句的频率计数:

sum:=0

for i:=1 to n do
  for j:=1 to i do
    for k:=1 to j do
        sum:= sum+1
    end<br/>
  end
end

我还想知道,一般来说,如何确定所有算法的频率计数,而不仅仅是这一算法。

3 个答案:

答案 0 :(得分:3)

ΣΣΣ1=ΣΣj=Σ(i *(i + 1))/ 2 =Σ(i ^ 2 + i)/ 2 =(n(n + 1)(2n + 1) )/ 6 + n(n + 1)/ 2)/ 2 = n(n + 1)(n + 2)/ 6

你的公式是:

F(n) = n(n+1)(n+2)/6

目前还没有计算运行时间的通用方法,如果有某种方法,应该从计算机科学中删除复杂性理论。

答案 1 :(得分:1)

对于表示确切频率的表达式,您需要咨询summation formulas for polynomials

即,内循环依赖于外循环的当前迭代。例如:

sum := 0
for i:=1 to n do
  for j:=1 to i do
    sum := sum + 1

关于n,总和是1 + 2 + 3 + 4 + 5 + ... + n。在求和表示法中,它是Σ i = 1 n i。

答案 2 :(得分:1)

好吧,让我们从内到外构建它。

每次运行内部循环时,代码行执行j次。到目前为止一切都很好。

因此,每次运行中间循环时,我们执行语句1 + 2 + 3 + ... + i - 1 + i次。任何人都应该认识到等于i * (i + 1) / 2。或(i^2 + i) / 2

每次运行外循环时,我们执行语句((1^2+1) + (2^2+2) + ... (n^2+n))/2次。

我会将最终结果作为练习留给读者。

虽然这个问题一般是不可判定的 - 如果你知道程序中每行代码会执行多少次,你就可以解决停机问题。