第4章 计算学科中的核 心概念
DESCRIPTION
第4章 计算学科中的核 心概念. 李陶深 [email protected]. 第 4 章 计算学科中的核 心概念. 4.1 算法. 算法的历史简介. 公元 825 年,阿拉伯数学家阿科瓦里茨米( AlKhowarizmi) 写了著名的《波斯教科书》( Persian Textbook ), 书中概括了进行四则算术运算的法则。 “算法”( Algorithm) 一词就来源于这位数学家的名字。 后来,《韦氏新世界词典》将其定义为“ 解某种问题的任何专门的方法 ”。 而据考古学家发现,古巴比伦人在 求解代数方程 时,就已经采用了“算法”的思想。. - PowerPoint PPT PresentationTRANSCRIPT
第第 44 章 计算学科中的章 计算学科中的核核 心概念 心概念
4.1 4.1 算法算法
算法的历史简介算法的历史简介 公元公元 825825 年,阿拉伯数学家阿科瓦里茨米年,阿拉伯数学家阿科瓦里茨米
(( AlKhowarizmiAlKhowarizmi ))写了著名的《波斯教科写了著名的《波斯教科书》(书》( Persian TextbookPersian Textbook ),),书中概括了进行书中概括了进行四则算术运算的法则。四则算术运算的法则。 ““ 算法”(算法”( AlgorithmAlgorithm ))一词就来源于这位数学一词就来源于这位数学
家的名字。家的名字。 后来,《韦氏新世界词典》将其定义为“后来,《韦氏新世界词典》将其定义为“解某解某
种问题的任何专门的方法种问题的任何专门的方法”。”。 而据考古学家发现,古巴比伦人在而据考古学家发现,古巴比伦人在求解代数方求解代数方
程程时,就已经采用了“算法”的思想。 时,就已经采用了“算法”的思想。
丢番图方程的可解性问题丢番图方程的可解性问题 古希腊数学家丢番图(古希腊数学家丢番图( DiophantusDiophantus )):代数:代数
学之父学之父 在《算术》(在《算术》( ArithmeticaArithmetica ))一书中提出了有关一书中提出了有关两两
个或多个变量整数系数方程个或多个变量整数系数方程的有理数解问题。的有理数解问题。 对于具有对于具有整数系数的不定方程整数系数的不定方程,如果只考虑其,如果只考虑其整数整数
解解,这类方程就叫做丢番图方程。,这类方程就叫做丢番图方程。
““ 丢番图方程可解性问题”的实质为:能否写丢番图方程可解性问题”的实质为:能否写出一个可以判定出一个可以判定任意丢番图方程是否可解任意丢番图方程是否可解的算的算法? 法?
一个未知数的线性丢番图方程的解一个未知数的线性丢番图方程的解
axax==bb ,,只要只要 aa 能整除能整除 bb ,,就可判定其有就可判定其有整数解,该整数解即整数解,该整数解即 bb//aa 。。
两个未知数的线性丢番图方程两个未知数的线性丢番图方程 的解 的解
axax++byby==cc ,,先求出先求出 aa 和和 bb 的最大公因子的最大公因子 dd ,,若若 dd 能整除能整除 cc ,,则该方程有解(整数解)。 则该方程有解(整数解)。
问:方程问:方程 1313xx+26+26yy=52=52 有无整数解?有无整数解? 答:答: 1313 和和 2626 的最大公因子是的最大公因子是 1313 ,, 1313 又可整除又可整除 55
22 ,故该方程有整数解(如,故该方程有整数解(如 xx=2=2 ,, yy=1=1 即方程的即方程的解)。解)。
例例 4.2 4.2 问:方程问:方程 22xx+4+4yy=15=15 有无整数解?有无整数解? 答:答: 22 和和 44 的最大公因子是的最大公因子是 22 ,, 22 不能整除不能整除 1515 ,,
故该方程无整数解。故该方程无整数解。
两个未知数的线性丢番图方程两个未知数的线性丢番图方程 的解: 的解:欧几里德算法欧几里德算法
给定两个正整数给定两个正整数 mm 和和 nn ,,求它们的最大公因子,求它们的最大公因子,即能同时整除即能同时整除 mm 和和 nn 的最大正整数。的最大正整数。
步骤如下:步骤如下: (( 11 )以)以 nn 除除 mm ,,并令所得余数为并令所得余数为 rr (( rr 必小于必小于
nn );); (( 22 ))若若 rr=0=0 ,,算法结束,输出结果算法结束,输出结果 nn ;;否则,继否则,继
续步骤(续步骤( 33 );); (( 33 )将)将 nn 置换为置换为 mm ,, rr 置换为置换为 nn ,,并返回步骤并返回步骤
(( 11 )继续进行。)继续进行。
例例 4.3 4.3 设设 mm=56=56 ,, nn=32=32 ,,求求 mm 、、 nn 的最大公因子的最大公因子
算法如下算法如下 ::
(( 11 )) 3232 除除 5656 余数为余数为 2424 ;;(( 22 )) 2424 除除 3232 余数为余数为 88 ;;(( 33 )) 88 除除 2424 余数为余数为 00 ,算法结束,输出结果,算法结束,输出结果 88 。。答:答: mm 、、 nn 的最大公因子为的最大公因子为 88 。。 欧几里德算法既表述了一个数的求解过程,欧几里德算法既表述了一个数的求解过程,
又表述了一个判定过程,该过程可以判定“又表述了一个判定过程,该过程可以判定“ mm 和和 nn是互质的”(即除是互质的”(即除 11 以外,以外, mm 和和 nn 没有公因子)没有公因子)这个命题的真假。这个命题的真假。
算法算法
算法的定义和特征算法的定义和特征
11 .算法的非形式化定义.算法的非形式化定义
一个算法,就是一个有穷规则的集合,其中之一个算法,就是一个有穷规则的集合,其中之规则规定了一个解决某一特定类型问题的运算规则规定了一个解决某一特定类型问题的运算序列。序列。
算法的定义和特征算法的定义和特征
22 .算法的重要特性.算法的重要特性 有穷性:一个算法在执行有穷步之后必须结束。有穷性:一个算法在执行有穷步之后必须结束。 确定性:算法的每一个步骤必须要确切地定义。确定性:算法的每一个步骤必须要确切地定义。
即算法中所有有待执行的动作必须严格而不含即算法中所有有待执行的动作必须严格而不含混地进行规定,不能有歧义性。混地进行规定,不能有歧义性。
输入:算法有零个或多个的输入,即在算法开输入:算法有零个或多个的输入,即在算法开始之前,对算法最初给出的量。始之前,对算法最初给出的量。
输出:算法有一个或多个的输出,即与输入有输出:算法有一个或多个的输出,即与输入有某个特定关系的量,简单地说就是算法的最终某个特定关系的量,简单地说就是算法的最终结果。结果。
能行性:算法中有待执行的运算和操作必须是能行性:算法中有待执行的运算和操作必须是相当基本的,相当基本的,
33 .算法的形式化定义.算法的形式化定义
算法是一个四元组,即(算法是一个四元组,即( QQ ,, II ,, ΩΩ ,, FF )。)。其中:其中:(( 11 )) QQ 是一个包含子集是一个包含子集 II 和和 ΩΩ 的集合,它表示的集合,它表示
计算的状态;计算的状态;(( 22 )) II 表示计算的输入集合;表示计算的输入集合;(( 33 )) ΩΩ 表示计算的输出集合;表示计算的输出集合;(( 44 )) FF 表示计算的规则,它是一个由表示计算的规则,它是一个由 QQ 到它自到它自身的函数,且具有自反性,即对于任何一个元身的函数,且具有自反性,即对于任何一个元素素 qq Q∈Q∈ ,,有有 FF((qq)=)=qq 。。
算法算法
算法实例算法实例
例例 4.4 4.4 求求 1+2+3+1+2+3+…………+100+100
设变量设变量 XX 表示加数,表示加数, YY 表示被加数,用自然语言表示被加数,用自然语言将算法描述如下:将算法描述如下:
(( 11 )将)将 11 赋值给赋值给 XX ;;(( 22 ))将将 22 赋值给赋值给 YY ;;(( 33 ))将将 XX 与与 YY 相加,结果存放在相加,结果存放在 XX 中;中;(( 44 )将)将 YY 加加 11 ,结果存放在,结果存放在 YY 中;中;(( 55 )若)若 YY 小于或等于小于或等于 100100 ,转到步骤(,转到步骤( 33 )继)继
续执行;否则,算法结束,结果为续执行;否则,算法结束,结果为 XX 。。
例例 4.5 4.5 求解调和级数求解调和级数
设变量设变量 XX 表示累加和,变量表示累加和,变量 II 表示循环的次数,表示循环的次数,自然语言描述算法如下:自然语言描述算法如下:
(( 11 )将)将 00 赋值给赋值给 XX ;;(( 22 ))将将 11 赋值给赋值给 II ;;(( 33 ))将将 XX 与与 1/1/II 相加,然后把结果存入相加,然后把结果存入 XX ;;(( 44 ))将将 II 加加 11 ;; (( 55 )若)若 II 大于等于大于等于 NN ,,算法结束,结果为算法结束,结果为
XX ;;否则转到步骤(否则转到步骤( 33 )继续执行。 )继续执行。
nH n
1
3
1
2
1
1
1
例例 4.6 4.6 求解斐波那契数求解斐波那契数
00 ,, 11 ,, 11 ,, 22 ,, 33 ,, 55 ,, 88 ,, 1313 ,, 2121 ,, 3434 ,,… (… ( 11 ))
来 源 于来 源 于 12021202 年 意 大利数 学 家斐波那契年 意 大利数 学 家斐波那契(( L.P.FibonacciL.P.Fibonacci )) 在其《珠算之书》在其《珠算之书》(( Liber AbaciLiber Abaci ))中提出的一个“兔子问中提出的一个“兔子问题”:题”: 假设一对刚出生的兔子一个月后就能长大,再过一假设一对刚出生的兔子一个月后就能长大,再过一
个月就能生下一对兔子,并且此后每个月都能生一个月就能生下一对兔子,并且此后每个月都能生一对兔子,且新生的兔子在第二个月后也是每个月生对兔子,且新生的兔子在第二个月后也是每个月生一对兔子。一对兔子。
问:一对兔子一年内可繁殖成多少对兔子?问:一对兔子一年内可繁殖成多少对兔子?
在序列(在序列( 11 )中,每个数都是它的前两个数)中,每个数都是它的前两个数之和,之和, FFnn 表示这个序列的第表示这个序列的第 nn 个数,该序列个数,该序列可以形式化的定义为: 可以形式化的定义为: FF00=0=0 ,, FF11=1=1 ,, FFnn+2+2==FFnn+1+1++FFnn ,, nn≥0≥0
斐波那契数列还是一个关于加法算法的典型斐波那契数列还是一个关于加法算法的典型实例。实例。
设变量设变量 XX 表示前一个数的值,即定义中的表示前一个数的值,即定义中的FFnn ,,变量变量 YY 表示当前数的值,即定义中的表示当前数的值,即定义中的
FFnn+1+1 ,,变量变量 ZZ 表示后一个数的值,即定义中的表示后一个数的值,即定义中的
FFnn+2+2 。。那么求解问题的自然语言描述如下: 那么求解问题的自然语言描述如下:
算法设计算法设计(( 11 ))如果如果 =0=0 ,那么将,那么将 00 赋值给赋值给 YY ,,并输出并输出 YY ,,转步骤转步骤
(( 1111 )继续执行;)继续执行;(( 22 )将)将 00赋给赋给 XX ,,将将 11赋值给赋值给 YY ;;(( 33 ))输出输出 XX 、、 YY ;;(( 44 ))将将 11赋值给赋值给 II ;;(( 55 ))如果如果 II 大于大于 -1-1 ,则转到步骤(,则转到步骤( 1111 ),否则继续执),否则继续执
行;行;(( 66 )将)将 XX 和和 YY 的和赋值给的和赋值给 ZZ ;;(( 77 ))将将 YY赋值给赋值给 XX ;;(( 88 ))将将 ZZ赋值给赋值给 YY ;;(( 99 ))将将 YY 输出;输出;(( 1010 )将)将 II加加 11 ,转步骤(,转步骤( 55 )继续执行;)继续执行;(( 1111 )算法结束。)算法结束。
算法算法
算法的表示方法算法的表示方法
原语原语
一个算法的表达需要使用一些语言形式一个算法的表达需要使用一些语言形式 自然语言“自然语言“ Visiting grandchildren can be nerve-Visiting grandchildren can be nerve-
racking”,racking”, 可能即意味着孙子孙女导致了很多问题,可能即意味着孙子孙女导致了很多问题,也表示去看他们可能会有问题也表示去看他们可能会有问题
图形语言:很少人能够根据折纸图给出的步骤成图形语言:很少人能够根据折纸图给出的步骤成功地叠出一只鸟来,但一个专门学习过折纸的学功地叠出一只鸟来,但一个专门学习过折纸的学生可以轻松完成生可以轻松完成
当用来描述算法的语言并没有被准确定义或当用来描述算法的语言并没有被准确定义或者没有给予足够信息的时候,交流就会产生者没有给予足够信息的时候,交流就会产生问题问题
原语原语 通过建立一个可以描述算法的意义明确的基本通过建立一个可以描述算法的意义明确的基本块(块(原语原语)集合,计算机科学即就可以解决上)集合,计算机科学即就可以解决上述的勾通问题述的勾通问题
原语描述算法需要建立一个统一的细节描述级原语描述算法需要建立一个统一的细节描述级别,原语连同一组表达了原语如何表达复杂的别,原语连同一组表达了原语如何表达复杂的想法的规定组成了一种程序设计语言想法的规定组成了一种程序设计语言
组成组成 语法:原语的符号表示语法:原语的符号表示 语义:表达了原语的意义语义:表达了原语的意义
11 .自然语言.自然语言
缺点缺点 由于自然语言的歧义性,容易导致算法执行的由于自然语言的歧义性,容易导致算法执行的
不确定性;不确定性; 自然语言的语句一般太长,从而导致了用自然自然语言的语句一般太长,从而导致了用自然语言描述的算法太长;语言描述的算法太长;
由于自然语言表示的串行性,因此,当一个算由于自然语言表示的串行性,因此,当一个算法中循环和分支较多时就很难清晰地表示出来;法中循环和分支较多时就很难清晰地表示出来;
自然语言表示的算法不便翻译成计算机程序设自然语言表示的算法不便翻译成计算机程序设计语言理解的语言。 计语言理解的语言。
22 .流程图.流程图 它 采 用 美 国 国 家 标 准 化 协 会它 采 用 美 国 国 家 标 准 化 协 会
ANSIANSI (( American National Standard American National Standard InstituteInstitute ))规定的一组图形符号来表示算法。规定的一组图形符号来表示算法。 流程图可以很方便地表示顺序、选择和循环结构,流程图可以很方便地表示顺序、选择和循环结构,
而任何程序的逻辑结构都可以用顺序、选择和循而任何程序的逻辑结构都可以用顺序、选择和循环结构来表示,环结构来表示,
流程图可以表示任何程序的逻辑结构。流程图可以表示任何程序的逻辑结构。 用流程图表示的算法不依赖于任何具体的计算机用流程图表示的算法不依赖于任何具体的计算机
和计算机程序设计语言,和计算机程序设计语言,
(( 11 )求解例)求解例 4.44.4 的算法流程图的算法流程图
X=1
Y=2
X=X+Y
Y=Y+1
Y>100
结 束
开 始
Y
N
(( 22 )求解例)求解例 4.54.5 的算法流程图的算法流程图 开 始
X=0
I=1
X=X+1/I
I=I+1
I>=N
结 束
N
Y
(( 33 )求解例)求解例 4.64.6 的算法流程图的算法流程图
开 始
n = 0
X=0,Y=1
Print X,Y
I=1
I>n-1
Z=X+Y
X=Y
Y=Z
Print Y
I=I+1
结 束
Y=0
Print Y
Y
N
Y
N
33 .伪代码——.伪代码——(( 11 )求解例)求解例 4.44.4 的伪代码算法描述:的伪代码算法描述:
BEGIN(BEGIN( 算法开始算法开始 )) 11 X X
22 Y Y
whilewhile (( Y<=100Y<=100 )){{
X+Y X+Y XX
Y+1 Y+1 YY
}}
Print XPrint X
ENDEND ((算法结束)算法结束)
(( 22 )求解例)求解例 4.54.5 的伪代码算法描述:的伪代码算法描述:
BEGINBEGIN ((算法开始)算法开始)0 0 X X
1 1 I I
dodo
{{
X+1/I X+1/I X X
I+1 I+1 I I
}while(I>=n)}while(I>=n)
ENDEND ((算法结束)算法结束)
(( 33 )例)例 4.64.6 的伪代码算法描述:的伪代码算法描述:
BEGINBEGIN
if n = =0if n = =0
{{
0 0 Y Y
Print YPrint Y
}} elseelse
{{
0 0 X X
1 1 Y Y Print XPrint X ,, YY
for(i=1;i<=n-1;i++)for(i=1;i<=n-1;i++){{
X+YZX+YZYXYXZYZYPrint YPrint Y
}}}}
ENDEND
44 .计算机程序设计语言.计算机程序设计语言 计算机程序设计语言描述的算法(程序)是计算机程序设计语言描述的算法(程序)是清晰的、简明的,最终也能由计算机处理的。清晰的、简明的,最终也能由计算机处理的。
缺点:缺点: 算法的基本逻辑流程难于遵循。与自然语言一样,算法的基本逻辑流程难于遵循。与自然语言一样,
程序设计语言也是基于串行的程序设计语言也是基于串行的 用特定程序设计语言编写的算法限制了与他人的用特定程序设计语言编写的算法限制了与他人的交流,不利于问题的解决;交流,不利于问题的解决;
要花费大量的时间去熟悉和掌握某种特定的程序要花费大量的时间去熟悉和掌握某种特定的程序设计语言;设计语言;
要求描述计算步骤的细节,而忽视算法的本质。要求描述计算步骤的细节,而忽视算法的本质。
例例 4.44.4 的计算机程序设计语言(的计算机程序设计语言( CC 语言)的算法描述:语言)的算法描述: main()main(){{ int X,Y;int X,Y; X=1;X=1; Y=2;Y=2; while(Y<=100)while(Y<=100) {{ X=X+Y;X=X+Y; Y=Y+1;Y=Y+1; };}; printf("%d",X);printf("%d",X);}}
例例 4.54.5 的计算机程序设计语言(的计算机程序设计语言( CC 语言)的算法描述语言)的算法描述 main()main()
{{
int n;int n;
float X,I;float X,I;
printf("Please input n:");printf("Please input n:");
scanf("%d",&n);scanf("%d",&n);
X=0;X=0;
I=1;I=1;
dodo {{ X=X+1/I;X=X+1/I; I=I+1;I=I+1; }while(I<=n);}while(I<=n); printf("\n%f",X);printf("\n%f",X); }}
算法算法
算法分析算法分析
(( 11 )算法的时间复杂度;)算法的时间复杂度; 用用 TT((nn)) 表示,表示, nn 表示问题规模的大小。表示问题规模的大小。 使用一个记号使用一个记号
OrderOrder ((数量级)的第一个字母,数量级)的第一个字母, 允许使用“允许使用“ =”=” 代替“≈”。如代替“≈”。如 nn22++nn+1=+1=((nn22))
设设 ff((nn)) 是一个关于正整数是一个关于正整数 nn 的函数,若存在一的函数,若存在一个 正 整 数个 正 整 数 nn00 和 一 个 常 数和 一 个 常 数 CC ,, 当当 nn≥≥nn00
时,∣时,∣ TT((nn) ≤ C ∣ ∣) ≤ C ∣ ∣ ff((nn)∣)∣ 均成立,则称均成立,则称 ff((nn)) 为为TT((nn)) 的同数量级的函数。的同数量级的函数。 算法时间复杂度算法时间复杂度 TT((nn)) 可表示为:可表示为:
TT((nn)=)= ((ff((nn))))
常见的大常见的大表示形式有:表示形式有:
(1) (1) :称为常数级;:称为常数级; (log(lognn)) : 称为对数级;: 称为对数级; ((nn) ) :称为线性级;:称为线性级; ((nncc) ) :称为多项式级;:称为多项式级; (c(cnn) ) :称为指数级;:称为指数级; ((nn!) !) :称为阶乘级。:称为阶乘级。
算法的空间复杂度算法的空间复杂度
指算法在执行过程中所占存储空间的大小,指算法在执行过程中所占存储空间的大小, 用用 SS((nn)) 表示,表示, SS 为英文单词为英文单词 SpaceSpace 的第一个的第一个
字母。与算法的时间复杂度相同字母。与算法的时间复杂度相同 算法的空间复杂度算法的空间复杂度 SS((nn)) 也可表示为:也可表示为: SS((nn)=)= (g((g(nn)))) 。 。
算法算法
算法的研究算法的研究
算法算法 算法:定义一向工作如何完成的步骤的集合算法:定义一向工作如何完成的步骤的集合
在一台机器可以完成一个任务之前,必须找到完在一台机器可以完成一个任务之前,必须找到完成这个任务的算法并且用与机器兼容的方式来描成这个任务的算法并且用与机器兼容的方式来描述述
一个与机器兼容的算法的描述——程序一个与机器兼容的算法的描述——程序 算法的研究开始是作为数学的一个学科算法的研究开始是作为数学的一个学科
目标:找到描述特定类型问题是如何被解决的指目标:找到描述特定类型问题是如何被解决的指令的集合,如令的集合,如 EuclideanEuclidean 算法算法
一旦一个完成任务的算法被找到,任务的实现就一旦一个完成任务的算法被找到,任务的实现就不再需要对算法原理的理解,任务的实现仅仅是不再需要对算法原理的理解,任务的实现仅仅是遵循算法的只是过程遵循算法的只是过程
现有的解决问题需要的智慧被编码进了算法现有的解决问题需要的智慧被编码进了算法
算法转化为智慧算法转化为智慧 通过使用算法来得到并转化智慧,我们才可以通过使用算法来得到并转化智慧,我们才可以
构建起可以表现构建起可以表现智慧行为的机器智慧行为的机器。。 机器表现的智能等级受到通过算法转化的智慧所限机器表现的智能等级受到通过算法转化的智慧所限
制制 如果没有解决问题的算法,意味着问题的解决方案如果没有解决问题的算法,意味着问题的解决方案
超出了机器的能力范围超出了机器的能力范围 算法的开发就成了计算机领域的一个主要目标算法的开发就成了计算机领域的一个主要目标
如何找到算法——一个十分接近于寻找通用问题解如何找到算法——一个十分接近于寻找通用问题解决方案决方案
描述这个算法——转变为一个清晰的指令的集合描述这个算法——转变为一个清晰的指令的集合(程序设计语言描述)(程序设计语言描述)
计算机技术别用于复杂问题(大型软件系统)计算机技术别用于复杂问题(大型软件系统)
不仅仅包括实现任务的单个算法的开发不仅仅包括实现任务的单个算法的开发 还要求对组件之间的交互进行设计还要求对组件之间的交互进行设计 软件工程:借鉴了工程领域、项目管理领域、人软件工程:借鉴了工程领域、项目管理领域、人力资源管理以及程序语言设计领域的经验力资源管理以及程序语言设计领域的经验
执行算法的机器的设计和实现执行算法的机器的设计和实现 数据的存储数据的存储
数据的操作数据的操作
体系结构中涵盖了对现今技术的讨论体系结构中涵盖了对现今技术的讨论 我们的目标不是去熟知类似当今体系结构是我们的目标不是去熟知类似当今体系结构是
如何用电路来实现这样的细节问题,那将会如何用电路来实现这样的细节问题,那将会导致过分陷入电子工程学科导致过分陷入电子工程学科
正如昨天的齿轮驱动的计算机让位于电子设正如昨天的齿轮驱动的计算机让位于电子设备一样,今天的电子技术也许很快也被其它备一样,今天的电子技术也许很快也被其它的技术所取代的技术所取代
理想情况下理想情况下 希望计算机的体系结构是我们的有关算法过程希望计算机的体系结构是我们的有关算法过程知识的延续,并且不应该被技术能力酸限制知识的延续,并且不应该被技术能力酸限制 使我们的算法知识在当代机器体系结构的发使我们的算法知识在当代机器体系结构的发展背后起推动作用,而不仅仅是从技术的要展背后起推动作用,而不仅仅是从技术的要求触发来解顶机器的设计求触发来解顶机器的设计
构建允许使用多个指令序列来代替算法的机器构建允许使用多个指令序列来代替算法的机器是可能的是可能的 这些指令被同时执行或者作为这些指令被同时执行或者作为
机器于外部世界的接口的设计于计算机的设计紧密相连机器于外部世界的接口的设计于计算机的设计紧密相连
算法是如何机器中的?算法是如何机器中的? 机器是如何被告知执行的是哪一个算法?机器是如何被告知执行的是哪一个算法?
计算理论计算理论 对解决越来越复杂问题的算法的研究对解决越来越复杂问题的算法的研究
导致了算法过程的最终限制问题导致了算法过程的最终限制问题 如果没有算法可以解决这个问题,那么算法是不如果没有算法可以解决这个问题,那么算法是不
能被机器所解决的,机器仅仅可以解决在算法上能被机器所解决的,机器仅仅可以解决在算法上可解的问题可解的问题
GodelGodel 的不完全定理阐述了的不完全定理阐述了 在任何传统算术领域的数学理论中,有些是既不在任何传统算术领域的数学理论中,有些是既不
能证明有不能被推翻的能证明有不能被推翻的 任何对算术系统的彻底研究都超出了算法的能力任何对算术系统的彻底研究都超出了算法的能力 对算法的限制的研究欲望似的数学家们设计抽象对算法的限制的研究欲望似的数学家们设计抽象
的机器来执行算法,并在理论上研究这些假想机的机器来执行算法,并在理论上研究这些假想机器的能力。器的能力。
4.24.2 数据结构数据结构::一类定性数学模型一类定性数学模型
4.2.1 4.2.1 数据结构的基本概念数据结构的基本概念
数据结构的基本概念数据结构的基本概念 组成:数据结构是一类定性的数学模型,组成:数据结构是一类定性的数学模型,
它由以下它由以下 33 部分组成部分组成 逻辑结构逻辑结构 存储结构(或称物理结构)存储结构(或称物理结构) 运算运算
数据逻辑结构的形式化定义 数据逻辑结构的形式化定义 DSDS=<=<DD ,, RR>>
其中:其中: DD 表示数据的集合;表示数据的集合; RR 表示数据表示数据 DD 上关系的集合上关系的集合。。
数据的存储结构数据的存储结构 数据的存储结构是指在反映数据逻辑关系的原数据的存储结构是指在反映数据逻辑关系的原
则下,数据在存储器中的存储方式。 则下,数据在存储器中的存储方式。 顺序存储结构:借助元素在存储器中的相对位置来顺序存储结构:借助元素在存储器中的相对位置来
表示数据元素的逻辑关系。 表示数据元素的逻辑关系。 链式存储结构:借助指针来表示数据元素之间的逻链式存储结构:借助指针来表示数据元素之间的逻辑关系,通常在数据元素上增加一个或多个指针类辑关系,通常在数据元素上增加一个或多个指针类型的属性来实现这种表示方式。 型的属性来实现这种表示方式。
数据结构的基本运算内容数据结构的基本运算内容 建立数据结构;建立数据结构; 清除数据结构;清除数据结构; 插入数据元素;插入数据元素; 删除数据元素;删除数据元素; 更新数据元素;更新数据元素; 查找数据元素;查找数据元素; 按序重新排列;按序重新排列; 判定某个数据结构是否为空,或是否已达到判定某个数据结构是否为空,或是否已达到
最大允许的容量;最大允许的容量; 统计数据元素的个数。统计数据元素的个数。
数据结构数据结构::一类定性数学模型一类定性数学模型
4.2.2 4.2.2 常用的几种数据结构常用的几种数据结构
线性表线性表 线性表是线性表是 nn 个数据元素的有限序列,即个数据元素的有限序列,即
(( XX[1][1] ,, XX[2][2] ,, XX[3][3] …, ,…, , XX[[ii]] …, ,…, , XX[[nn]] )) 基本操作——插入、删除和存取数据元素基本操作——插入、删除和存取数据元素 几种特殊的线性表几种特殊的线性表
后进先出(后进先出( Last In First OutLast In First Out ,,简称简称 LIFOLIFO ))的线性表。的线性表。
先进先出(先进先出( First In First OutFirst In First Out ,,简称简称FIFOFIFO ))的线性表。 的线性表。
限定所有插入、删除和存取都在表的两端进限定所有插入、删除和存取都在表的两端进行的线性表。行的线性表。
数组数组
线性表的推广形式之一。线性表的推广形式之一。 如在一个如在一个 mmnn 的二维数组中,每个元素的二维数组中,每个元素
AA[[ii,,jj]] 都分别属于两个线性表,即都分别属于两个线性表,即
(( AA[[ii,1],1] ,, AA[[ii,2],2] …, ,…, , AA[[ii,,nn]] ))
和(和( AA[1,[1,jj]] ,, AA[2,[2,jj]] …, ,…, , AA[[mm,,jj]] )。 )。
树(树( TreeTree ))
由由 nn (( nn≥0≥0 ))个结点组成的有限集合。若个结点组成的有限集合。若nn=0=0 ,,则称为空树,任何一个非空树均满足则称为空树,任何一个非空树均满足以下两个条件: 以下两个条件: 仅有一个称为根的结点; 仅有一个称为根的结点; 当当 nn>0>0 时,其余结点可分为时,其余结点可分为 mm (( mm≥0≥0 ))
个互不相交的有限集合,其中每个集合又个互不相交的有限集合,其中每个集合又是一棵树,并称为根的子树。是一棵树,并称为根的子树。
上图的树有上图的树有 1212 个结点,个结点, AA 是根结点,该树又可再分为是根结点,该树又可再分为若干不相交的子树,如若干不相交的子树,如T1={BT1={B ,, EE ,, FF ,, K}K} ,, T2={CT2={C ,, G}G} ,, T3={DT3={D ,, HH ,,II ,, JJ ,, L}L} 等。图等。图 4.44.4 所示的树中有所示的树中有 1212 个结点,个结点, AA 是根是根结点,该树又可再分为若干不相交的子树,如结点,该树又可再分为若干不相交的子树,如T1={BT1={B ,, EE ,, FF ,, K}K} ,, T2={CT2={C ,, G}G} ,, T3={DT3={D ,, HH ,,II ,, JJ ,, L}L} 等。等。
C
A
B D
E F G H I J
K L
二叉树二叉树
nn (( nn≥0≥0 ))个结点组成的有限集合,它或者个结点组成的有限集合,它或者是空集(是空集( nn00 ),),或者由一个结点及两棵互或者由一个结点及两棵互不相交的子树组成,且这两个子树有左、右不相交的子树组成,且这两个子树有左、右之分,其次序不能任意颠倒。之分,其次序不能任意颠倒。
图图 由结点和连接这些结点的边所组成的集合。由结点和连接这些结点的边所组成的集合。 图的形式化定义为:图的形式化定义为: GG=<=<VV ,, EE> >
其中:其中: VV 是一个非空结点的集合;是一个非空结点的集合; EE 是连结结点的边的集合。 是连结结点的边的集合。
例 例 GG=<=<VV ,, EE>>
其中其中 VV={={AA ,, BB ,, CC ,, DD}} ,, EE={(={(AA ,, BB)) ,, ((AA ,, CC)) ,, ((BB ,, DD)) ,,((BB ,, CC)) , , ((DD ,, CC)) ,, ((AA ,, DD)} )}
4.3 4.3 程序程序
4.3.1 4.3.1 算法算法 ++ 数据结构数据结构 == 程序程序
概念概念 从广义上讲,程序可以认为是一种行动方案或从广义上讲,程序可以认为是一种行动方案或工作步骤。例如:工作步骤。例如: 某个会议的日程安排某个会议的日程安排 一条旅游路线的设计一条旅游路线的设计 手工小制作的说明书等手工小制作的说明书等
计算机程序:一种处理事务的时间顺序和处理计算机程序:一种处理事务的时间顺序和处理步骤。步骤。 组成计算机程序的基本单位是组成计算机程序的基本单位是指令指令 计算机程序就是按照工作步骤事先编排好的、计算机程序就是按照工作步骤事先编排好的、
具有特殊功能的具有特殊功能的指令序列指令序列。。
一个程序具有一个单一的、不可分的结构,它规定了某个数据结构上的一个算法。瑞士著名计算机科学家尼可莱 · 沃思( Nikiklaus Wirth )在 1976 年曾提出这样一个公式:
算法 + 数据结构 = 程序
由此看来,我们前面提到的算法和数据结构是计算机程序的两个最基本的概念。算法是程序的核心,它在程序编制、软件开发,乃至在整个计算机科学中都占据重要地位。数据结构是加工的对象,一个程序要进行计算或处理总是以某些数据为对象的,而要设计一个好的程序就需将这些松散的数据按某种要求组成一种数据结构。然而,随着计算机科学的发展,人们现在已经意识到程序除了以上两个主要要素外,还应包括程序的设计方法以及相应的语言工具和计算环境。
软件软件 软件是与程序密切相关的一个概念,在计算机软件是与程序密切相关的一个概念,在计算机
发展的初期,硬件设计和生产是主要问题,那发展的初期,硬件设计和生产是主要问题,那时的软件就是程序。后来,随着计算技术的发时的软件就是程序。后来,随着计算技术的发展,传统软件的生产方式已不适应发展的需要,展,传统软件的生产方式已不适应发展的需要,于是人们将工程学的基本原理和方法引入软件于是人们将工程学的基本原理和方法引入软件设计和生产中。设计和生产中。
现在计算机软件一般指计算机系统中的程序及现在计算机软件一般指计算机系统中的程序及其文档,也可以指在研究、开发、维护,以及其文档,也可以指在研究、开发、维护,以及使用上述含义下的软件所涉及的理论、方法、使用上述含义下的软件所涉及的理论、方法、技术所构成的分支学科。技术所构成的分支学科。
软件软件
软件一般分为软件一般分为 33 类类 系统软件:是计算机系统中最靠近硬件层次的软件。系统软件:是计算机系统中最靠近硬件层次的软件。
如操作系统、编译程序等。如操作系统、编译程序等。 支撑软件:是支撑其他软件的开发与维护的软件。支撑软件:是支撑其他软件的开发与维护的软件。
如数据库管理系统、网络软件、各种接口软件和开如数据库管理系统、网络软件、各种接口软件和开发工具等。发工具等。
应用软件:是特定应用领域的专用软件。如商业会应用软件:是特定应用领域的专用软件。如商业会计软件、教学软件等。计软件、教学软件等。
硬件硬件 计算机硬件是构成计算机系统的所有物理器件、计算机硬件是构成计算机系统的所有物理器件、部件、设备,以及相应的工作原理与设计、制部件、设备,以及相应的工作原理与设计、制造、检测等技术的总称。造、检测等技术的总称。
广义的硬件包含硬件本身及其工程技术两部分。广义的硬件包含硬件本身及其工程技术两部分。其中:其中: 计算机系统的物理元器件包括:集成电路、印制电计算机系统的物理元器件包括:集成电路、印制电路板,以及其他磁性元件、电子元件等。路板,以及其他磁性元件、电子元件等。
计算机系统的部件和设备包括:控制器、运算器、计算机系统的部件和设备包括:控制器、运算器、存储器、输入输出设备、电源等。 存储器、输入输出设备、电源等。
硬件硬件 硬件工程技术包括:印制电路板制造、高密度硬件工程技术包括:印制电路板制造、高密度
组装、抗环境干扰、抗恶劣环境破坏等技术,组装、抗环境干扰、抗恶劣环境破坏等技术,以及在设计和制造过程中为提高计算机性能所以及在设计和制造过程中为提高计算机性能所采取的措施等。采取的措施等。
计算机就是由计算机硬件和计算机软件组成的。计算机就是由计算机硬件和计算机软件组成的。硬件是计算机的“躯体”,软件是计算机的硬件是计算机的“躯体”,软件是计算机的“灵魂”。 “灵魂”。
4.4.4 4 CC1991CC1991 报告提取的报告提取的核心概念核心概念
核心概念是核心概念是 CC1991CC1991 报告首次提出的,是具有报告首次提出的,是具有普遍性、持久性的重要思想、原则和方法。它普遍性、持久性的重要思想、原则和方法。它的基本特征有: 的基本特征有: 在学科中多处出现;在学科中多处出现; 在各分支领域及抽象、理论和设计的各个层在各分支领域及抽象、理论和设计的各个层面上都有很多示例;面上都有很多示例;
在技术上有高度的独立性;在技术上有高度的独立性; 一般都在数学、科学和工程中出现。一般都在数学、科学和工程中出现。
1. 1. 绑定绑定( Binding )
绑定指的是通过将一个对象(或事物)与其某绑定指的是通过将一个对象(或事物)与其某种属性相联系,从而使抽象的概念具体化的过种属性相联系,从而使抽象的概念具体化的过程。例如:将一个进程与一个处理机,一个变程。例如:将一个进程与一个处理机,一个变量与其类型或值分别联系起来。这种联系的建量与其类型或值分别联系起来。这种联系的建立,实际上就是建立了某种约束。立,实际上就是建立了某种约束。
2. 2. 大问题的复杂性大问题的复杂性( Complexity of Large Problems )
大问题的复杂性是指随着问题规模的增长而使大问题的复杂性是指随着问题规模的增长而使问题的复杂性呈非线性增加的效应。这种非线问题的复杂性呈非线性增加的效应。这种非线性增加的效应是区分和选择各种现有方法和技性增加的效应是区分和选择各种现有方法和技术的重要因素。 术的重要因素。
3. 3. 概念和形式模型概念和形式模型( Conceptual and Format Models )
概念和形式模型是对一个想法或问题进行形概念和形式模型是对一个想法或问题进行形式化、特征化、可视化思维的方法。抽象数式化、特征化、可视化思维的方法。抽象数据类型、语义数据类型以及指定系统的图形据类型、语义数据类型以及指定系统的图形语言,如数据流图和语言,如数据流图和 E-RE-R 图等都属于概念模图等都属于概念模型。而逻辑、开关理论和计算理论中的模型型。而逻辑、开关理论和计算理论中的模型大都属于形式模型。概念模型和形式模型以大都属于形式模型。概念模型和形式模型以及形式证明是将计算学科各分支统一起来的及形式证明是将计算学科各分支统一起来的重要的核心概念。重要的核心概念。
4.4. 一致性和完备性一致性和完备性( Consistency and Completeness ) 一致性包括用于形式说明的一组公理的一致性、一致性包括用于形式说明的一组公理的一致性、事实和理论的一致性,以及一种语言或接口设事实和理论的一致性,以及一种语言或接口设计的内部一致性。计的内部一致性。
完备性包括给出的一组公理,使其能获得预期完备性包括给出的一组公理,使其能获得预期行为的充分性、软件和硬件系统功能的充分性,行为的充分性、软件和硬件系统功能的充分性,以及系统处于出错和非预期情况下保持正常行以及系统处于出错和非预期情况下保持正常行为的能力等。为的能力等。
在计算机系统设计中,正确性、健壮性和可靠在计算机系统设计中,正确性、健壮性和可靠性就是一致性和完备性的具体体现。性就是一致性和完备性的具体体现。
5. 5. 效率效率( Efficiency )
效率是关于空间、时间、人力、财力等资源效率是关于空间、时间、人力、财力等资源消耗的度量。在计算机软硬件的设计中,要消耗的度量。在计算机软硬件的设计中,要充分考虑某种预期结果所达到的效率,以及充分考虑某种预期结果所达到的效率,以及一个给定的实现过程较之替代的实现过程的一个给定的实现过程较之替代的实现过程的效率。效率。
66 ..演化演化( Evolution )
演化指的是系统的结构、状态、特征、行为演化指的是系统的结构、状态、特征、行为和功能等随着时间的推移而发生的更改。这和功能等随着时间的推移而发生的更改。这里主要是指了解系统更改的事实和意义及应里主要是指了解系统更改的事实和意义及应采取的对策。在软件进行更改时,不仅要充采取的对策。在软件进行更改时,不仅要充分考虑更改对系统各层次造成的冲击,还要分考虑更改对系统各层次造成的冲击,还要充分考虑到软件的有关抽象、技术和系统的充分考虑到软件的有关抽象、技术和系统的适应性问题。适应性问题。
7. 7. 抽象层次抽象层次( Levels of Abstraction )
抽象层次指的是通过对不同层次的细节和指抽象层次指的是通过对不同层次的细节和指标的抽象对一个系统或实体进行表述。在复标的抽象对一个系统或实体进行表述。在复杂系统的设计中,隐藏细节,对系统各层次杂系统的设计中,隐藏细节,对系统各层次进行描述(抽象),从而控制系统的复杂程进行描述(抽象),从而控制系统的复杂程度。例如,在软件工程中,从规则说明到编度。例如,在软件工程中,从规则说明到编码各个阶段(层次)的详细说明,计算机系码各个阶段(层次)的详细说明,计算机系统的分层思想,计算机网络的分层思想等。 统的分层思想,计算机网络的分层思想等。
8.8. 按空间排序按空间排序( Ordering in Space )
按空间排序指的是各种定位方式,如物理上按空间排序指的是各种定位方式,如物理上的定位(如网络和存储中的定位),组织方的定位(如网络和存储中的定位),组织方式上的定位(如处理机进程、类型定义和有式上的定位(如处理机进程、类型定义和有关操作的定位)以及概念上的定位(如软件关操作的定位)以及概念上的定位(如软件的辖域、耦合、内聚等)。按空间排序是计的辖域、耦合、内聚等)。按空间排序是计算技术中一个局部性和相邻性的概念。算技术中一个局部性和相邻性的概念。
9. 9. 按时间排序按时间排序( Ordering in Time )
按时间排序指的是事件的执行对时间的依赖性。按时间排序指的是事件的执行对时间的依赖性。例如,在具有时态逻辑的系统中,要考虑与时例如,在具有时态逻辑的系统中,要考虑与时间有关的时序问题;在分布式系统中,要考虑间有关的时序问题;在分布式系统中,要考虑进程同步的时间问题;在依赖于时间的算法执进程同步的时间问题;在依赖于时间的算法执行中,要考虑其基本的组成要素。 行中,要考虑其基本的组成要素。
10. 10. 重用重用( Reuse )
重用指的是在新的环境下,系统中各类实体、重用指的是在新的环境下,系统中各类实体、技术、概念等可被再次使用的能力。如软件库技术、概念等可被再次使用的能力。如软件库和硬件部件的重用等。和硬件部件的重用等。
11. 11. 安全性安全性( Security )
安全性指的是计算机软硬件系统对合法用户安全性指的是计算机软硬件系统对合法用户的响应及对非法请求的抗拒,以保护自己不的响应及对非法请求的抗拒,以保护自己不受外部影响和攻击的能力。如为防止数据的受外部影响和攻击的能力。如为防止数据的丢失、泄密而在数据库管理系统中提供的口丢失、泄密而在数据库管理系统中提供的口令更换、操作员授权等功能。令更换、操作员授权等功能。
12.12. 折衷与结论折衷与结论( Tradeoff and Consequences )
指的是为满足系统的可实施性而对系统设计中指的是为满足系统的可实施性而对系统设计中的技术、方案所作出的一种合理的取舍。结论的技术、方案所作出的一种合理的取舍。结论是折衷的结论,即选择一种方案代替另一种方是折衷的结论,即选择一种方案代替另一种方案所产生的技术、经济、文化及其他方面的影案所产生的技术、经济、文化及其他方面的影响。折衷是存在于计算学科领域各层次上的基响。折衷是存在于计算学科领域各层次上的基本事实。如在算法的研究中,要考虑空间和时本事实。如在算法的研究中,要考虑空间和时间的折衷;对于矛盾的设计目标,要考虑诸如间的折衷;对于矛盾的设计目标,要考虑诸如易用性和完备性、灵活性和简单性、低成本和易用性和完备性、灵活性和简单性、低成本和高可靠性等方面所采取的折衷等。高可靠性等方面所采取的折衷等。