算法

著名的计算机科学家图灵奖获得者N.Wirth(沃思)教授给出了一个著名的公式:算法+数据结构=程序,这说明数据结构和算法是程序的两大要素,二者相辅相成,缺一不可。

数据结构和算法之间存在着本质联系,在某一数据类型上,总要设计其上施加的运算,而只有通过对定义运算的研究,才能清楚地理解数据结构的定义和作用;在涉及运算问题时,总要与该算法所处理的对象和结果根据等联系起来进行考虑。

在本门课程中将大量的解决算法问题,因为算法联系着数据在计算过程中的组织形式,为了描述实现某种操作,常常需要设计算法,因而算法是研究数据结构的重要途径。

1.算法定义

算法(Algorithm)是规则的有限集合,是为解决特定问题而规定的一系列操作。

2.算法的特性

(1)有限性:有限步骤之内正常结束,不能形成无限循环。

(2)确定性:算法中的每一个步骤必须有确定含义,无二义性。

(3)可能性:原则上能精确进行,操作可通过已实现的基本运算执行有限次而完成。

(4)输入:有多个或0个输入

(5)输出:至少有一个或多个输出。

在算法的五大特性中,最基本的是有限性、确定性和可行性这三个特性。

3.算法设计的要求

当用算法来解决某问题时,算法设计的目标是正确、可读、健壮、高效、低耗。通常作为一个好的算法,一般应该具有以下几个基本特征。

(1)算法的正确性

算法的正确性是指算法应该满足具体问题的求解需求。其中“正确”的含义大体上可以分为以下三个层次:

1.算法对于几组输入数据能够得出满足要求的结果。

2.算法对于精心选择的典型、苛刻而带有刁难性的输入数据能够得出满足要求的结构。

3.算法对于一切合法的输入数据都能产生满足要求的结果。

达到三层含义下的正确是极为困难的,一般情况下,至少应以第二层含义的正确作为衡量一个算法是否正确的标准。

例1.   求n个数的最大值问题,给出核心处理的示意算法。

max=0;

for(i=1;i<=n;i++)

   {scanf("%f",&x);

    if(x>max) max=x;

   }

当输入的n个数全为正数时,结果是正确的;如果输入的n个数全为负数,求得的最大值为0,显示这个结果不对,由这个简单的例子可以说明算法正确性的内涵。

(2)可读性

一个好的算法首先应该便于人们理解和相互交流,其次才是机器可执行。可读性好的算法有助于人对算法的理解,反之难懂的算法易于隐藏错误且难于调试和修改。

(3)健壮性(鲁棒性)

即对非法输入的抵抗能力。它强调即使输入了非法数据,算法应能加以识别并作出处理,而不是产生误动作或陷入瘫痪。

(4)高效率和低存储量

算法的效率通常是指算法的执行时间。对于一个具体问题的解决,通常有多个算法,执行时间短的算法其效率就高。所谓的存储量需求,是指算法在执行过程中所需要的最大存储空间,这两者都与问题的规模有关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值