第二章 程序的灵魂--算法
程序 = 数据结构 + 算法
数据结构(data structure):把一些数据类型和这些数据类型的数整合成一种特定格式。
如:队列(queue),栈(stack),二叉树。
例:给定16个数,求区间最大值。
2 5 16 8 9 25 3 6 11 13 4 8 13 22 31 7
算法:解决问题的方法。
(所以以我的角度,我觉得:数据结构也是属于算法的)
/************************
扩展:算法的有趣的例子:
题1:一共有哈尔滨和北京两个城市可以选,小明一开始在哈尔滨,每天小明会选择留在自己当前的城市,或者飞到另一个城市,问:8天后小明在北京的方案数一共有几个?
设:
天数 0 1 2 3 4 5 6 7 8
城市 哈尔滨 北京 哈尔滨 北京 北京 哈尔滨 北京 哈尔滨 北京
算一种方案。
这里还用到了:矩阵快速乘法~
题2:求两个数的最大公约数。
题3:取火柴游戏。
***********************/
例2.1 求1×2×3×4×5
最原始的方法:
步骤一:先求1×2,得到结果2.
步骤二:将步骤一得到的乘积2再乘以3,得到结果6.
步骤三:将6再乘以4,得到24.
步骤四:将24再乘以5,得到结果120.这就是最后的结果。
缺点:太繁琐。
改进的算法:
S1:使p=1
S2:使i=2
S3:使p*i,乘积仍放在变量p中,可表示为:p*i→p
S4:使i的值加1,即i+1→i
S5:如果i不大于5,返回重新执行步骤3以及其后的步骤S4和S5;否则,算法结束。最后得到p的值就是5!的值。
怎样表示一个算法:
1.自然语言
2.流程图page.20 图2-3 的一般流程图
3.三种基本结构(顺序结构;选择结构;循环结构(蠕虫))和改进的流程图
4.伪代码
6.计算机语言(C语言...)
结构化程序设计方法:
(1)自顶向下;
(2)逐步细化;
(3)模块化设计;
(4)结构化编程。
课后题:
2.4(1)(7)
程序 = 数据结构 + 算法
数据结构(data structure):把一些数据类型和这些数据类型的数整合成一种特定格式。
如:队列(queue),栈(stack),二叉树。
例:给定16个数,求区间最大值。
2 5 16 8 9 25 3 6 11 13 4 8 13 22 31 7
算法:解决问题的方法。
(所以以我的角度,我觉得:数据结构也是属于算法的)
/************************
扩展:算法的有趣的例子:
题1:一共有哈尔滨和北京两个城市可以选,小明一开始在哈尔滨,每天小明会选择留在自己当前的城市,或者飞到另一个城市,问:8天后小明在北京的方案数一共有几个?
设:
天数 0 1 2 3 4 5 6 7 8
城市 哈尔滨 北京 哈尔滨 北京 北京 哈尔滨 北京 哈尔滨 北京
算一种方案。
这里还用到了:矩阵快速乘法~
题2:求两个数的最大公约数。
题3:取火柴游戏。
***********************/
例2.1 求1×2×3×4×5
最原始的方法:
步骤一:先求1×2,得到结果2.
步骤二:将步骤一得到的乘积2再乘以3,得到结果6.
步骤三:将6再乘以4,得到24.
步骤四:将24再乘以5,得到结果120.这就是最后的结果。
缺点:太繁琐。
改进的算法:
S1:使p=1
S2:使i=2
S3:使p*i,乘积仍放在变量p中,可表示为:p*i→p
S4:使i的值加1,即i+1→i
S5:如果i不大于5,返回重新执行步骤3以及其后的步骤S4和S5;否则,算法结束。最后得到p的值就是5!的值。
怎样表示一个算法:
1.自然语言
2.流程图page.20 图2-3 的一般流程图
3.三种基本结构(顺序结构;选择结构;循环结构(蠕虫))和改进的流程图
4.伪代码
6.计算机语言(C语言...)
结构化程序设计方法:
(1)自顶向下;
(2)逐步细化;
(3)模块化设计;
(4)结构化编程。
课后题:
2.4(1)(7)