第一章——算法

本文介绍了算法的基本概念、性质以及设计步骤。强调了算法的有限性、确定性、输入输出性等基本性质,并指出正确性、效率和低储存量需求是算法设计的重要考量。通过例子分析了算法的问题及改进,同时阐述了算法与数据结构的密切关系,以及在设计过程中的相互作用。
摘要由CSDN通过智能技术生成

算法的概念和特性

算法分析与设计这门课从字面意思上可以分为三个模块——算法,分析,设计,其中分析和设计是具体进行时的“手段”,算法则是对象,所以我们首先需要知道算法是什么?

算法(Algorithm)是求解一系列问题的清晰指令(计算步骤),是指解题方案的准确而完整的描述。

算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,将输入数据转换成输出结果。

这个概念并不抽象,说简单点就是可以用清晰数学语言描述的解决问题的方法就是算法。算法显然不是凭空出现的,于是就有了根据问题设计算法的概念,算法需要具备的基本性质如下(我这里称为基本性质,即不可以被牺牲的,不可以因为权衡利弊而被放弃的性质):

1.有限性:一个算法必须总是(对任何合法的数据)在执行有限步之后结束,且每一步都可在有限时间内完成。

也就是说算法进行的时长应该是有限的,而不是无限处理下去,从程序的角度来看,无限处理下去的程序往往进入了死结(死循环),其实就是算法设计有误;从编译器和实际应用的角度来看,如果一个程序在编译器的运行时间过长,由于很多编译器的保护机制,程序是会被中断的,即使我们修改了编译器的设置,如果算法处理的时间过长,它在实际应用中的实时性也会大打折扣,也就是说从编译器和实际应用的角度来看,过长的运算时间往往也会被认为是“无限的”或者说“糟糕的”,这里的“有限性”与实际的处理效率和时间要求是紧密相关的,我个人更喜欢称这种“有限性”为“符合效率的”或者“时间不过长的”(np问题就是存在“有限时间内”能够解决问题的算法,但是“时间过长”)。

2.确定性:算法中的每一条指令必须有确切的含义,不会产生二义性。

这也是程序的基本性质。

3.输入性和输出性:一个算法必须要有0个或多个输入和1个或多个输出。

程序是不要求一定要有输出的,但是算法用于数据的处理,如果没有输出,这样的算法是不具备意义的(如果只是对数据进行处理了,处理后的数据就是我们的输出)。

以上是基本的性质,下面的性质是算法设计希望满足的性质,我们往往不能全部满足也没有必要全部满足这些性质,对于不同的问题,我们可以牺牲掉某些性质去满足另外一些我们更加需要满足的性质(介绍的顺序是我认为重要性从高到低的顺序):

1.正确性:要求算法能够正确地执行预先规定的功能和性能要求。

这其实本来也是程序的基本性质,对于我们设计的程序,我们希望程序能够达成我们想要达成的目标。但是这里达成的是算法想要达成的效果,也就是说从程序上来看它确实实现了算法预先规定的功能,但是算法不一定得到的是实际问题的答案,我个人认为这里的正确性指的是算法运行的结果和实际问题答案的准确率。

我们肯定希望算法尽可能得到的是实际问题的答案,但是如果在可以接受的范围内牺牲一定的准确率来提高其他需要满足的性质方面,也是可以接受的。

2.高效率和低储存量需求:希望算法的执行时间短,效率高;希望算法执行过程中占用的内存低。

这在书上是最后一点,我将它提前到第二点(甚至想提前到第一点),因为就基本性质的第一点——有限性的分析可以看出,从实际应用和编译器的角度来看,程序的执行时间是直接和程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值