1.1 算法与程序
算法性质:
(1)输入
(2)输出
(3)确定性
(4)有限性
算法与程序的区别:程序是算法用某种程序设计语言的具体实现。程序可以不满足算法的有限性。
1.2 表达算法的抽象机制
算法从非形式的自然语言表达形式转换为形式化的高级语言是一个复杂的过程,仍然要做很多繁琐的事情,因而需要进一步抽象。
高级程序设计语言在数据、运算和控制三方面的表达中引入许多使之十分接近算法语言的概念和工具,具有抽象的表达算法的能力。
高级程序设计语言的主要好处:
(1)高级语言更接近算法语言,易学和掌握
(2)结构化程序设计的环境和工具,可读性好,可维护性强,可靠性高
(3)可移植性高,重用率高
(4)自动化程度高,开发周期短
顶层运算 :以数据模型中的数据变量作为运算对象
底层运算 :数据模型的表示, 运输的具体实现
将底层只通过接口为顶层服务,顶层只通过接口调用底层运输。 这个接口就是抽象数据类型。
抽象数据类型是算法设计的重要概念。它是算法的一个数据模型连同定义在该模型上并作为算法构建的一组运算。一方面,数据模型上的运算依赖于数据模型的具体表示;另一方面,数据模型的具体表示又反过来依赖于数据模型上定义的运算。
使用抽象数据类型带给算法设计的好处主要有:
(1)算法顶层设计与底层实现分离,有助于迅速开发程序原型,程序可靠性高
(2)算法设计与数据结构设计隔开,优化算法效率
(3) 数据模型和该模型上的运算在抽象数据类型中,反映它们之间内在的互相依赖和相互制约。
(4) 很好的可维护性
(5)算法模块化,抽象数据类型的表示和实现可以封装,便于移植和重用
(6) 为自顶向下逐步求精和模块化提供有效途径和工具
(7)算法结构清晰,层次分明
1.3 算法复杂性分析
算法复杂性的高低体现在运行算法所需要的计算机资源的多少上,所需要的资源越多,该算法的复杂性越高,反之,所需要的资源越少,该算法的复杂性低。
T(N,I) ,算法在一台抽象的计算机上运行所需要的时间
实际价值:时间复杂性
采用渐进分析