(一)算法基本概念
(1)定义
是问题求解过程的精确描述,为解决某一特定类型的问题规定了一个运算过程。
(2)特性
特性 | 说明 | |
1 | 有穷性 | 一个算法必须在执行有穷步骤后结束,且每一步都可在有穷时间内完成。 |
2 | 确定性 | 算法的每一步必须是确切定义的,不能有歧义。 |
3 | 可行性 | 算法应该是可行的,意味着算法中所有要进行的运算,都能够由相应的计算装置所理解和实现,并可通过有穷次运算完成。 |
4 | 输入 | 一个算法有零个或多个输入,是算法所需的初始量或被加工的对象的表示。这些输入取自特定的对象集合。 |
5 | 输出 | 一个算法有一个或多个输出,是与输入有特定关系的量。 算法实质上是特定问题的可行的求解方法、规则和步骤。 |
(3)优劣评估
标准 | 说明 | |
1 | 正确性 | 也称有效性,指算法能满足具体问题的要求。 即对任何合法的输入,算法都能得到正确结果。 |
2 | 可读性 | 指算法被理解的难易程度。设计的算法应尽可能简单易懂。 |
3 | 健壮性 | 也称鲁棒性,即对非法输入的抵抗能力。对于非法的输入数据,算法应能加以识别和处理,而不会产生误动作或执行过程失控。 |
4 | 效率 | 算法运行时花费的时间和使用的空间,对算法的理想要求是运行时间短、占用空间小。 |
(二)算法与数据结构
算法与数据结构密切相关,算法实现时总是建立在一定的数据结构基础之上。
程序=数据结构+算法
用计算机求解问题时,一般应先设计初步数据结构,然后再考虑相关的算法及其实现。
设计数据结构时应当考虑可扩展性,修改数据结构会影响算法的实现方案。
(三)算法的描述
常用算法描述方法有流程图、N/S盒图、伪代码和决策表等。
描述方法 | 说明 | |
1 | 流程图 (flow chart) | 即程序框图,是历史最久、流行最广的一种算法的图形表示方法。 每个算法都可由若干张流程图描述。 流程图给出了算法中所进行的操作以及这些操作执行的逻辑顺序。 |
2 | N/S盒图 | 是结构化程序设计出现后的描述工具。 在N/S图中,每个处理步骤用一个盒子表示,盒子可以嵌套。 对于每个盒子,只能从上面进入,从下面走出,别无其他出入口。 盒图限制了随意的控制转移,保证了程序的良好结构。 |
3 | 伪代码 | 特点:借助于程序语言的语法结构和自然语言叙述,使算法具有良好的结构又不拘泥于程序语言的限制。易读易写,容易转换成程序。 |
4 | 决策表 | 是一种图形工具,将比较复杂的决策问题简洁、明确、一目了然地描述出来。 |
(四)流程图
(五)N/S盒图
(六)伪代码
(七)决策表
(八)算法效率
解决同一个问题总是存在多种算法,每个算法在计算机上执行时,都要消耗时间(CPU执行指令的时间)和使用存储空间资源。
设计算法时,需要考虑算法运行时所花费的时间和使用的空间,以时间复杂度和空间复杂度表示。
算法分析时,常采用算法的时空开销随n(问题规模)的增长趋势来表示其时空复杂度。
● 大O表示法
语句频度(frequency count)是指语句被重复执行的次数,对于某个基本语句,若在算法执行过程中被执行n次,则其语句频度为n。算法中各基本语句的语句频度之和表示算法的执行时间。