第2章 算法效率的度量方法---《大话数据结构》读书笔记

本文通过对比两种求和算法的执行次数来分析不同算法的时间复杂度。第一种算法使用循环求和,时间复杂度为O(n),而第二种算法利用数学公式直接计算结果,时间复杂度为O(1)。此外还探讨了一个双重循环的算法,其时间复杂度为O(n^2)。

一个程序的运行时间,依赖于算法的好坏和问题的输入规模。

思维的问题输入规模是指输入量的多少。

 

2种求和算法

第一种:

Int32 sum = 0, n = 100;//执行了1次

for (Int32 i = 1; i <= n; i++)//执行了n+1次

{

    sum = sum + i;//执行了n次

}

Console.WriteLine("sum={0}", sum);//执行了1次

 

第二种:

Int32 sum = 0, n = 100;//执行了1次

sum = (1 + n) * n / 2;//执行了1次

Console.WriteLine("sum={0}", sum);//执行了1次

 

 

第一种算法执行次数:1+(n+1)+n+1=2n+3

第二种算法执行次数:1+1+1=3

两种算法第一条和最后一条语句是一样的,忽略它们然后关注中间的那部分语句。

然后忽略循环体判断开销,这2个算法就是n次与1次的差距。

所以第一个算法没有第二个好。

 

延伸一个例子:

Int32 sum = 0, x = 0, n = 100;//执行了1次

for (Int32 i = 1; i <= n; i++)//执行了n+1次

{

    for (Int32 j = 1; j <= n; j++)//执行了n(n+1)次

    {

        x++; ;//执行了n*n次

        sum = sum + i;//执行了n*n次

    }

}

Console.WriteLine("sum={0} x={1}", sum, x);//执行了1次

所以这个算法执行次数是:1+(n+1)+n(n+1)+n*n+n*n+1=3n^2+2n+3

忽略其它步骤(循环体头尾的开销),这个算法3n^2次,忽略最高项系数,那么这个算法执行次数是n^2

 

最终,在分析程序的运行时间时,最重要的是把程序看成独立于程序设计语言的算法或者一系列步骤。

同样问题的输入规模是n

求和算法的第一种:求1+2++n需要一段代码运行n次。那么这个问题的输入规模使得操作数量是f(n)=n

第二种:无论n为多少,运行次数都是为1,f(n)=1

第三种f(n)=n^2

 

转载于:https://www.cnblogs.com/hailan2012/archive/2012/01/01/2309548.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值