算法及算法效率

算法

一、 算法的定义
算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

二、 算法的特性

  1. 输入输出:算法就有零个或多个输入,算法至少要有一个或多个输出
  2. 有穷性:在算法执行有限的步骤后,自动结束而不是出现无限循环,并且每一个步骤在可接受范围内完成。
  3. 确定性:算法的每一步都有确定的含义,不会出现二义性。
  4. 可行性:算法的每一步都必须是可行的,也就是说每一步都能执行有限的次数完成。

三、 算法设计的要求

  1. 正确性:算法的正确性是指算法至少应该具有中输入、输出、加工处理无歧义性,能正确反应问题的需求,得到问题的正确答案
  2. 可读性:算法设计的另一目的是为了便于阅读、理解和交流。
  3. 健壮性:当输入数据不合法时,算法能够做出相应的处理,而不是产生异常或莫名其妙的结果。
  4. 时间效率高存储量低:设计算法应该满足时间效率高和存储量低的要求。

四、 算法的效率度量方法

  1. 事后统计法
    通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。
    缺陷:
    ①必须要编制好代码后才能测试,不太靠谱。
    ②依赖计算机硬件和软件等因素,不同计算机在运算速度上可能不同。
    ③算法的测试数据设计困难。例如,一个优秀的算法在一个小的测试数据上得不到明显的体现,但在大的数据测试下相比于不好的算法就显而易见。

  2. 事前分析估计法
    在计算机编制前,依据统计方法对算法进行估算。
    经过分析,抛开这些与计算机硬件软件相关的因素,一个程序的运行时间,依赖于算法的好坏和问题的输入规模。所谓问题的输入规模就是指输入量的多少。

//代码一、
int i,sum=0,n=100;//执行1次
for(i=1;i<=n;i++)//执行n+1次要有一次用来判断循环是否结束。
{
	sum=sum+i;//执行n次
}
printf("%d",sum);//执行1次
//      代码二
int sum=0,n=100;//执行1次
sum=(1+n)*n/2;//执行1次
printf("%d",sum);//执行1次

显然,第一种算法执行了2n+3次,第二种算法执行了3次,算法的好坏显而易见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值