Upload
others
View
23
Download
0
Embed Size (px)
Citation preview
计算机科学中的问题求解初探
计算学科中的核心概念计算学科中的核心概念
李瑞轩李瑞轩
智能与分布计算实验室华中科技大学计算机科学与技术学院华中科技大学计算机科学与技术学院
http://idc.hust.edu.cn/~rxli/http://idc.hust.edu.cn/~rxli/
内容提纲
算法算法
数据结构数据结构
程序
软件
硬件硬件
计算机中的数据计算机中的数据
计算机科学中的12个核心概念
引 言引 言学科的核心概念是学科中 关键、 重要的概念,它涉及
学科研究的内涵 对象 本质 核心要素等内容 其基本学科研究的内涵、对象、本质、核心要素等内容,其基本
特征有以下4点:
(1)在学科中多处出现;
(2)在各分支领域及抽象 理论和设计的各个层面上都有(2)在各分支领域及抽象、理论和设计的各个层面上都有
很多示例;
(3)在技术上有高度的独立性;
(4)一般都在数学 科学和工程中出现(4) 般都在数学、科学和工程中出现。
算法、数据结构、程序、软件、硬件、计算机中的数据等
与12个核心概念一起统称为计算学科中的核心概念。与12个核心概念 起统称为计算学科中的核心概念。
流程图流程图的基本符号:ISO 8631-1986E
起止框起止框 输入输入//输出框输出框 处理框处理框起止框起止框 输入输入//输出框输出框 处理框处理框
判断框判断框判断框判断框
调用框调用框 流程线流程线 连接点连接点调用框调用框 流程线流程线 连接点连接点
流程图流程图
变量单元 变量单元
计算机内存中开辟的一个连续单元
带地址的存储单元 命名 M NX
带地址的存储单元,命名x,y,M,N所有数据都存放在存储单元
赋值语句
在计算机存储单元放数据在计算机存储单元放数据
读、写存储单元
如何管理存储单元——数据结构的内容如何管理存储单元 数据结构的内容
按何种策略处理数据——算法的内容
一 算法(Algorithm)一、算法(Algorithm)
定义(非形式化) 个算法 就是 个有穷规则的
1. 算法的定义与特征
• 定义(非形式化):一个算法,就是一个有穷规则的
集合,其中之规则规定了一个解决某一类特定类型问
题的运算序列题的运算序列。
• 特征
有穷性· 有穷性
· 确定性
初始值(输入)· 初始值(输入)
· 结果(输出)
能行性· 能行性
• 形式化定义(Q,I,,F)
见计算机科学家克努特经典巨著《The Art of Computer Programming》。
丢番图方程可解性问题丢番图方程可解性问题
古希腊数学家丢番图(Diophantus)代数学之——代数学之父
丢番图方程——《算术》(Arithmetica) 丢番图方程——《算术》(Arithmetica)对于整系数不定方程,只考虑其整数解
能否写出一个可以判定任意丢番图方程是否可解的算法?(是否有整数解)的算法?(是否有整数解)
例,ax=b 例,ax+by=c
2、欧几里得算法——求两个正整数的m和n的 大
例 求 和
2、欧几里得算法 求两个正整数的m和n的 大公因子。 (见《几何原本》(Elements))
开始 • 例,m=56,n=32,求m和
n的 大公因子
• 算法描述
A放进m单元中A →m
B放进n单元中
m=A n=B
• 算法描述
变量单元:m,n,r
B放进n单元中B →n
m/n
变量单元:m,n,r赋值语句:
m/nr=余数
Y
m=n n=r
说明除数变被除数
N
r=0? 输出 n Y说明除数变被除数,
余数变除数
N
m=n n=r
结束 把n单元中当前内容放入m把r单元中当前内容放入n先读后写先读后写
思考思考
设有X、Y两个存储单元,写出互换X、Y内容的算法流程图容的算法流程图。
30 100X Y30X Y
两存储单元互换内容 Z X X Z
30 Z
两存储单元互换内容 Z=X or X →Z
X=Y Y →X
Y=Z Z →Y
算法的表示方法:自然语言 流程图 伪代码 程序设计语言
3、算法实例
自然语言—流程图—伪代码—程序设计语言
• 例1,求 。100k=1
K太笨!k 1
方法一:设置100个存储单元 将存储单元中的内容相加
太笨!
方法 :设置100个存储单元,将存储单元中的内容相加。
方法二:分析方法 :分析
1.每次做加法;
2 角色单元定义 优化 累加对象和计2.角色单元定义。
三个角色:1. 和X;
优化:累加对象和计数器可以合二为一。
三个角色:1. 和X;2. 累加对象Y;99次or 100次?
3 计数器I 把握控制算法的终止3. 计数器I:把握控制算法的终止。
自然语言将算法描述 开 始 开 始 自然语言将算法描述
X=1; I=1 X=1 (1)将1赋值给X;
Y=2 Y=2 优化 (2)将2赋值给Y;
(3)将X与Y相加X=X+Y; I=I+1 X=X+Y (3)将X与Y相加,
结果存放在X中;
Y=Y+1 Y=Y+1 (4)将Y加1,结果存
放在Y中;
I>99
Y
N Y>100
Y
N (5)若Y小于或等于
100 转到步骤(3)结 束 结 束
100,转到步骤(3)
继续执行;否则,算
法结束,结果为X。
算法的表示方法算法的表示方法
伪代码伪代码
伪代码是用介于自然语言和计算机语言之间的文字和符伪代码是用介于自然语言和计算机语言之间的文字和符
号来描述算法的工具。
它不用图形符号,因此,写方便,格式紧凑,易于理解,
便于向计算机程序设计语言算法(程序)过渡。
求解例1的伪代码算法描述:
BEGIN(算法开始)BEGIN(算法开始)1=>X2=>Ywhile(Y<=100)while(Y< 100){
X+Y >XX+Y=>XY+1=>Y
}END(算法结束)END(算法结束)
计算机程序设计语言计算机程序设计语言
(1)求解例1的计算机程序设计语言(C语言)的算法描述:(1)求解例1的计算机程序设计语言(C语言)的算法描述:
main(){int X Y;{int X,Y;
X=1;Y=2;Y=2;while<=100){{
X=X+Y;Y=Y+1;Y=Y+1;
};printf("%d" X);printf( %d ,X);
}
3、算法实例算 实例
例 求解调合级数•例2,求解调合级数
1 1 1 1 1
开 始
X 0•Hn= 11
12
13
14
1N+ + + + … +
X=0
I 1I=1
X=X+1/I
自然语言描述算法:
(1)将0赋值给X X=X+1/I
I=I+1
(1)将0赋值给X;
(2)将1赋值给I;I I+1
N
(3)将X与1/I相加,然后把结果存入X;
(4)将I加1;I>=n
Y(5)若I大于等于N,算法结束,结果
为X 否则转到步骤(3)继续执行结 束
为X;否则转到步骤(3)继续执行。
3、算法实例3、算法实例
例3 求解斐波那契数 0 1 1 2 3 5 8•例3,求解斐波那契数:0,1,1,2,3,5,8,13,21,34,…每个数都是前两数之和
F =1 F =1 F =F +Fn n≥0F0=1,F1=1,Fn+2=Fn+1+Fn,n≥0
设变量,定位变量角色
Fn Fn+1 Fn+2赋值语句
X Y Z
○ ○ ○
赋值语句:X=YY=Z
○ ○ ○Y=Z
开 始
自然语言描述算法:
n = 0 Y
N
自然语言描述算法
(1)如果n=0,那么将0赋值给Y,并
输出Y 转步骤(11) X=0,Y=1
Print X Y
Y=0
Print Y
输出Y,转步骤(11);
(2)将0赋给X,将1赋值给Y;Print X,Y
I=1
Print Y
(3)输出X、Y;
(4)将1赋值给I;
I>n-1 Y
N
将 赋值给 ;
(5)如果I大于n-1,则转到步骤
(11) 否则继续执行 Z=X+Y
X Y
结 束 (11),否则继续执行;
(6)将X和Y的和赋值给Z; X=Y
Y=Z
(7)将Y赋值给X;
(8)将Z赋值给Y;
Print Y
)将 赋值给 ;
(9)将Y输出;
(10)将I加1 转步骤(5)继续执行 I=I+1 (10)将I加1,转步骤(5)继续执行;
(11)算法结束。
思 考思 考
求n!,画程序流程图
注意边界条件:0!=1, 1!=1
4、算法分析
在算法的复杂度分析中 经常使用 个记号 读作“在算法的复杂度分析中,经常使用一个记号(读作“
大”),为Order(数量级)的第一个字母,它允许大 ),为Order(数量级)的第 个字母,它允许
使用“=”代替“≈”。如n2+n+1=(n2),该表达式表
示,当n足够大时表达式左边约等于n2。
设f(n)是一个关于正整数n的函数 若存在一个正整数设f(n)是一个关于正整数n的函数,若存在一个正整数
n0和一个常数C,当n≥ n0时,∣T(n)∣≤∣C f(n)∣均0 0
成立,则称f(n)为T(n)的同数量级的函数。于是,算法
时间复杂度T(n)可表示为:
T(n)= (f(n))T(n) (f(n))
4、算法分析
内容• 内容
(1) 时间复杂度
(2) 空间复杂度
(3) 便于阅读、修改与测试(3) 便于阅读、修改与测试
• 常见的复杂度等级
(1) O(l) 常数级(1) O(l):常数级
(2) O(logn):对数级
(3) O(n):线性级
(4) O(nc):多项式级(4) O(n ):多项式级
(5) O(cn):指数级
(6) O( !) 阶乘级(6) O(n!):阶乘级
二、数据结构
数据结构的基本概念1、数据结构的基本概念
• 定性的数学模型 非数值性的数据结构及其• 定性的数学模型:非数值性的数据结构及其
运算
• 数据逻辑结构:DS=<D,R>数据的存储结构 顺序 链式• 数据的存储结构:顺序,链式
• 数据结构的基本运算:建立、清除、插入元数据结构的基本运算:建 、清除、插入元
素、删除元素、更新元素、查找元素、排序
…
2、线性表与数组
• 线性表
• 数组数组
3 树与二叉树3、树与二叉树
• 树树• 二叉树
4、图
1 2 3 n
三、程序 10 20 30 …… n0
程序 = 算法 + 数据结构
问题:给定一个k值,如k=50,
快速找出 的单元地址快速找出k=50的单元地址
算法一:顺序查找K=A[i]
算法 :顺序查找
•确定变量和数据结构
•定义数组A[i], i=1,…,n,给定
了k值
算法二:二分查找(若数组是排好序的)
定义数组A[i], i=1,…,n,给定了k值
另外设置变量l hi h id另外设置变量low, high, mid
1 2 3 121 2 3 1210 20 30 … 120
i=n/2=6 A[i]=60[ ]则k=50是在左边or右边?
实例实例
1 2 3 4 5 6 7 8 9 10 116 12 15 18 22 25 28 35 46 58 60
现在 执行k=12 k=50的过程 给出结论及各变量的值现在 执行k=12,k=50的过程,给出结论及各变量的值
l hi h idlow high mid
四 软件
软件是与程序密切相关的一个概念,在计算机发展的初期,
四、软件
软件是与程序密切相关的 个概念,在计算机发展的初期,硬件设计和生产是主要问题,那时的软件就是程序。
现在计算机软件 般指计算机系统中的程序及其文档 也可 现在计算机软件一般指计算机系统中的程序及其文档,也可以指在研究、开发、维护,以及使用上述含义下的软件所涉及的理论 方法 技术所构成的分支学科及的理论、方法、技术所构成的分支学科。
软件一般分为系统软件、支撑软件、应用软件3类。
(1)系统软件是计算机系统中 靠近硬件层次的软件。如操作系统、编译程序等。操作系统 编译程序等
(2)支撑软件是支撑其他软件的开发与维护的软件。如数据库管理系统 网络软件 各种接口软件和开发工具等据库管理系统、网络软件、各种接口软件和开发工具等。
(3)应用软件是特定应用领域的专用软件。如商业会计软件 教学软件等件、教学软件等。
五 硬件
计算机硬件是构成计算机系统的所有物理器件 部件 设备
五、硬件
计算机硬件是构成计算机系统的所有物理器件、部件、设备,以及相应的工作原理与设计、制造、检测等技术的总称。
广义的硬件包含硬件本身及其工程技术两部分 其中 广义的硬件包含硬件本身及其工程技术两部分。其中:
计算机系统的物理元器件包括:集成电路、印制电路板,以及其他磁性 件 电 件等磁性元件、电子元件等。
计算机系统的部件和设备包括:控制器、运算器、存储器、输入输出设备 电源等出设备、电源等。
硬件工程技术包括:印制电路板制造、高密度组装、抗环境干扰、
抗恶劣环境破坏等技术 以及在设计和制造过程中为提高计算机性抗恶劣环境破坏等技术,以及在设计和制造过程中为提高计算机性能所采取的措施等。
计算机就是由计算机硬件和计算机软件组成的 硬件是计算 计算机就是由计算机硬件和计算机软件组成的。硬件是计算机的“躯体”,软件是计算机的“灵魂”。
六 十 个反复 现的核心概念六、十二个反复出现的核心概念
1、绑定(Binding)
2 大问题的复杂性(C l it f L P bl )2、大问题的复杂性(Complexity of Large Problems)
3、概念和形式模型(Conceptual and Format Models)3、概念和形式模型(Conceptual and Format Models)
4、一致性和完备性(Consistency and Completeness)
5、效率(Efficiecy)
演化6、演化(Evolution)
7、抽象层次(Levels of Abstraction)
8 按空间排序(Ordering in Space)8、按空间排序(Ordering in Space)
9、按时间排序( Ordering in Time)
10、重用(Reuse)
安全性( )11、安全性(Security)
12、折衷和结论(Trade off and Consequences)12、折衷和结论(Trade off and Consequences)
计算机科学中12个核心概念计算机科学中12个核心概念
1.绑定(Binding)绑定指的是通过将一个对象(或事物)与其某种属性相绑定指的是通过将 个对象(或事物)与其某种属性相
联系,从而使抽象的概念具体化的过程。例如,将一个程序的执行过程与一个处理机联系起来;一个变量与其类型或值的执行过程与 个处理机联系起来; 个变量与其类型或值联系起来。
2.大问题的复杂性(Complexity of Large Problems)大问题的复杂性是指随着问题规模的增长而使问题的复大问题的复杂性是指随着问题规模的增长而使问题的复
杂性呈非线性增加的效应。随着问题复杂性的增加,系统分析的任务将呈几何级数增长 这种非线性增加的效应是区分析的任务将呈几何级数增长。这种非线性增加的效应是区分和选择各种现有方法和技术的重要因素。
计算机科学中12个核心概念计算机科学中12个核心概念
3.概念模型和形式模型(Conceptual and Formal Models)Models)
概念模型和形式模型是对一个想法或问题进行形式化、特征化 可视化思维的方法特征化、可视化思维的方法。
抽象数据类型、语义数据类型以及指定系统的图形语言,如数据流图和E R图等都属于概念模型 而逻辑 开关理论如数据流图和E-R图等都属于概念模型。而逻辑、开关理论和计算理论中的模型大都属于形式模型。
概念模型和形式模型以及形式证明是将计算学科各分支概念模型和形式模型以及形式证明是将计算学科各分支统一起来的重要核心概念。
计算机科学中12个核心概念计算机科学中12个核心概念
4.一致性和完备性(Consistency and Completeness)致性包括用于形式说明的 组公理的 致性 事实和一致性包括用于形式说明的一组公理的一致性、事实和
理论的一致性,以及一种语言或接口设计的内部一致性。
完备性包括给出的一组公理,使其能获得预期行为的充
分性、软件和硬件系统功能的充分性,以及系统处于出错和非预期情况下保持正常行为的能力等。
在计算机系统设计中,正确性、健壮性和可靠性就是一在计算机系统设计中,正确性、健壮性和可靠性就是致性和完备性的具体体现。
计算机科学中12个核心概念计算机科学中12个核心概念
5 效率(Effi i ) 5.效率(Efficiency)效率是关于空间、时间、人力、财力等资源消耗的度
量 在计算机软硬件的设计中 要充分考虑某种预期结果所量。在计算机软硬件的设计中,要充分考虑某种预期结果所达到的效率,以及一个给定的实现过程较之替代的实现过程的效率的效率。
6.演化(Evolution)演化指的是系统的结构、状态、特征、行为和功能等随演化指 是系 结构 状 特征 行为 功能等
着时间的推移而发生的更改。
这里主要是指了解系统更改的事实和意义及应采取的对这里主要是指了解系统更改的事实和意义及应采取的对
策。在软件进行更改时,不仅要充分考虑更改对系统各层次造成的冲击,还要充分考虑到软件的有关抽象、技术和系统造成的冲击,还要充分考虑到软件的有关抽象、技术和系统的适应性问题。
计算机科学中12个核心概念计算机科学中12个核心概念
7.抽象层次(Levels of Abstraction)抽象层次指的是通过对不同层次的细节和指标的抽象对抽象层次指的是通过对不同层次的细节和指标的抽象对
一个系统或实体进行表述。在复杂系统的设计中,隐藏细节,对系统各层次进行描述(抽象) 从而控制系统的复杂程度对系统各层次进行描述(抽象),从而控制系统的复杂程度。
例如,在软件工程中,从规格说明到编码各个阶段(层
次)的详细说明,计算机系统的分层思想,计算机网络的分层思想等。
计算机科学中12个核心概念计算机科学中12个核心概念
8.按空间排序(Ordering in Space)按空间排序指的是各种定位方式,如物理上的定位(如按空间排序指的是各种定位方式 如物 的定位 如
网络和存储中的定位),组织方式上的定位(如处理机进程、类型定义和有关操作的定位)以及概念上的定位(如软件的操作 位 概 位 件辖域、耦合、内聚等)。
按空间排序是计算技术中一个局部性和相邻性的概念。按空间排序是计算技术中 个局部性和相邻性的概念
9.按时间排序(Ordering in Time)按时间排序指的是事件的执行对时间的依赖性按时间排序指的是事件的执行对时间的依赖性。
例如,在具有时态逻辑的系统中,要考虑与时间有关的时序问题时序问题;
在分布式系统中,要考虑进程同步的时间问题;
在依赖于时间的算法执行中,要考虑其基本的组成要素。
计算机科学中12个核心概念计算机科学中12个核心概念
10.重用(Reuse)重用指的是在新的环境下 系统中各类实体 技术 概重用指的是在新的环境下,系统中各类实体、技术、概
念等可被再次使用的能力。如软件库和硬件部件的重用等。
11.安全性(Security)安全性指的是计算机软硬件系统对合法用户的响应及对
非法请求的抗拒,以保护自己不受外部影响和攻击的能力。
如为防止数据的丢失、泄密而在数据库管理系统中提供的口令更换、操作员授权等功能。
计算机科学中12个核心概念计算机科学中12个核心概念
12.折衷和结论(Tradeoff and Consequences)折衷指的是为满足系统的可实施性而对系统设计中的技折衷指的是为满足系统的可实施性而对系统设计中的技
术、方案所作出的一种合理的取舍。
结论是折衷的结论 即选择 种方案代替另 种方案所结论是折衷的结论,即选择一种方案代替另一种方案所产生的技术、经济、文化及其他方面的影响。
折衷是存在于计算学科领域各层次上的基本事实 如在折衷是存在于计算学科领域各层次上的基本事实。如在
算法的研究中,要考虑空间和时间的折衷;对于矛盾的设计目标 要考虑诸如易用性和完备性 灵活性和简单性 低成目标,要考虑诸如易用性和完备性、灵活性和简单性、低成本和高可靠性等方面所采取的折衷等。
“以时间换空间” “以空间换时间”“以时间换空间”、“以空间换时间”。
方法论的思想:没有绝对的好,只能是折衷。
思考题思考题
顺序查找 顺序查找。给定一个K值,如50,快速找出k=50的单元地址。
定义数组A[i],i=1, 2, …, n给定k值,返回数组中地址。
画出二分查找有序表的程序流程图。
定义有序表A[i] ,i=1, 2, …, n变量low,high,mid,给定k值,返回有序表中的地址。变量low,high,mid,给定k值,返回有序表中的地址。