读书笔记——计算机科学导论

计算机科学导论-读书笔记

第一章 绪论
一、学习目标
1、定义计算机的图灵模型,
2、定义计算机的冯诺依曼模型
3、描述计算机的三大部分:硬件、数据和软件
4、列举与计算机硬件、软件、数据相关的话题
5、与计算机使用相关的一些社会问题和职业道德问题
6、说出计算机的简明历史

二、图灵模型
1、数据处理器:首先计算机是一个数据处理器,可以认为计算机是一个接收输入数据、处理数据并产生输出数据的黑盒。
定义过于广泛,且没有说明所处理的类型,以及是否可以处理一种以上的类型。
2、图灵模型:
相对于数据处理器,该模型添加了一个额外的元素——程序(用来告诉计算机对数据进行处理的指令集合)
程序
输入数据→计算机→输出数据

这种模型中输出数据依赖于输入数据和程序。

3、通用图灵机:对现代计算机的首次描述,该机器只要提供了合适的程序就能做任何运算。

三、冯诺依曼模型
1、4个子系统
基于冯诺依曼模型建造的计算机分为4个子系统:存储器、算术逻辑单元、控制单元和输入/输出单元。
存储器:用来存储的区域,在计算机的处理过程中存储器用来存储数据和程序。
算术逻辑单元:ALU 用来进行计算和逻辑运算的地方 控制单元:对存储器、算术逻辑单元、输入/输出等子系统进行控制操作的单元。
输入/输出:输入子系统负责从计算机外部接收输入数据和程序;输出子系统负责将计算机的处理结果输出到计算机外部。也包括辅助存储设备。
2、存储的程序概念:
冯诺依曼模型要求程序必须存储在内存中。
现代计算机的存储单元主要是用来存储程序以及响应数据,这意味着数据和程序应该具有相同的格式。实际上它们都是以位模式存储在内存中的,
3、指令的顺序执行
冯诺依曼模型中的一段程序是由一组数量有限的指令组成。

四、计算机组成
1、计算机硬件、数据、计算机软件
2、数据:存储数据、组织数据
3、计算机软件:必须存储程序、指令的序列、算法、语言、软件工程、操作系统
五、历史
1、机械计算器:
17世纪:Pascsline、Pascal语言(结构化的程序设计语言)
17世纪后期:莱布尼兹计算机器
1823年,差分机、后来--分析机
2、电子计算机
早期电子计算机:存储单元仅仅用来存放数据,利用配线或开关进行外部编程 ENIAC
基于冯诺依曼模型的计算机:EDVAC
3、 第一代计算机:商用计算机,真空管作为电子开关
第二代计算机:晶体管代替真空管,Fortran、Cobol语言
第三代计算机:集成电路,小型计算机
第四代计算机:微型计算机,桌面处理器出现,Altair 8800
第五代计算机:掌上电脑与台式电脑
六、问题
1、社会问题:依赖、社会公正、数字化分裂
2、道德问题:隐私、版权、计算机犯罪
七、计算机科学
1、分为两个领域 系统领域:计算机体系结构、计算机网络、安全问题、操作系统、算法、程序设计语言、软件工程
应用领域:数据库和人工智能
2、本书分为五个部分:数据表示与运算(2\3\4)、计算机硬件(5\6)、计算机软件(7\8\9\10)、数据组织与抽象(11\12\13\14)、高级论题(15\16\17\18)


第二章 数字系统 P25

一、本章目标
1、理解数字系统的概念;
2、分清非位置化和位置化数字系统;
3、描述十进制系统、二进制系统、十六进制系统、八进制系统
4、将二进制、八进制或十六进制数字转换为十进制系统
5、将十进制数字转化为二进制、八进制或十六进制系统
6、二进制和八进制、二进制和十六进制数字相互转化
7、查找在各种系统中代表特定数值所需的数码

二、数字系统
1、数字系统定义了如何用独特的符号来表示一个数字
2、位置化数字系统;在数字中符号所占据的位置决定了其表示的值
符号集、底数(基数)、正负号
三、十进制系统 decimal
1、底为10,符号集 0、1、2、3、4、5、6、7、8、9
1、十进制常省略圆括号、底和正号(对于正数)
四、二进制系统 binary
1、底为2,符号集 0、1
五、十六进制系统 hexadecimal
1、底 16,符号集 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
A-F分别等于 10-15
六、八进制系统 octal
1、底 8,符号集 0、1、2、3、4、5、6、7
七、进制转换
1、其他进制到十进制,数码乘以其在源系统中的位置量并求和。
2、十进制到其他进制
十进制数的整数部分为源,已转好的整数部分的数为目标。先创建空目标,接着反复除源并得到商和余数。余数插入目标的左边,商变为新的源。
转换35为二进制
0-1-2-4-8-17-35
1 0 0 0 1 1
二进制数为 100011
小数部分的转化可以使用连乘法,取十进制小数部分为源,已转换好的整数部分的数为目标。先创建一个空目标,接着反复乘源并得到结果,结果的整数部分插入目标的右边,而小数部分称为新的源。
转换0.625为二进制
0.625-0.25-0.50-0.0
1 0 1
二进制数为(0.101)
3、数码的数量
k=log(b)N,N是该整数的十进制数量,
如 k=log(10)234=[2.37]=3,有三位;
k=log₂234=log234/log2=[7.8]=8,数码有8位。
4、二进制-十六进制的转换
2-16: 100 1110 0010 ,从右起,4位一组,高位补零,十六进制为4E2
16-2:24C,2:0010,4:0100,C:1100,结果 0010 0100 1100.
5、二进制-八进制 与2-16相似。
6、八进制-十六进制,利用二进制做中介
八、非位置化数字系统
罗马数字

第三章 数据存储 P41

一、本章目标
1、5种不同的数据类型
2、不同的数据如何以位模式存储在计算机内部
3、整数如何以无符号格式存储在计算机中
4、整数如何以符号加绝对值格式存储
5、整数如何以二进制补码格式存储
6、实数如何以浮点格式存储在计算机中
7、文本如何通过各种不同的编码系统存储在计算机
8、音频如何通过采样、量化和编码存储在计算机中
9、图像如何通过光栅和矢量图模式存储在计算机中
10、视频如何通过以图像随时间变化的表示来存储在计算机中
二、数据类型
1、数据类型:数字、文本、音频、视频
2、计算机内部的数据
位(bit)是存储在计算机中的最小单位,是0/1
为了表示数据的不同类型,使用位模式,长度为8的位模式称为一个字节,byte
3、存储数字
3.1 整数 整数可以使用定点表示法存储在内存中
先将整数转为二进制数,如果二进制位数不足n位,则在二进制整数的左边补0,如果二进制整数大于n位,则发生溢出
如:
7存储在8位存储单元中,7的二进制是111,则存储时为 00000111
将258存储在16位存储单元中,258的二进制是100000010,补零后为 0000 0001 0000 0010
3.2 译解无符号整数
3.3 溢出
3.4 无符号整数的应用
3.5 符号加绝对值表示法
最左位用于定义整数的符号,0表示正整数,1表示负整数,所以有+0和-0.
3.6 二进制补码表示法
3.6.1 最左位决定符号,如果是0,该整数为正,如果是1,该整数为负。
3.6.2 以二进制补码格式存储整数,
首先将整数变为n位的二进制数,如果整数是正数或零,原样存储,如果是负数,计算机取其补码存储。
3.6.3 从二进制补码格式还原整数
如果最左位是0,计算机不做操作,再转换为十进制。
如果最左位是1,计算机取其补码。再转换为十进制。
3.6.4 溢出
3.7 存储实数
实数是带有整数部分和小数部分的数字。
带有很大的整数部分或很小的小数部分的实数不应该用定点表示法存储。
3.7.1 浮点表示法 符号+位移量+定点数
3.7.2 符号、指数和尾数
在一个二进制数规范化之后,只存储该数的3部分信息,符号、指数和尾数,如 1000111.0101 规范化后,只存储+,6,和 0001110101.
3.8 余码系统
3.9 IEEE标准
单精度(余127码) 1位表示符号,8位表示指数,23位表示尾数
双进度(余1023码) 1位表示符号,11位表示指数,52位表示尾数
4、存储文本
ASCII码(美国信息交换标准码) 表示2^7=128 种符号
Unicode,使用32位存储
5、存储音频
5.1 采样、量化、编码
5.2 声音编码标准 MP3(MPEG layer3)
6、存储图像
光栅图与矢量图
6.1 光栅图:
解析度:在图像处理中的扫描率称为解析度。
色彩深度、真彩色-1600万色 与 索引色-256色
编码标准:JPEG(真彩色)、GIF(索引色)
6.2 矢量图
几何模型、面向对象图像
7、存储视频
视频是图像在时间上的表示(称为帧)。


第四章 数据运算 P64

一、学习目标
1、列出在数据上进行的三类运算
2、在位模式上进行一元和二元逻辑运算
3、区分逻辑移位运算和算术移位运算
4、在位模式上进行逻辑移位运算
5、以二进制补码形式存储的整数上进行算术移位运算
6、以二进制补码形式存储的整数上进行加法和减法运算
7、以符号加绝对值形式存储的整数上进行加法和减法运算
8、以浮点格式存储的实数上进行加法和减法运算
二、逻辑运算
逻辑运算是指那些应用于模式中的一个二进制位,或在两个模式中相应的两个二进制位的相同基本运算。
1、位层次上的逻辑运算
假设0代表逻辑“假”,而1代表逻辑”真“。
可以应用布尔代数中定义的运算去操纵二进制位。
非(NOT):一元操作符,一个输入,输出位是输入位的相反。
与(AND):二元运算符,两个输入,如果输入都是1,则输出为1,其他情况,输出都是0.对于x=0或1,x AND 0→0,0 AND x → 0.
或(OR):二元运算符,如果输入都是0,输出为0,其他情况,输出为1.
对于x=0或1,x OR 1 →1,1 OR x → 1.
异或(XOR):二元运算符。如果输入都是1,则输出为0。换种说法,当输入相同时,则输出为0;输入不同时,则输出为1.
2、模式层次上的逻辑运算
相同的4个运算符(NOT/AND/OR/XOR)可以被应用到n位模式。效果就是对NOT运算来说,把每个运算符应用于每个位;对于其他3个运算符就是把每个运算符应用于相应的位对。
可以用来修改位模式。
2.1 求反,NOT
2.2 使指定的位复位/把一个位模式的指定位复位(置0):AND
2.3 对指定的位 置位 :OR
2.4 使指定的位反转:XOR
3、移位运算
逻辑移位运算和算术移位运算
3.1 逻辑移位运算应用于不带符号位的数的模式。这些移位运算可能会改变数的符号。
逻辑移位:逻辑右移运算把每一位向右移动一个位置,最右位丢弃,最左位填0。逻辑左移运算把每一位向左移动一个位置,最左位丢弃,最右位填0。
循环移位:循环移位运算(旋转运算)对位进行移位,但没有位被丢弃或增加。循环右移(或右旋转)把每一位向右移动一个位置,最右位被回环,成为最左位。循环左移(或左旋转)把每一位向左移动一个位置,最左位被回环,成为最右位。
3.2 算术移位运算假定位模式是用二进制补码格式表示的带符号位的整数。算术右移被用来对整数除以2;而算术左移被用来对整数乘以2.算术右移保留符号位,但同时也把它复制,放入相邻的右边的位中,因此符号被保存。算术左移丢弃符号位,接受它的右边的位作为符号位。如果新的符号位与原先的相同,那么运算成功,否则发生上溢或下溢,结果是非法的。
4、算术运算
包括加减乘除等,适用于整数和浮点数。
4.1 整数的算术运算,所用类似加减乘除等的算术运算均适用于整数,虽然整数的乘法(除法)能通过重复的加法(减法)来实现,但程序是低效的。
4.1.1 二进制补码整数的加减法:二进制补码表示法的一个优点是加法和减法之间没有区别,当遇到减法运算时,计算机只简单地把它转变为加法,但要为第二个数求二进制的补。
A-B=A+B的补码
当我们进行计算机数字的算术运算时,要记住每个数字和结果应该在分配的二进制位的定义范围之内。
4.1.2 符号加绝对值整数的加减法
先检查运算,如果是减法,改变第二个整数的符号,变成两符号整数的加法。
4.2 实数的算术运算


第五章 计算机组成 P80

一、学习目标
1、列出计算机的三个子系统;
2、描述计算机中央处理单元(CPU)的作用;
3、描述典型计算机中指令周期的取指令—译码—执行阶段;
4、描述主存和它的地址空间;
5、区分主存和缓存;
6、定义输入/输出子系统;
7、理解子系统间的互相连接,列出不同总线系统;
8、描述输入/输出寻址的不同方法;
9、区分设计计算机体系结构的两种主要趋势;
10、理解计算机是如何使用管道改善吞吐量的;
10、理解并行处理是如何能改善计算机的吞吐量的。

二、中央处理单元
计算机的组成部分可以分为三大类(或子系统):中央处理单元(CPU)、主存储器和输入/输出子系统。
1、CPU用于数据的运算。有三个组成部分:算术逻辑单元(ALU)、控制单元、寄存器组(快速存储单元)
1.1 算术逻辑单元(ALU)对数据进行逻辑、移位和算术运算
1.2 寄存器是用来临时存放数据的高速独立的存储单元。
1.2.1 数据寄存器,现在的计算机在CPU中使用多个或几十个寄存器来提高运算速度。
1.2.2 指令寄存器,CPU的主要职责是:从内存中逐条地取出指令,并将取出的指令存储在指令寄存器中,解释并执行指令。
1.3 控制单元
控制单元控制各个子系统的操作。控制是通过从控制单元发送到其他子系统的信号来进行。
三、主存储器
是计算机的第二个主要子系统,是存储单元的集合。每一个存储单元都有唯一的标识,称为地址。数据以称为字的位组的形式在内存中传入和传出。字可以是8位、16位、32位,甚至是64位。如果字是8位的话,,一般称为一个字节。
1、地址空间:
所有在存储器中标识的独立的地址单元的总数称为地址空间。
1.1 作为位模式的地址:内存地址用无符号二进制整数定义。
如果一个计算机有N个字的存储空间的话,那就需要用log(2)N 位的无符号整数来确定每一个存储单元。
2、 存储器的类型
2.1 RAM 随机存取存储器(RAM)是计算机中主存的主要组成部分。可以使用存储单元地址来随机存取一个数据项,而不需要存取位于它前面的所有数据项。与ROM的区别在于,用户可读写RAM。另外,RAM是易失性。当系统断电后信息(程序或数据)将丢失。分为
SRAM,静态RAM。使用传统的触发器门电路来保存数据。速度快,价格贵。
DRAM,动态RAM。使用电容器来保存数据。速度慢,便宜。
2.2 ROM
只读存储器(ROM)的内容是由制造商写进去的。用户只能读但不能写,优点是非易失性。可以用ROM来存储那些在开机时运行的程序。
分为
PROM,可编程只读存储器
EPROM,可擦除的可编程只读存储器,用户可以对它进行编程。需要拆下来擦除再重新安装。
EEPROM,电可擦除的可编程只读存储器。对它的编程和擦除用电子脉冲即可。
3、存储器的层次结构
寄存器-高速缓存存储器-内存
4、高速缓存存储器
存取速度要比主存快,但是比CPU及其内部的寄存器要慢。
通常计算机花费80%的时间来读取20%的数据,相同的数据往往被存取多次。
四、输入/输出子系统
计算机的第3个子系统是称为输入/输出(I/O)子系统的一系列设备。分为非存储设备和存储设备。
1、非存储设备
使CPU/内存可以与外界通信,但不能存储信息。
1.1 键盘和监视器
键盘提供输入功能,监视器显示输出并同时响应键盘的输入。还包括鼠标、操纵杆等
1.2 打印机
一种用于产生永久记录的输出设备,是非存储设备。
2、存储设备
又称辅助存储设备。
2.1 磁介质存储设备
包括
2.1.1 磁盘,由一张一张磁片叠加而成的,磁片由薄磁膜封装。信息是通过盘上每一个磁片的读/写磁头读写磁介质表面来进行读取和存储的。
表面结构:盘面都被划分为磁道,磁道又分为扇区。磁道通过磁道内部间隔隔开,扇区通过扇区内部间隔隔开。
数据存取。磁盘是一个随机存取设备。在某一时间可以读取的最小存储区域只能是一个扇区。
性能,
取决于角速度(定义了磁盘的旋转速度)、寻道时间(定义了读/写磁头寻找数据所在磁道的数据)、传送时间(定义了将数据从磁盘移到CPU/内存所需要的时间)
2.1.2 磁带
表面结构:磁道、块
数据存取:顺序存取设备
性能:慢,廉价。
2.2 光存储设备
使用光(激光)技术来存储和读取数据。CD是利用光存储技术来保存音频信息,相同(稍加改进)后的技术被用来存储计算机上的信息。
2.2.1 只读光盘(CD-ROM)
2.2.2 可刻录光盘(CD-R):写一次,读多次
2.2.3 可重写光盘(CD-RW):可擦写光盘
2.2.4 数字多功能光盘(DVD):更大存储容量的数字存储媒介
五、子系统的互连
1、CPU与存储器的连接
CPU和内存之间通常是由称为总线的三组线路连接在一起,分别是数据总线、地址总线和控制总线。
1.1数据总线,由多根线组成,每根线上每次传送一个位的数据,线的数量取决于该字的大小。如果计算机的字是32位,那么需要32根线的数据总线以便同一时刻能同时传送32位的字。
1.2 地址总线,允许访问存储器中的某个字,地址总线的线数取决于存储空间的大小。如果存储器容量为2的n次方个字,那地址总线一次需要传送n位的地址数据,需要n根线。
1.3 控制总线
负责在CPU和内存之间传送信息。如果计算机有2的m条控制命令,那么控制总线就需要有m根。
2、I/O设备的连接
I/O设备是机电、磁性或光学设备,而CPU和内存是电子设备,前者的操作速度慢很多,需要有中介来处理这种差异。I/O设备通过一种被称为输入/输出控制器或接口的器件连接到总线上的。
2.1 控制器
串行控制器只有一根数据线连接到设备上,而并行控制器则有数根数据线连接到设备上。常用的有SCSI、火线和USB。
2.1.1 SCSI,小型计算机系统接口,8、16、32线的并行接口。菊花链连接,两端必须有终结器,且设备必须有唯一的地址。
2.1.2 火线,IEEE标准1394规定的串行接口,俗称火线。是高速串行接口。可在一条菊花链或树形连接上连接最多63个设备,不需要SCSI控制器中那样的终结器。
2.1.3
USB(通用串行总线),串行控制器。多个设备可以被连接到一个USB控制器上,这个控制器也称为根集线器。设备可以不需要关闭计算机很容易地被移除或连接到树中,这称为热交换。当集线器被从系统中移除时,与此集线器相连的所有设备和其他集线器也被移除。
通过USB的数据是以包的形式传输的,每个包含有:地址部分(设备标识)、控制部分、要被传送到其他设备的数据部分。所有设备都将接收到相同的包,但只有具有数据包中所定义的地址的那些设备将接受它。
3、输入/输出设备的寻址
3.1 I/O独立寻址,用来读写内存的指令与用来读写输入输出的指令是完全不同的。有专门的指令完成对输入输出设备的测试、控制以及读写操作。每个输入输出设备有自己的地址。
3.2 I/O存储器映射寻址
在I/O存储器映射寻址中,CPU将输入/输出控制器中的每一个寄存器都看作是内存中的某个存储字。换言之,CPU没有单独的指令来表示是从内存或者从输入/输出设备传送数据。
六、程序执行
当今,通用计算机使用称为程序的一系列指令来处理数据。
1、机器周期
CPU利用重复的机器周期来执行程序中的指令,一步一条。一个简化的周期包括3步,取指令、译码和执行。
1.1 取指令
控制单元命令系统将下一条要执行的指令复制到CPU的指令寄存器中,被复制指令的地址并保存在程序计数器中。复制完成后,程序计数器自动加1指向内存中的下一条指令
1.2 译码
机器周期的第二阶段是译码阶段。当指令置于指令寄存器后,该指令将由控制单元负责译码。指令译码的结果是产生一系列系统可以执行的二进制代码
1.3 执行
指令译码完毕后,控制单元发送任务指令到CPU的某个部件,或者是CPU让算术逻辑单元将两个输入寄存器中的内容相加并将结果保存在输出寄存器。
2、输入/输出操作
因为I/O设备的运行速度比CPU要慢很多,因此CPU的操作在某种程度上必须和输入/输出设备同步。三种方法被设计用于同步,分别为:程序控制输入/输出、中断控制输入/输出、直接存储器存取。
2.1 程序控制输入/输出,采取最简单的一种同步,CPU等待I/O设备。
2.2 中断控制输入/输出,首先CPU告知I/O设备即将开始传输,但是CPU并不需要不停地查询I/O设备的状态。
2.3 直接存储器存取(DMA)
用于在高速I/O设备间传输大量的数据块,例如磁盘、内存。需要一个DMA控制器来承担CPU的一些功能。
七、不同的体系结构
1、CISC
复杂指令集计算机(complex instruction set computer),设计策略是使用大量的指令,包括复杂指令。
指令集的复杂性使得CPU和控制单元的电路非常复杂。解决方案,程序在两个层面上运行,CPU不直接执行机器语言指令,CPU只执行被称为微操作的简单操作,复杂的指令被转化为一系列简单操作然后由CPU执行。例子,奔腾系列处理
2、RISC
精简指令集计算机(reduce instruction set computer),设计策略是使用少量的指令完成最少的简单操作,复杂指令用简单指令子集模拟。
3、流水线
早期计算机中,每条指令的三个阶段都需要串行完成。
现代计算机使用称为流水线的技术来改善吞吐量(在单位时间内完成的指令总数)。流水线理念是如果控制单元能同时执行两个或三个阶段,那么下一条指令就可以在前一条指令完成前开始。
4、并行处理
并行处理理念是计算机可以具有多个控制单元、多个算术逻辑单元和多个内存单元。像流水线一样,并行处理能改善吞吐量。
并行处理涉及多种不同的技术。计算机组织被分为四类(SISD/SIMD/MISD/MIMD)
4.1 SISD组织
单指令流,单数据流(SISD)组织表示计算机有一个控制单元、一个算术逻辑单元和一个内存单元。指令被顺序执行,每个指令可以存取数据流的一个或多个数据项。
4.2 SIMD组织
单指令流,多数据流(SIMD)表示计算机有一个控制单元、多个处理单元和一个内存单元。所有处理器单元从控制单元接收相同的指令,但在不同的数据项上操作。
4.3 MISD组织
多指令流,单数据流(MISD)体系结构是属于多个指令流的多个指令作用于相同的数据项的体系结构。从未被实现过。
4.4 MIMD组织
多指令流,多数据流(MIMD)是属于多个指令流的多个指令作用于多个数据流(每个指令作用于一个数据项)。
八、简单计算机
1、三个组成部分:CPU、存储器和输入/输出子系统。
1.1、CPU
分成三部分:数据寄存器、算术逻辑单元(ALU)和控制单元。
1.2、主存
既有数据,又有程序指令。
1.3、输入/输出子系统
2、指令集
指令由两部分构成,操作码和操作数
3、处理指令
机器周期,三阶段。
4、例子 C=A+B

第六章 计算机网络 P111
一、学习目标
1、描述网络标准、物理结构和网络分类
2、区分互联网internet与因特网Internet
3、描述作为因特网网络模型的TCP/IP协议族
4、定义TCP/IP协议族中的各层以及它们的关系
5、讨论因特网的客户/服务器体系结构
6、描述三种因特网早期应用:电子邮件、文件传输和远程登录
7、理解作为因特网最常见应用的万维网及其组成
8、区分三种因特网文档类型:静态文档、动态文档和活动文档
9、列出其他因特网应用,如视频会议、分组讨论和聊天
二、引言
1、网络是硬件和软件的组合,把数据从一个地方发送到另一个地方。
2、网络标准
2.1 性能,传输时间和响应时间。
2.2 可靠性,发送的准确性、发生故障的频率
2.3 安全,保护数据,防止非授权访问、损坏和修改
3、物理结构
3.1 连接类型
网络由两个或两个以上通过链路连接的设备构成。链路是数据从一个设备传输到另一个设备的通信通道。点对点连接与多点连接
3.2 物理拓扑
网络的拓扑是所有链路和设备间关系的几何表示,基本结构是网状型、星型、总线型、环型
高速局域网最常使用的拓扑是星型拓扑
4、网络分类
4.1 局域网,LAN,为个人计算机或工作站间的资源共享而设计的。
4.2 广域网,WAN,提供长距离的数据、图像、音频和视频信息的传输。
4.3 城域网,MAN,大小结余LAN与WAN之间的网络,用来为那些需要高速连接且终端点分布在一个城市或城市一部分的客户服务。
5、互联网 internet
网络是一组连接在一起的通信设备,而互联网是能够互相通信的两个或多个网络。路由器是发送数据包(消息),并使其在互联网中传输的连接设备。
6、因特网,Internet
由成千上万个互相连接的网络组成。使用ISP的服务。
三、TCP/IP协议族
为了分解完成任务所需的服务,因特网创建了一组规则,称为协议。协议允许使用不同技术的局域网和广域网互相连接到一起,从一点向另一点传送消息。控制因特网的一组协议称为TCP/IP协议族。
原始的TCP/IP协议族被定义成4层,网络与链路层、网络层、传输层和应用层。
如今的TCP/IP协议通常被定义成5层,物理层、数据链路层、网络层、传输层、应用层。
四、层
1、应用层:负责向用户提供服务。
应用层允许用户访问网络,是唯一一个大多数因特网用户能够看到的层。
1.1 客户/服务器体系结构
运行服务器端程序的计算机称为服务器,而运行客户端程序的计算机称为客户,服务端程序需要一直运行,而客户端程序只在需要时运行。
客户端程序和服务端程序间的通信称为进程到进程的通信,因为运行在这种体系结构中程序称为进程。
1.2 应用层地址
为了标识一个特殊的HTTP站点,客户使用统一资源定位符(URL)。服务器应用层地址不是用来发送消息的,只是帮助客户找到服务器计算机的实际地址。
网络中的每台计算机都有一个称为逻辑地址或IP地址的地址。
2、传输层:负责客户和服务器进程间的消息的逻辑传输。
传输层负责整个消息的进程到进程的传输——建立客户和服务器计算机的传输层的逻辑通信。
2.1 传输层的地址(端口号)
服务器计算机可能同时运行多个进程,当消息到达服务器时,它必须被指向正确的进程,我们需要另一个地址来标识服务器进程,这称为端口号。
2.2 多路复用和解多路复用
传输层为不同的进程做相同的工作,从进程中收集要发出的消息,并将到达的消息分发给进程。传输层使用端口号完成多路复用和解多路复用。
2.3 拥塞控制
传输层负责实现拥塞控制,物理上传送数据包的下层网络可能发生交通拥塞,可能引起网络丢弃(失去)一些数据包。消息在发送前存储在缓冲区中,如果传输层监测到网络上有拥塞,它就暂缓发送。
2.4 流量控制
传输层还负责实现流量控制,发送端的传输层能监控接收端的传输层,检查接受者接收到的数据包是否过量。
2.5 差错控制
在消息的传输过程中,有可能被损坏、丢失、重复或乱序。传输层的发送负责确保消息被目的传输层正确接收。
2.6 传输层协议
三种传输层协议,UDP/TCP/SCTP
2.6.1 UDP
用户数据报协议,三个协议中最简单的。速度快、效率高。
UDP不提供属于单个消息的数据包间的逻辑连接,被称为无连接协议。
2.6.2 TCP
传输控制协议,支持传输层所有职责的协议,没有UDP快和高效。TCP使用序号、确认号和检验和。提供多路复用、解多路复用、流量控制、拥塞控制和差错控制。因为TCP在两个传输层间提供逻辑连接,所以被称为面向连接的协议。
TCP是数据通信中完美的传输层协议,但不适合音频和视频的实时传输。
2.6.3 SCTP
流控制传输协议,结合了UDP和TCP的优点,像UDP一样,SCTP适合用于音频和视频的实时传输,像TCP一样,SCTP提供差错控制和流量控制。

3、网络层:负责单个数据包从源主机到目标主机的发送
网络层负责源到目的地的数据包发送,可能跨多个网络。网络层保证每个数据包从源点到最终目的地。
3.1 网络层地址
从客户端到服务器的数据包和从服务器返回的数据包需要网络层地址。
网络层使用它的路由表找到下一跳的逻辑地址,把这个地址传递给数据链路层,使用数据链路层需要的这个逻辑地址来找到下一个路由器的数据链路层地址。
3.2 路由选择
网络层的一个特殊的职责:路由选择。路由选择是确定数据包的部分或全部路径。
路由基于目的地址和可用的最佳路径来选择的。
3.3 网络层协议
TCP/IP 协议族支持一个主协议(IP)和几个辅助协议,帮助IP完成它的职责。
3.3.1 网络层的主协议是因特网协议(IP),有IPv4和IPv6两个版本,IP提供了尽力而为服务。
3.3.2
辅助协议
4、数据链路层:负责数据帧的节点到节点的发送
网络层数据包可能在从源到目的地的传输中经过多个路由器。从一个节点到另一个节点传送数据是数据链路层的职责。
4.1 数据链路层地址
与IP地址不同,数据链路层的地址不是通用的。每个数据链路协议可能使用不同的地址格式和大小。以太网协议使用48位地址,常被写成十六进制格式,分为6部分,每部分两位十六进制数,如
07:01:02:11:2C:5B
数据链路层地址常被成为物理地址或 介质访问控制(MAC)地址。
4.2 差错控制和流量控制
方法与传输层相同
5、物理层
完成在物理介质上传输二进制流所需要的功能。
物理层传送的单元是二进制位,物理层的传播方式是广播。
6、层的总结
在应用层,进程交换消息;在传输层,数据单元被称为段、用户数据报或包;在网络层,数据单元被称为数据报;在数据链路层,数据单元被称为帧。最后,在物理层,数据单元是二进制位。
各层的另一个特性:封装。
五、因特网应用
1、电子邮件
1.1 邮件访问协议
POP,邮局协议
IMAP,因特网邮件访问协议
1.2 地址
一个电子邮件处理系统必须有唯一的地址系统来分发邮件。SMTP使用的地址系统由两部分组成:本地部分和域名,中间用@符号隔开。
1.3 多用途因特网邮件扩充协议(MIME)
允许非ASCII数据通过SMTP传输的补充协议,MIME不是一个电子邮件协议,不能替代SMTP,只是SMTP的扩展
2、文件传输协议
FTP是因特网上最常见任务的标准机制,用于从一台计算机拷贝文件到另一计算机。
FTP与其他客户/服务器应用不同,它在两主机间建立两个连接。一个连接是用来传输数据的;另一个连接是用来控制信息(命令和响应)的。命令和数据的分开传输使得FTP效率更高。
3、远程登陆——TELNET
TELNET是多用途的客户/服务器程序,允许用户访问远程计算机上的任何应用程序。
4、万维网
分布式客户/服务器服务
4.1 超文本和超媒体
在超文本环境中,信息存储在一组用链接概念连接在一起的文档中,一个项通过链接与另一个文档相关。正在浏览文档的用户可以通过选择链接到另一个文档的项。
4.2 万维网的组成
浏览器、Web服务器和超文本传输协议(HTTP)
4.2.1 浏览器 通常由三部分构成:控制器、客户端程序和解释器。控制器接收来自键盘或鼠标的输入,使用客户端程序存取文档,文档被存取之后,控制器使用一个解释器在屏幕上显示文档。
4.2.2 服务器 服务器存储所有属于Web站点的页面
4.2.3 超文本传送协议(HTTP)
4.2.4 地址 HTTP使用定位符来访问分布在全世界的文档。
URL 定义了四件事,方法、主机、端口号和路径
4.3 静态文档
4.3.1 HTML,超文本标记语言
用于创建Web界面的语言
4.3.2 XML,可扩展标记语言
在XML中,标签可以用来定义两个标签间文本的内容(类型)。
4.4 动态文档
任何时刻只要浏览器请求文档,Web服务器就会创建动态文档。
4.4.1 CGI,通用网关接口
创建和处理动态文档的技术。
4.4.2 动态文档的脚本技术
使用HTML来创建包含固定部分的文档,并嵌入一个脚本,即某种类型的源代码,让服务器可以运行这段代码来提供变化的部分。
常见的有,使用Perl语言的超文本预处理程序(PHP),使用Java作为脚本语言的Java服务器页面(JSP),使用Visual Basic语言作为脚本语言的活动服务器页面(ASP)
5、活动文档
对于许多应用来说,需要在客户端运行程序或脚本。这些应用被称为活动文档。
有Java小程序、JavaScript
5、其他因特网应用
5.1 视频会议
5.2 分组讨论
5.3 聊天

第七章 操作系统 P140
一、学习目标
1、理解操作系统在计算机中的作用
2、给出操作系统的定义;
3、理解把操作系统调入内存的自举过程
4、列出操作系统的组成部分
5、讨论操作系统中内存管理区的作用
6、讨论操作系统中进程管理器的作用
7、讨论操作系统中设备管理器的作用
8、讨论操作系统中文件管理器的作用
9、理解三种常见操作系统的主要特点:UNIX、Linux和Windows NT
二、引言
1、计算机系统由硬件和软件组成。硬件是计算机的物理设备,软件则是使得硬件能够正常工作的程序的集合。软件又分为操作系统和应用程序。应用程序使用计算机硬件来解决用户的问题,操作系统则控制用户对硬件的访问。
2、操作系统是计算机硬件和用户(程序和人)的一个接口,使得其他程序更加方便有效地运行,并能方便地对计算机硬件和软件资源进行访问。
3、自举过程
很小一部分内存用ROM构成,其中存有称为自举程序的小程序,职责是把操作系统本身装入RAM内存。
三、演化
1、批处理系统
保证计算机所有资源被从一个作业转换到另一个作业
2、分时系统
多道程序:将多个作业同时装入内存,并且仅当该资源可用时分配给需要它的作业。
分时:资源可以被不同的作业分享。每个作业可以分到一段时间来使用资源。
调度:给不同的程序分配资源,,并决定哪一个程序什么时候使用哪一种资源。
进程:内存中等待分配资源的程序
3、个人系统
单用户操作系统,如DOS(磁盘操作系统)
4、并行系统
同一计算机安装多个CPU,每个CPU可以处理一个程序或者程序的一部分,意味着很多任务可以并行完成而不是串行处理
5、分布式系统
一个作业可以由多台计算机共同完成,通过互联网连接即可。
6、实时系统
是指在特定时间限制内完成任务。
四、组成部分
现代操作系统至少具有以下四种功能:内存管理器、进程管理器、设备管理器、文件管理器。操作系统还有这样一个部分,称为用户界面或命令解释程序。
1、用户界面
指用来接收用户(进程)的输入并向操作系统解释这些请求的程序。UNIX的用户界面被称作命令解释程序(shell),其他操作系统中,则被称为窗口,以指明它是一个由菜单驱动的并有着GUI的部件。
2、内存管理器
现代计算机系统的一个重要职责是内存管理。有单道程序和多道程序。
2.1 单道程序
在单道程序中,大多数内存用来装载单一的程序,仅仅一小部分用来装载操作系统。
2.2 多道程序
在多道程序中,同一时刻可以装入多个程序并且能够同时被执行。
2.2.1 分区调度
多道程序的第一种技术成为分区调度。在这种模式中,内存被分为不定长的几个分区。每个部分或分区保存一个程序。CPU在各个程序之间交替服务。
2.2.2 分页调度
分页调度提高了分区调度的效率。在分页调度下,内存被分成大小相等的若干个部分,称为帧,程序则被分为大小相等的部分,称为页。页和帧的大小通常是一样的。
2.2.3 请求分页调度
分页调度不需要程序装载到连续的内存中,但仍需要程序整体载入内存中运行。在请求分页调度中,程序被分成页,但是页可以依次载入内存,运行,然后被另一个页代替。换句话说,内存可以同时载入多个程序的页。
2.2.4 请求分段调度
类似分页调度。在请求分段调度中,程序将按程序员的角度划分成段,被载入内存中,执行,然后被来自同一程序或其他程序的模块所代替。
2.2.5 请求分页和分段调度
请求分页和分段调度结合了两者的优点以提高系统效率。
2.3 虚拟内存
虚拟内存意味着请求分页调度、请求分段调度,或两种都要。

3、进程管理器
3.1程序、作业和进程
程序是程序员编写的一组稳定的指令,存在硬盘上。
作业:从一个程序被选中执行,到其运行结束并再次成为一个程序的这段过程中,该程序称为作业。
进程:是一个执行中的程序。该程序开始执行但还未结束。换言之,进程是一个在内存中运行的作业。
3.2 状态图
一个程序当被操作系统选中时就称为作业并且称为保持状态,直至它载入内存之前都保持这个状态。当内存可以整体或部分载入这个程序时,作业转换成就绪状态,并变成进程。它在内存中保持这个状态直至CPU运行它;这时它转成运行状态。进程可以进入等待状态、就绪状态、终止状态。
3.3 调度器
将一个作业或进程从一个状态改变为另一个状态,进程管理器使用了连个调度器:作业调度器和进程调度器。
3.3.1 作业调度器
将一个作业从保持状态转入就绪状态,或是从运行状态转入终止状态。
3.3.2 进程调度器
将一个进程从一个状态转入另一个状态。
3.3.3 其他调度器
一些操作系统使用其他类型的调度器使进程之间的转换更为有效。
3.4、队列
为处理多个进程和作业,进程管理器使用队列(等待列表)。与每一作业或进程相关的是存有这些作业和进程信息的作业控制块或进程控制块。进程管理器在队列中存储作业或进程控制块,作业或进程仍保存在内存或硬盘中。
一个操作系统有很多个队列。如作业队列、就绪队列和I/O队列。
3.5、进程同步
所有的进程管理的思想都是使得拥有不同资源的不同进程同步。
3.5.1 死锁
当操作系统没有对进程的资源进行限制时将会发生死锁。
四个必要条件:互斥、资源占有、抢先、循环等待。
3.5.2 饿死

4、设备管理器
设备管理器(或者是输入/输出管理器)负责访问输入/输出设备。当一个进程访问输入/输出设备时,在该段时间内这些设备对其他进程而言是不可用的。设备管理器负责让输入/输出设备使用起来更有效。
监视所有的输入/输出设备,以保证它们能够正常运行。
为每一个输入/输出设备维护一个队列
控制访问输入/输出设备的不同策略。
5、文件管理器
控制文件访问
管理文件的创建、删除和修改
给文件命名
管理文件的存储
负责归档和备份
五、主流操作系统
1、UNIX
是多用户、多道程序、可移植的操作系统,被设计来方便编程、文本处理、通信。
1.1 UNIX结构
由四个部分构成:内核、命令解释器、一组标准工具和应用程序。
1.1.1 内核
是UNIX的心脏,包含操作系统的最基本部分:内存管理、进程管理、设备管理和文件管理。
1.1.2 命令解释器
是UNIX中对用户最可见的部分。接收和解释用户输入的命令。
1.1.3 工具
工具是UNIX标准程序,为用户提供支持过程。常用的三个工具是:文本编辑器、搜索程序和排序程序。
1.1.4 应用
不是操作系统发布中的标准部分,但提供了对系统的扩展能力
2、Linux
初始内核(与UNIX小子集相似),具有传统UNIX的所有特性。
2.1组成
内核:负责处理所有属于内核的职责
系统库:含有一组被应用程序使用的函数(包括命令解释器),用于与内核交互。
系统工具:是使用系统库提供的服务,执行管理任务的各个程序。
2.2 网络功能
支持标准因特网协议,支持三层:套接字接口、协议驱动和网络设备驱动。
2.3 安全
身份验证和访问控制
3、Windows NT/2000/XP
3.1 设计目标
可扩展性、可移植性、可靠性、兼容性和性能
3.2 体系结构
硬件抽象层(HAL)为上层隐藏了硬件的差异。
内核
执行者:为整个操作系统提供服务。由六个子系统构成:对象管理器、安全引用监控器、进程管理器、虚拟内存管理器、本地过程调用工具和输入/输出(I/O)管理器。
环境子系统

第八章 算法 P157
一、学习目标
1、定义算法,并与问题求解关联;
2、定义三种结构(顺序、选择和循环),并描述它们在算法中的作业;
3、描述UML图和当表示算法时,它们是如何使用的;
4、描述伪代码和当表示算法时,它们是如何使用的;
5、列出基本算法和它们的应用;
6、描述排序的概念,理解三种原始排序算法背后的机制;
7、描述搜索的概念,理解两种常见搜索算法背后的机制;
8、定义子算法和它们与算法的关系;
9、区分迭代和递归算法
二、概念
1、
算法是一种逐步解决问题或完成任务的方法。
算法接收一组输入数据,同时产生一组输出数据。
2、三种结构
程序必定是由顺序、判断和循环这三种结构组成。
2.1 顺序
2.2 判断
2.3 循环
三、算法的表示
1、UML,统一建模语言,使用大图的形式掩盖了算法的所有细节,只显示算法从开始到结束的整个流程
2、伪代码,是算法的一种类似英语的表示法。
四、定义
算法是一组明确步骤的有序集合,它产生结果并在有限的时间内终止。
1、有序集合:算法必须是一组定义完好且排列有序的指令集合。
2、明确步骤:算法的每一步都必须有清晰的定义。
3、产生结果:算法必须产生结果,否则无意义。
4、在有限的时间内终止:算法必须能够终止。
五、基本算法
1、求和
三个逻辑部分
将和(sum)初始化
循环,在每次迭代中将一个新数加到和(sum)上
退出循环后返回结果。
2、乘积
同样三个逻辑部分,与求和相似。
3、最大和最小
通过判断结构找出两个数中的较大值(较小值),然后把这个结构放在循环中。
4、排序,选择排序/冒泡排序/插入排序
4.1 选择排序:使用两重循环,外层循环每次扫描时迭代一次。内层循环在未排序列表中寻找最小的元素。
4.2 冒泡排序:使用两重循环,外层每次扫描中迭代一次;每次内层循环则将某一元素冒泡置顶部.
4.3 插入排序:外层循环每次扫描迭代,内层循环则寻找插入的位置。
4.4 其他排序算法:
快速排序、堆排序、希尔排序、桶式排序、合并排序等
5、查找
5.1 顺序查找
用于查找无序的列表。来查找较小的列表或是不常用的列表。
从表头开始查找,当找到目标元素或确信查找目标不在列表中时,查找过程结束。
5.2 折半查找
用于查找有序列表。
从一个列表的中间的元素来测试,这能够判别出目标在列表里的前半部分还是后半部分。如果在前半部分,就不需要查找后半部分。如果在后半部分,就不需要查找前半部分。换句话说,可以通过判断排除一半的列表。
重复这个过程直到找到目标或目标不在这个列表里。
六、子算法
根据三层结构理论,可以为每个可解的问题创建算法。结构和编程的原则要将算法分成几个单元,称为子算法。
结构图:显示了算法中不同模块之间的关系。
七、递归
编写解决问题的算法有两种途径,迭代与递归。递归是算法自我调用的过程。
1、迭代,如果算法的定义没有包含算法本身,则叫做迭代法
2、递归,如果算法的定义中有其本身,则是递归。递归容易理解,效率相比较低。

第九章、程序设计语言 P176
一、学习目标
1、描述从机器语言到高级语言的编程语言演化;
2、理解如何使用解释器或编译器将高级语言中的程序翻译成机器语言
3、区分四种计算机语言模式;
4、理解过程式模式和在模式中程序单元与数据项间的交互;
5、理解面向对象模式和在这种模式中程序单元与对象间的交互;
6、定义函数式模式,理解它的应用;
7、定义说明式模式,理解它的应用;
8、定义过程式和面向对象语言中的常见概念
二、演化
计算机语言是指编写程序时,根据事先定义的规则(语法)而写出的预定语句的集合。计算机语言已经从机器语言演化到高级语言。
1、机器语言
在计算机发展的早期,唯一的程序设计语言是机器语言。
机器语言是计算机硬件唯一能理解的语言。
2、汇编语言
用带符号或助记符的指令和地址代替二进制代码的语言被称为符号语言,这些助记符语言后来被称为汇编语言。
用于将汇编语言代码翻译成机器语言的特殊程序是汇编程序。
3、高级语言
高级语言使程序员能够将精力集中在应用程序上,其设计目标就是使程序员摆脱汇编语言繁琐的细节。有BASIC、COBOL、Pascal、Ada、C、C++、Java.
高级语言被转化为机器语言的过程称为解释或编译。
三、翻译
高级语言为了在计算机上运行,需被翻译成机器语言。高级程序被称为源程序,被翻译成的机器语言程序称为目标程序。有两种方法:编译和解释。
1、编译
编译程序通常把整个源程序翻译成目标程序。
2、解释
解释是指把源程序中的每一行翻译成目标程序中相应的行,并执行它的过程。
2.1 解释程序的第一种方法( Java语言之前的第一种方法)
源程序的每一行被翻译成被其使用的计算机上的机器语言,该行机器语言被立即执行。有错误,过程显示消息,其余的过程终止,程序被改正后再次重头解释和执行。
2.2 Java使用的解释程序
Java源程序首先被编译,创建Java的字节代码,字节代码然后能被任何运行JVM虚拟机的计算机编译或解释。
3、翻译过程
编译在执行前翻译整个源代码,而解释一次只翻译和执行源代码中的一行。
3.1 词法分析器
词法分析器一个符号接一个符号地读源代码,创建源语言中的助记符表。
3.2 语法分析器
语法分析器分析一组助记符,找出指令。
3.3 语义分析器
语义分析器检查语法分析器创建的句子,确保它们不含有二义性。
3.4 代码生成器
在无二义性的指令被语义分析器创建后,每条指令将转化为一组程序将要在其上运行的计算机机器语言。这个由代码生成器完成。
四、编程模式
模式是一种计算机语言看待要解决问题的方式。分为4种模式:过程式、面向对象、函数式和说明式。
1、过程式模式
在过程式模式中,程序被看成操纵被动对象的活动主体。
代表有,FORTRAN/COBOL/BASIC/C/Pascal/Ada
过程式模式下,程序就是活动主体,该主体使用称为数据或数据项的被动对象。为了操纵数据,活动主体发布动作,称之为过程。
过程式模式程序由三部分构成:对象创建部分、一组过程调用和每个过程的一组代码。
1.1 FORTRAN(FORmula TRANslation) 第一代高级语言。特征:高精度算法、处理复杂数据能力、指数运算。
1.2 COBOL(COmmon Bussiness-Oriented Language),设计目标:作为商业编程语言使用。
特征:快速访问文件和数据库、快速更新和数据库、生成大量的报表、界面友好的格式化的输出。
1.3 Pascal
设计思想:通过强调结构化编程方法来教初学者编程。现在的过程式语言归功于该语言。
1.4 C语言
最初用于编写操作系统和系统软件。
C有高级指令和低级指令,是非常有效的语言,指令短。
1.5 Ada
特征:有其他过程式语言那样的高级指令、有允许实时处理的指令、具有并行处理能力。
2、面向对象模式
面向对象模式处理活动对象,而不是被动对象。在过程式模式中的过程是独立的实体,但面向对象模式中的方法是属于对象领地。
代表有:Smalltalk/C++/Visual Basic/C#/Java
2.1 类
相同类型的对象需要一组方法,为了创建这些方法,面向对象语言使用称为类的单元。

2.1.1 方法
总体上,方法的格式与有些过程式语言中用的函数非常相似。每个方法都有它的头、局部变量和语句。
2.1.2 继承性
在面向对象模型中,作为本质能从另一个对象继承,这个概念称为继承性。
2.1.3 多态性
在面向对象模式中的多态性是指我们可以定义一下具有相同名字的操作,而这些操作在相关类中做不同的事情。
2.2 C++
比C语言更高级的一种计算机编程语言。使用类(class)来定义相似对象的通用属性以及可以应用于它们本身的各种操作。
C++语言的设计遵循三条基本原则特性:封装、继承和多态。
2.3 Java
在C和C++的基础上发展而来,移除了一些特性,从而健壮性更好。是完全面向类操作。
3、函数式模式
在函数式模式中程序被看成是一个数学函数,主要实现以下功能:
定义一系列可供任何程序员调用的原始(原子)函数
允许程序员通过若干原始函数的组合创建新的函数。
相对于过程式语言具有两方面优势:支持模块化编程并且允许程序员使用已经存在的函数来开发新的函数。
代表有:LISP/Scheme
3.1 LISP
表处理解释语言(LISt Programming,LISP)
3.2 Scheme
LISP没有统一标准化,实际使用的标准有MIT在20世纪70年代早期开发,称为模式。
4、说明式模式
说明式模式依据逻辑推理的原则响应查询。
代表有:Prolog
栗子
human(John)
mortal(human)
用户询问
? -mortal(John)
程序响应 yes
五、共同概念
1、标识符
过程式语言的共同特点之一就是都具有标识符。
标识符允许给程序中的数据和其他对象命名。
2、数据类型
数据类型定义了一系列值及应用于这些值的一系列操作。每种数据类型值的集合称为数据类型的域。大多数语言都定义了两类数据类型:简单数据类型和复合数据类型。
2.1 简单数据类型
简单数据类型是不能分解成更小数据类型的数据类型。有:
整数类型是不包括小数部分的完整的数。
实数类型是带小数部分的数字。
字符类型是语言使用的潜在字符集中的符号
布尔类型是只取两个值(真/假)的数据类型
2.2 复合数据类型
复合数据类型是一组元素,其中每个元素是简单数据类型或复合数据类型。有:
数组是一组元素,元素的类型相同。
记录是一组元素,元素的类型可以不同。
3、变量
变量是存储单元的名字。
3.1 变量声明
大多数过程式语言和面向对象语言要求变量在使用前被声明。
3.2 变量初始化
变量在声明和定义时可以进行初始化,即在变量中存储一个值。
4、字面值
字面值是程序中使用的预定义的值。
5、常量
常量是一个可以存储值的命名的位置。同样是有类型。
6、输入和输出
几乎所有的程序都需要输入和(或)输出数据。
6.1 输入
数据或者通过语句或者通过预先定义的函数完成输入。
6.2 输出
数据或者通过语句或者通过预先定义的函数来完成输出。
7、表达式
表达式是由一系列操作数和运算符简化后的一个单一数值。
7.1 运算符
运算符是用来完成一个动作的特定语言的语法记号。每一种语言都有运算符,在语法或规则等方面的使用是严格定义的。有:
算术运算符,如+ - * / ++ --
关系运算符,如< <= > >= == !=
逻辑运算符,如! && ||
7.2 操作数
操作数接收一个运算符的动作。
8、语句
每条语句都使程序执行一个相应动作,被直接翻译成一条或者多条计算机可执行的指令。
8.1 赋值语句
赋值语句给变量赋值。使用 符号←定义赋值
8.2 复合语句
复合语句是一个包含0个或多个语句的代码单元,也被称为块。一般包括一个左大括号、一个可选语句段以及一个右大括号。
8.3 控制语句
控制语句与选择和重复有关。
选择语句由两路和多路选择语句。
重复语句,C/C++/Java中有while、for、do..while三种语句
9、子程序
完成单一任务的这些过程的子集能集合在一起,放在它们自己的程序单元中,也就是子程序。
9.1 局部变量
当子程序每次被调用时这些局部对象或局部变量被创建,当控制从子程序返回时被销毁。
9.2 参数
子程序可能需要作用于主程序创建的对象,在此时程序使用参数。在主程序中称为实际参数,在子程序中称为形式参数。
有传值和传引用两种方式。
9.3 传值
在传值参数中,主程序和子程序的通信是单向的,从主程序到子程序,主程序传递实际参数的值,存储到子程序中相应的形式参数中。从子程序到主程序没有参数的通信。
9.4传引用
传引用被设计来允许子程序改变主程序中变量的值。在传引用中,变量被主程序和子程序共享。
9.5 返回值
子程序可以被设计成返回一个或几个值。
9.6 实现
子程序概念在不同的语言中不同,在C/C++中,子程序被实现为函数。

第十章 软件工程 P196
一、学习目标
1、理解软件工程中的软件生命周期的概念;
2、描述两种主要的开发过程模型:瀑布模型和增量模型
3、理解分析阶段,描述在分析阶段两种独立的方法:面向过程分析和面向对象分析;
4、理解设计阶段,描述在设计阶段两种独立的方法:面向过程设计和面向对象设计;
5、描述实现阶段,识别这阶段中的质量问题;
6、描述测试阶段,区分白盒测试和黑盒测试;
7、识别软件工程中文档的重要性,区分用户文档、系统文档和技术文档。
二、软件生命周期
软件生命周期是软件工程中的一个基础概念。软件和其他产品一样,周期性重复着一些阶段。
软件最初由开发者开发。软件在使用中经常需要修改。使用和修改,这两个步骤一直进行下去,直到软件过时。
1、开发过程模型
开发过程包括四个阶段:分析、设计、实现和测试。开发过程有多种模型,最常见的:瀑布模型和增量模型。
1.1 瀑布模型
软件开发过程的一种非常流行的模型就是瀑布模型,在这种模型中,开发过程只有一个方向的流动。
优点:在下一个阶段开始前每个阶段已经完成。
缺点:难于定位问题。
1.2 增量模型
在增量模型中,开发者首先完成整个系统的简化版本。然后加入细节,测试系统,定位问题。

三、分析阶段
开发过程始于分析阶段,这个阶段生成规格说明文档,文档说明了软件要做什么,而没有说明如何去做。
1 面向过程分析
如果实现阶段使用过程式语言,那么面向过程分析就是分析阶段使用的方法。这种情况下的规格说明可以使用多种建模工具。
1.1 数据流图
数据流图显示了系统中数据的流动。使用四种符号:方形盒表示数据源或数据目的,带圆角的矩形表示过程(数据中的动作或操作),末端开口的矩形表示数据存储的地方,箭头表示数据流。
1.2 实体关系图
见数据库设计。
1.3 状态图
状态图通常用于当系统中的实体状态在响应事件时将会改变的情况。
2 面向对象分析
如果实现使用面向对象语言,那么面向对象分析就是分析过程使用的。
2.1 用例图
用例图给出了系统的用户视图:它显示了用户与系统间的交互。
用例图使用四种组件:系统、用例、动作者和关系。
系统(用矩形表示)执行功能。系统中的行动由用例(圆角矩形)表示,
动作者是使用系统的某人或某事,用线条任务表示。
2.2 类图
分析的下一步就是创建系统的类图。更多细节查阅软件工程方面的书。
2.3 状态图
类图完成后,可以为类图中的每个类准备状态图。

四、设计阶段
设计阶段定义系统如何完成在分析阶段所定义的需求。
1 面向过程设计
面向过程设计中,既要有设计过程,也要有设计数据。
1.1 结构图
在面向过程设计中,说明模块间关系的常用工具是结构图。
1.2 模块化
模块化意味着将大项目分解成较小的部分,以便能够容易理解和处理。
当系统被分解成模块时,主要关心两点:耦合和内聚。
1.2.1 耦合:软件系统中模块间的耦合必须最小化。
耦合是对两个模块互相绑定紧密程度的度量。越紧耦合模块,独立性越差。为了让模块尽可能独立,松散耦合是希望的
松散耦合的模块更可能被重用,
松散耦合的模块不容易在相关模块中产生错误,
松散耦合的模块允许我们只修改需要改变的模块,而不会影响到不需要改变的模块。
1.2.2 内聚:软件系统模块间的内聚必须最大化
模块化的另一个问题是内聚。内聚是程序中处理过程相关紧密程度的度量。
2 面向对象设计
在面向对象设计中,设计阶段通过详细描述类的细节来继续。

五、实现阶段
在瀑布模型中,设计阶段完成之后,实现阶段就可以开始了。
在这个阶段,程序员为面向过程设计中的模块编写程序或者编写程序单元,实现面向对象设计中的类。
1 语言的选择
面向过程开发中,通常使用纯过程语言,如C
面向对象的情况下,常使用C++和Java。
2 软件质量
软件质量可以划分成三个广义的度量:可操作性、可维护性和可迁移性。
2.1 可操作性
涉及系统的基本操作,有多种度量方法:准确性、高效性、可靠性、安全性、及时性和适用性。
2.2 可维护性
可维护性以保持系统正常运行并及时更新为参照。
度量:可变性、可修正性、适用性、可测试性。
2.3 可迁移性
可迁移性是指把数据和(或)系统从一个平台移动到另一个平台并重用代码的能力。度量:重用性、互用性、可移植性。
六、测试阶段
测试阶段的目标就是发现错误。有两种测试:白盒测试和黑盒测试。
1、白盒测试
白盒测试是基于知道软件的内部结构的。
使用软件结构的白盒测试需要保证:
每个模块中的所有独立的路径至少被测试过一次。
所有的判断结构每个分支都被测试
每个循环被测试
所有数据结构都被测试
1.1 基本路径测试
基本路径测试是在软件中每条语句至少被执行一次的方法。
1.2 控制结构测试
控制结构测试使用条件测试、数据流测试、循环测试。
2、黑盒测试
黑盒测试指在不知道程序的内部也不知道程序是如何工作的情况下测试程序。
2.1 穷尽测试
用输入域中的所有可能的值去测试软件。
2.2 随机测试
选择输入域的值的子集来测试。
2.3 边界值测试
当遇到边界值时,错误经常发生。
七、文档
软件的正确使用和有效维护离不开文档。有三种独立的文档:用户文档、系统文档和技术文档。
1、用户文档
告诉用户如何一步步地使用软件包。文档应该面向新手和专业用户。
2、系统文档
系统文档定义软件本身。撰写系统文档的目的是为了让原始开发人员之外的人能够维护和修改软件包。
分析阶段,收集的信息应该仔细地用文档记录。
设计阶段,最终版本用到的工具必须记录在文档中。
实现阶段,代码的每个模块都应记录在文档中。代码应该使用注释和描述头尽可能详细地形成自文档化。
测试阶段,对最终产品使用的每种测试,连同它的结构都要记录在文档中。
3、技术文档
描述了软件系统的安装和服务。

第十一章 数据结构P208
一、目标
1、定义数据结构;
2、把数组定义为一数据结构,并说明它是如何用于存储数据项列表的;
3、区分数组的名字和数组中元素的名字;
4、描述为数组定义的操作;
5、把记录定义为一数据结构,并说明它是如何用于存储属于单个数据元素的属性;
6、区分记录的名字和它的域的名字;
7、把链表定义为一数据结构,并说明它是如何用指针来实现的;
8、理解数组中节点的存取机制;
9、描述为链表定义的操作;
10、比较和区分数组、记录和链表;
11、说明数组、记录和链表的应用;
数据结构利用了有关的变量的集合,而这些集合能够单独或作为一个整体被访问。
二、数组
数组是元素的顺序集合,通常这些元素具有相同的数据类型。索引表示元素在数组中顺序号,顺序号从数组开始处计数。数组元素通过索引被独立给出了地址。
在C/C++/Java是从0开始数组索引的。
1、数组名与元素名
数组名是整个结构的名字。元素名允许我们查阅这个元素。
2、多维数组
数据在一个方向上线性组成,一维数组。
数据存储在多维中,如包括行和列的表格就是一个二维数组。多于二维的多维数组也存在。
3、存储配置
一维数组的索引直接定义了元素在实际存储上的相对位置。
对于二维数组,大多数计算机使用行主序存储。也可以使用列主序存储。
4、数组操作
数组作为数据结构的常用操作有:查找、插入、删除、检索和遍历。
4.1 查找元素
未排序的数组,顺序查找;有序数组使用折半查找。
4.2 元素的插入
通常,数组的大小是定义好的。但有些语言允许可变长数组。
4.2.1 尾部插入 容易操作
4.2.2 开始或中间插入 操作过程冗长、费时。
4.3 元素的删除
数组中删除和插入一样冗长和棘手。
4.4 检索
检索操作就是随机地存取一个元素,达到检查或拷贝元素中的数据的目的。
当数据结构是数组时,检索是一个容易的操作。
4.5 数组的遍历
数组的遍历是指被应用于数组中每个元素上的操作。
5、数组的应用
当需要进行的插入和删除操作数码较少,而需要大量的查找和检索操作时,数组是合适的结构。

三、记录
记录是一组相关元素的集合,可能是不同的类型,但整个记录有一个名称。记录中的每个元素被称为域。域是具有含义的最小命名数据,有类型且存在于内存中。能被赋值、选择和操纵。
在记录中元素可以是相同类型或不同类型的,但记录中所有元素必须是关联的。
1、记录名与域名
记录的名字是整个结构的名字,而每个域的名字允许我们存取这些域。
2、记录与数组
数组定义了元素的集合,而记录定义了元素可以确认的部分。
如数组可以定义一个班的学生(40位),而记录定义了学生不同的属性,如学号、姓名或成绩。
3、记录数组
如果我们需要定义元素的集合,同时还需要定义元素的属性,那么可以使用记录数组。
在记录数组中,数组的名字定义了整个结构,使用索引定义每个元素,然后定义元素的属性。如student[3].id。
4、数组与记录数组
数组和记录数组都表示数据项的列表。
数组可以被看成是记录数组的一种特例。

四、链表
链表是一个有序数据的集合,其中每个元素包含下一个元素的地址,即每个元素包含两个部分:数据和链。数据部分包含可用的信息,并被处理,链则将数据连到一起,包含一个指明列表下一个元素的指针。
链表中元素习惯上称为节点,链表中节点是至少包括两个域的记录;一个包含数据,另一个包含链表中下一个节点的地址。
1、数组与链表
在记录数组中,连接工具是索引。
在链表中,连接工具是指向下一个元素的链。
2、链表名与节点名
链表名是头指针的名字,该头指针指向表中第一个节点。
节点的名字与指向节点的指针有关。
3、链表操作
3.1 搜索链表
链表的搜索算法只能是顺序的。
3.2 插入节点
在插入链表之前,首先要使用搜索算法,如果搜索算法返回假,将允许插入,否则终止插入。
有四种情况 在空表中插入、在表的开始处插入、在表的末尾插入、在表中间插入。
3.3 删除节点
删除节点之前,要先应用搜索算法,如果搜索算法返回的标记是真,说明可以从链表中删除该节点。
分为删除首节点、删除中间或末尾节点。
3.4 检索节点
在检索之前,链表需要被搜索,如果找到数据,那它被检索,否则过程终止。
3.5、遍历链表
为了遍历链表,需要一个步行指针,当元素被处理时,它从一个节点移到另一个节点。
4、链表的应用
当需要对存储数据进行许多的插入和删除时,链表是一种非常高效的数据结构。但对于需要经常搜索的数据来说,链表不是一个好的候选者。

第十二章 抽象数据类型 P226
一、目标
1、说明抽象数据类型(ADT)的概念
2、说明栈、栈上的基本操作、它们的应用和它们是如何实现的;
3、说明队列、队列上的基本操作、它们的应用以及它们是如何实现的;
4、说明广义线性表、广义线性表上的基本操作、它们的应用以及它们是如何实现的;
5、说明一般的树和它的应用;
6、说明二叉搜索树(BST)和它的应用;
7、说明图和它的应用。

二、背景
数据类型上的定义和应用于数据的操作定义是抽象数据类型背后的一部分概念。
1、简单抽象数据类型
许多编程语言已经定义了一些简单的抽象数据类型作为语言的整数部分。如整数、实数、字符、指针等。
2、复杂抽象数据类型
复杂抽象数据类型,如表抽象数据类型、栈抽象数据类型、队列抽象数据类型等。
ADT包含了一组允许程序员使用的操作的定义,而这些操作的实现是隐藏的。这种不需详细说明实现过程的泛化操作称为抽象。
抽象概念意味着:1、知道一个数据类型能做什么。2、如何去做是隐藏的。
3、定义
抽象数据类型就是与对该数据类型有意义的操作封装在一起的数据声明。然后,用它封装数据和操作并对用户隐藏。

抽象数据类型:数据的定义、操作的定义、封装数据和操作。
4、抽象数据类型的模型
抽象数据类型包含 数据结构和操作函数两个部分。
应用程序只能通过接口访问操作函数的公有操作,操作函数的私有操作是抽象数据类型内部用户使用的。
5、实现
计算机语言不提供抽象数据类型包。要使用,首先要实现。
三、栈
栈是一种限制线性列表,该类列表的添加和删除操作只能在一端实现,称为栈顶。因此,栈具有后进先出(LIFO)数据结构的原因。
1、栈的操作
基本操作有四种,建栈、入栈、出栈和空。
1.1 建栈 stack(stackName)
建栈操作创建一个空栈。
1.2 入栈 push(stackName,dataItem)
入栈操作在栈顶添加新的元素。
1.3 出栈 pop(stackName,dataItem)
出栈操作将栈顶元素移走。
1.4 空 empty(stackName)

2、栈的抽象数据类型
定义:一种只能在一端存取的数据项表,该端称为栈顶。
操作:stack,建立一个空栈。
push,在栈顶插入一个元素。
pop,删除栈顶元素。
empty,检查栈的状态。如果栈为空,返回真,非空,返回假。
3、栈的应用
3.1 倒转数据
倒转数据需要一组给定数据,重新拍下,使得首尾元素互换,中间的所有元素也相应地进行交换。
3.2 配对数据
在表达式中进行一些字符的配对。编译器可以使用栈来检查所有的开括号都与闭括号配对。
4、栈的实现
栈抽象数据类型可以使用数组也可以使用链表来实现。

四、队列
队列是一种线性列表,该表中的数据只能在称为“尾部”的一端插入,并且只能在称为“头部”的一端删除。队列是先进先出(FIFO)结构。
1、队列的操作
1.1 建队列:建立一个空队列,queue(queueName)
1.2 入列:在队列的尾部插入一数据项,enqueue(queueName,dataItem)
1.3 出列:删除队列前端的数据项,dequeue(queueName,dataItem)
1.4 空:检出队列的状态,empty(queueName).如果队列为空,返回真,否则返回假。
2、队列的抽象数据类型
定义:队列是一种线性列表,该表中的数据只能在称为“尾部”的一端插入,并且只能在称为“头部”的一端删除。
操作:queue,创建一个空的队列。
enqueue,在尾部插入一个元素。
dequeue,在头部删除一个元素。
empty,检查队列的状态。
3、队列的应用
队列是最常用的数据处理结构之一。事实上,在所有的操作系统以及网络中都有队列的身影。如在线电子商务应用程序中,处理用户需求、任务和指令。在计算机系统中,需要用队列来完成对作业或对系统设备的处理。
4、队列的实现
队列抽象数据类型可以使用数组或链表来实现。

五、广义线性表
栈和队列都是限制线性表,广义线性表是像插入和删除等操作可以在其中任何地方进行的表,可以在表头、表中间或表尾。

广义线性表是具有如下特性的元素集合:
元素具有相同的类型;
元素按顺序排序,有第一个元素和最后一个元素;
除第一个元素外每个元素都有唯一的前驱;除最后一个元素外每个元素都有后继。
每个元素是一个带有关键字段的记录。
元素按关键字值排序。

1、广义线性表操作
1.1 建表:建立一个空表,list(listName);
1.2 插入:将元素插入一个能保持关键字顺序的地方。insert(listName,element)
1.3 删除:删除表中数据,delete(listName,target,element)
1.4 检索:单个元素的存取,retrieve(listName,target,element)
1.5 遍历:表中所有的元素逐一被处理,traverse(listName,action)
1.6 空:检查表的状态,empty(listName),如果表空,返回真,非空,返回假。
2、广义线性表的抽象数据类型
定义:一个有序的数据项表,所有的项具有相同类型。
操作:list,创建一个空表;
insert,在表中插入一个元素;
delete,从表中删除一个元素;
retrieve,从表中检索一个元素;
traverse,顺序地遍历表;
empty,检查表的状态。
3、广义线性表的应用
可应用于元素被随机地存取或顺序存取的情况。
4、广义线性表的实现
可以使用数组或链表来实现。

六、树
树包括一组有限的元素,称为节点(或顶点),同时包括一组有限的有向线段,用来连接节点,称为弧。如果树是非空,其中有一个节点没有进入的弧,该节点称为根。树中的其他节点可以沿着从根开始的唯一路径到达。
树中的顶点可以分成三类:根、叶子和内部。
子节点、双亲、兄弟节点、祖先、子树

七、二叉树
二叉树是一棵树,且其中没有一个节点所含有的子树的个数超过两个。换言之,任一个节点只能有0、1或2棵子树。
1、二叉树的递归定义
二叉树是一棵空树或由一个根节点和两棵子树构成,而每棵子树也是二叉树。
2、二叉树的操作
常用的运算是建树、插入、删除、检索、空和遍历。
两种常用的遍历次序是深度优先和广度优先。
2.1 深度优先遍历
前序遍历 根被首先访问,接着是左子树,最后是右子树。
中序遍历 先处理左子树,然后是跟,最后是右子树。
后序遍历 根在左右子树都处理完后才处理。
2.2 广度优先遍历
先处理节点的所有子节点,然后进行下一层。
3、二叉树的应用
典型应用有赫夫曼编码和表达式树
3.1 赫夫曼编码
赫夫曼编码是一种压缩技术,使用二叉树来生成一个符号串可变长度的二进制编码。
3.2 表达式树
建立表达式树后,三种标准遍历(前序、中序和后序)表示了三种不同的表达式格式:中缀、后缀、前缀。
4、实现
可以使用数组或链表实现。对于删除和插入操作,链表实现的效率更高。

八、二叉搜索树
二叉搜索树是一种具有额外特性的二叉树:每个节点的关键字值大于左子树中的所有节点的关键字值,而小于右子树中所有节点的关键字值。
二叉搜索树(BST)的中序遍历创建了一个升序列表。
1、二叉搜索树的抽象数据类型
与广义线性表所定义的抽象数据类型相似。但BST可以使用折半查找,效率更高。
2、二叉搜索树的实现
二叉搜索(BST)可以使用数组或链表实现。链表结构更常见并且效率更高。

九、图
图是由一组节点(称为顶点)或一组顶点间的连线(称为边或弧)构成的一种抽象数据类型。图中的节点可以有一个或多个双亲,弧可以是有向的,也可以是无向的。
图中的顶点可以代表对象或概念,边或弧可以代表这些对象或概念间的关系。
城市的地图和连接城市的道路可以表示成计算机的一个无向图。



第十三章 文件结构 P248
一、目标
1、定义两类存取方法:顺序存取和随机存取;
2、理解顺序文件的结构和它们是如何更新的;
3、理解索引文件的结构和索引文件与数据文件间的关系;
4、理解散列文件背后的概念,说出一些散列方法;
5、描述地址冲突和它们是如何解决的;
6、定义目录和它们是如何用来组织文件的;
7、区分文本和二进制文件。
文件是作为一个单元看待的外部相关数据的集合,主要作用是存储数据。存储在辅助存储设备或二级存储设备中。
二、存取方法
存取方法决定了如何检索记录:顺序的或者随机的。
1、顺序存取
如果需要顺序地存取记录,则使用顺序文件结构。
2、随机存取
如果想存取某一特定记录,则使用允许随机存取的文件结构。索引文件和散列文件都允许随机存取。

三、顺序文件
顺序文件是指记录只能按顺序从头到尾一个接一个地进行存取。
顺序文件对随机存取来说效率不高。
1、更新顺序文件
和更新程序有关的一个有四个文件:新主文件、旧主文件、事务文件和错误报告文件。
新主文件:新的永久数据文件。
旧主文件:需要更新的永久文件。
事务文件:包含将要对主文件作的改变。
添加事务:包含将要追加到主文件中新数据。
删除事务:把将要从文件中删除的记录标识出来
更改事务:包含对文件中特定记录的修改。
键:文件中一个或多个能够标识数据的手段。
错误报告文件:错误报告包括在数据更新时所发现的错误的清单,并提供给用户以进行纠错操作。
2、文件更新过程
要使文件更新过程有效率,所有文件都必须按同一个键排序。

四、索引文件
索引文件由数据文件组成,它是带索引的顺序文件。索引本身非常小,只占两个字段:顺序文件的键和在磁盘上相应记录的地址。
1、存取文件中记录时
a、整个索引文件都载入到内存中,
b、搜索项目,用高效的算法,如折半,查找目标键
c、检索记录的地址
d、按照地址,检索数据记录并返回给用户
2、倒排文件
索引文件的好处之一是可以有多个索引,每个索引有不同的键。这种索引文件被称为倒排文件。

五、散列文件
散列文件用一个函数来完成键到地址的映射。用户给出键,函数将键映射成地址,再传给操作系统,这样就可检索记录了。
1、散列方法
1.1 直接法
在直接散列方法中,键是未经算法处理的数据文件地址。非常理想,但应用有限。有时空间浪费问题严重。
1.2 求模法
又称除余散列法,求模方法用文件大小去除键后,将余数加1作为地址。
1.3 数字折取法
选择从键中析取的数字作为地址。
1.4 其他方法
平方中值法、折叠法、旋转法、伪随机法
2、冲突
通常散列列表中键的数量要比在数据文件中的记录数量要多。
我们把列表中一些映射为同一地址的键称为同义词。
如果插入列表的实际数据中有两个或多个同义词,将产生冲突。
冲突的产生是在散列算法为插入键产生地址时,发现该地址已被占用。由散列算法产生的地址称为内部(起始)地址,包含所有内部(起始)地址的区域称为主区。
除了直接法,其他散列方法都可能产生冲突。
2.1 开放寻址
第一种散列冲突解决法——开放寻址解决法,解决了在主区的冲突。
当一个冲突发生时,主区地址将查找开放的或空闲的记录来用于存取新数据。
2.2 链表解决法
开放寻址的一个主要缺点是每个冲突的解决增加了将来冲突的可能性。
在链表解决法中,第一条记录存储在起始地址,但它包含了一个指向下一条记录的指针。
2.3 桶散列法
另一种处理冲突的方法是散列到桶。桶是一个能接纳多个记录的节点。缺点是可能有很多浪费的(未占用的)存储单元。
2.4 组合方法。
复杂的实现方法通常是组合使用多种方法


六、目录
目录是大多数操作系统提供的,用来组织文件。
目录常被表示为含有其他文件信息的一种特殊文件类型。不仅有索引信息,还有其他文件信息,如访问权限、创建存取修改时间等。
1、UNIX操作系统中的目录
在UNIX目录结构的顶部是一个称为根的目录。被输入为正斜杠/
每个目录可以包含子目录和文件。
1.1 特殊目录
a、根目录,是文件系统层次结构的最高层,是整个文件结构的根,无父目录。
b、主目录,首次登录到系统中,使用的目录。
c、工作目录,在用户会话中在任意点我们所“在”的目录。
d、父目录,工作目录的直接上层目录。
2、路径和路径名
文件系统的每个目录和文件都必须有一个名字。
为了唯一地标识一个文件,我们需要指明从根目录到文件的文件路径。
文件路径由它的绝对路径名来指明。
相对于工作目录的路径,我们称为相对路径名。

七、文本文件与二进制文件
存储在存储设备上的文件是一个位的序列,可被应用程序翻译成一个文本文件或是二进制文件。
1、文本文件
文本文件是一个字符文件。在它们的内存储器格式中不能包含整数、浮点数或其他数据结构,要存储这些类型的数据,必须把它们转换成对应的字符格式。
2、二进制文件
二进制文件是用计算机的内部格式存储的数据集合。其中的数据只有当被程序正确地解释时才有意义。如果数据是文本格式的,就用一个字节来表示一个字符,如果数据是数字格式,则用两个字节或更多字节来表示。

第十四章 数据库 P261
一、目标
1、说明数据库和数据库管理系统(DBMS),并描述DBMS的组成;
2、描述基于ANSI/SPARC定义的DBMS的体系结构;
3、说明三种传统的数据库模型:层次、网络和关系;
4、描述关系模型和关系;
5、理解关系数据库中的操作,这些操作在SQL中有相应的命令;
6、描述数据库设计的步骤;
7、说明ERM和ER图,解释这种模型中的实体和关系;
8、说明正规化的层次和理解正则关系的基本原理;
9、列出除关系模型外其他的数据库类型。

二、引言
数据的存储传统上是使用单独没有关联的文件,有时称为平面文件。
1、定义
数据库是一个组织内被应用程序使用的逻辑相一致的相关数据的集合。
2、数据库的优点
冗余较少;避免不一致性;效率高;数据完整性;机密性

三、数据库管理系统
数据库管理系统(DBMS)是定义、创建、维护数据库的一种工具。由五部分构成:硬件、软件、数据、用户和规程。
1、硬件:是指允许物理上存取数据的计算机硬件系统。
2、软件:是指允许用户允许存取、维护和更新物理数据的实际程序。
3、数据:数据库中的数据存储在物理存储设备上。数据是独立于软件的一个实体。
4、用户:可以分为最终用户和应用程序。
最终用户是指直接从数据库中获取信息的用户。又可以分为数据库管理员(DBA)和普通用户。
应用程序是数据库中数据的其他使用者。应用程序需要存取和处理数据。
5、规程
必须被明确定义并由数据库用户遵循的规程或规则的集合。

四、数据库体系结构
美国国家标准协会/标准计划和需求委员会(ANSI/SPARC)为数据库管理系统建立了三层体系结构:内层、概念层和外层。
1、内层
内层决定了数据在存储设备中的实际存储位置。即内层直接与硬件交互。
2、概念层
概念层或称公用层定义数据的逻辑视图。DBMS的主要功能都在该层。
3、外层
外层直接与用户交互。将来自概念层的数据转化为用户所熟悉的格式和视图。

五、数据库模型
数据库模型定义了数据的逻辑设计,它也描述了不同数据之间的关系。在数据库设计发展史中,曾使用过三种数据库模型:层次模型、网状模型和关系模型。
1、层次模型
在层次模型中,数据被组织成一棵倒置的树。每个实体可以有不同的子节点。但只能有一个双亲。层次模型已过时。
2、网状模型
网状模型中,实体通过图来组织,图中的部分实体可通过多条路径来访问。该模型已经过时。
3、关系模型。
关系模型中,数据组织成称为关系的二维表。表或关系相互关联。
是数据库设计中最常用的模型。两种常用的、派生于关系模型的数据库模型:分布式数据库和面向对象数据库。

六、关系数据库模型
在关系数据库管理系统(RDBMS)中,数据通过关系的集合来表示。
1、关系
从表面上看,关系就是二维表。但这并不代表数据以表的形式存储。
2、特征
RDBMS的关系有下列特征:
名称:在关系数据库中,每一种关系具有唯一的名称。
属性:关系中的每一列都称为属性,属性在表中是列的头。
元组:关系中的行叫做元组。元组定义了一组属性值。

七、关系的操作
在关系数据库中,我们可以定义一些操作来通过已知的关系创建新的关系。
1、结构化查询语言
结构化查询语言(SQL)是ANSI和ISO用于关系数据库上的标准化语言。SQL于1979年首次被Oracle实现。
2、插入
插入是一元操作,它应用于一个关系。其操作是在表中插入新的元组。格式:
insert into RELATION-NAME
values (...,...,...)
values字句定义了要插入的相应元组的所有属性。
3、删除
删除也是一元操作,根据要求删除表中相应的元组。格式
delete from RELATION-NAME
where criteria
删除的条件是由where字句定义的。
4、更新
更新也是一元操作,应用于一个关系,用来更新元组中的部分属性值。格式
update RELATION-NAME
set attribute1 = value1,attribute2=value2,...
where criteria
要改变的属性定义在set字句中,更新的条件定义在where字句中。
5、选择
选择也是一元操作。应用于一个关系并产生另外一个新关系。新关系中元组是原关系元组的子集。选择操作根据要求从原表中选择部分元组。格式
select *
from RELATION-NAME
where criteria
* 表示所有的属性都被选择。
6、投影
投影也是一元操作,应用于一个关系并产生另外一个关系。新表中的属性(列)是原表中属性的子集。格式
select attribute-list
from RELATION-NAME
投影选择原表中的部分属性。
7、连接
连接是二元操作,它基于共有的属性把两个关系组合起来。格式:
select attribute-list
from RELATION1,RELATION2
where criteria
属性表是两个输入关系的属性组合。条件明确地定义了作为相同属性的属性。
8、并
并也是二元操作。将两个关系合并成一个新的关系。要求这两个关系必须有相同的属性。新关系中的每个元组或者在第一个关系,第二个关系,或者在两个关系中皆有。格式:
select *
from RELATION1
union
select *
from RELATION2
9、交
交也是二元操作。对两个关系操作,创建一个新关系。新关系中的每个元组必须是两个原关系中共有的成员。格式:
select *
from RELATION1
intersection
select *
from RELATION2
10、差
差也是二元操作,应用于相同属性的两个关系,生成的关系中元组是那些存在于第一个关系中而不在第二个关系中的元组。格式:
select *
from RELATION1
minus
select *
from RELATION2
11、语句的组合
SQL语言允许组合前面的语句,从数据库中抽取出更复杂的信息。

八、数据库的设计
数据库的设计是一个冗长的过程。第一步通常涉及与数据库潜在用户的面谈,去收集存取需求;第二步是建立一个实体关系模型(ERM),这种模型定义了一些信息需要维护的实体、这些实体的属性和实体间的关系;第三步是建立基于ERM的关系和规范化这些关系。
1、实体关系模型
这一步,数据库设计者建立了实体关系(E-R)图来表示那些信息需要保存的实体和实体间的关系。
常用
矩形表示实体集
椭圆形表示属性
菱形表示关系集
线连接属性和实体以及实体集和关系集。
关系可以是一对一、一对多、多对一和多对多。
2、从E-R到关系
E-R图完成后,关系数据库中的关系就能建立了。
2.1 实体集上的关系。
对于E-R图中的每个实体集,都需要创建一个关系。列对应属性。
2.2 关系集上的关系
对于E-R图中的每个关系集,我们都创建一个关系。关系中有一列对应这个关系所涉及的每个实体集的关键字。
3、规范化
规范化是一个处理过程,通过此过程给定的一组关系转化成一组具有更坚固结构的新关系。
规范化过程定义了一组层次范式。如果一个数据库的关系是3NF,那它首先应该是2NF。
3.1 第一范式(1NF)
实体或关系转换成表格式的关系时,有的关系的行或列的交集有多个值。可以通过重复又问题的行来规范化。
3.2 第二范式(2NF)
在每个关系中,我们需要有一个关键字(称为主键),所有的其他属性(列值)都依赖于它。当关系是根据E-R图建立的时,我们可能有一些复合的关键字(两个或两个以上关键字的组合),这种情况下,如果每个非关键字属性都依赖于整个复合关键字,那么这个关系就是第二范式的。
3.3 其他范式
其他范式使用属性间更复杂的依赖关系。

九、其他数据库模型
1、分布式数据库
分布式数据库模型并不是新的模型,它是基于关系模型的。数据库中的数据存储在一些通过因特网通信的计算机上,每台计算机拥有部分或全部数据库。
1.1 不完全的分布式数据库
在不完全的分布式数据库中,数据是本地化的。
1.2 复制似的分布式数据库
在复制似的分布式数据库中,每个站点都有其他站点的一个完全副本。
2、面向对象数据库
面向对象数据库在试图保留关系模型优点的同时允许存取结构化数据。在面向对象数据库中,定义了对象和它们的关系。每一个对象可以具有属性并以域的形式表达。

第十五章 数据压缩 P277
一、目标
1、区分无损压缩和有损压缩;
2、描述游程长度编码和它是如何实现压缩的;
3、描述赫夫曼编码和它是如何实现压缩的;
4、描述Lempel Ziv编码以及字典在编码和译码中的作用;
5、描述压缩静止图像的JPEG标准背后的主要思想;
6、描述压缩视频的MPEG标准背后的主要思想以及它与JPEG间的关系;
7、描述压缩音频的MP3标准背后的主要思想。
数据压缩意味着发送或是存储更少的位数。文本与程序通常是无损压缩,图像、音频、视频常是有损压缩。
二、无损压缩
在无损数据压缩中,数据的完整性是受到保护的。原始数据与压缩和解压后的数据完全一样。冗余的数据在压缩中时被移走,在解压时则再被加回去。
1、游程长度编码
也许是最简单的压缩方法。大致思想是将数据中连续重复出现的符号用一个字符和这个字符重复的次数来代替。如AAAAAAAA可以用A08来代替。
2、赫夫曼编码
在赫夫曼编码中,对于出现更为频繁的字符分配较短的编码,而对于出现较少的字符分配较长的编码。
2.1 编码
编码前文本 EAEBAECDEA
编码器(根据使用频率分配权值,根据权值构建二叉树,根据二叉树给定编码)===此处省略详细的生成编码器过程
A-00,B-010,C-011,D-10,E-11
赫夫曼编码:1100 11010 0011 01110 1100
2.2 译码
根据译码器,我们可以将编码即时明确翻译成编码。因为每个编码都是独一无二的。
3、Lempel Ziv编码
是称为基于字典的编码的一类算法的一个例子。即将字符串由字符串字典中的索引来代替,以减少通信的数据传输量。不实用。
一个实用的算法 Lempel Ziv算法,是基于字典的自适应编码的思想。
如字符串 BAABABBBAABBBBAA
3.1、压缩
在整个过程中需要同时做两件事:建立字典索引和压缩字符串。
算法从未压缩的字符串中选取最小的子字符串,然后将这个子字符串复制到字典中,并为它分配一个索引值。压缩时,除了最后一个字母之外,其他所有的字符被字典中的索引所代替。然后将索引和最后一个字母插入压缩字符串。
示例:
a、字符串 BAABABBBAABBBBAA
子字符串:B
字典:1-B
压缩:B
b、字符串 AABABBBAABBBBAA
子字符串:A
字典:1-B,2-A,
压缩:B,A
c、字符串 ABABBBAABBBBAA
子字符串:AB
字典:1-B,2-A,3-2B(AB去最后一个字符B,剩下的字符A的索引值是2)
压缩:B,A,2B
d,字符串 ABBBAABBBBAA
子字符串:ABB
字典:1-B,2-A,3-2B,4-3B
压缩:B,A,2B,4B
e,字符串 BAABBBBAA
子字符串:BA
字典:1-B,2-A,3-2B,4-3B,5-1A
压缩:B,A,2B,4B,1A
f,字符串 ABBBBAA
子字符串:ABBBB
字典:1-B,2-A,3-2B,4-3B,5-1A,6-4B
压缩:B,A,2B,4B,1A,4B
g,字符串 BAA
子字符串:BAA
字典:1-B,2-A,3-2B,4-3B,5-1A,6-4B,7-5A
压缩:B,A,2B,4B,1A,4B,5A

已压缩的字符串:B,A,2B,3B,1A,4B,5A
3.2 解压
解压是压缩的逆过程。从压缩的字符串中取出子字符串,然后尝试按照字典中所列出的记录还原相应索引号对应的字符串。

三、有损压缩
信息的丢失在文本文件或程序文件中是不能接受的,但在图片、视频或音频中,由于人类的眼睛和耳朵并不能够分辨出细小的差别,因此可以使用有损数据压缩。
一些成熟的有损压缩介绍:联合图像专家组(JPEG)用来压缩图片,运动图像专家组(MPEG)用来压缩视频,MPEG第三代音频压缩格式(MP3)则用来压缩声音。

1、图像压缩:JPEG
整体思想是将图像变换成一个数的线性集合来揭示冗余。而冗余(缺乏变化的)可以通过使用无损压缩的方法来除去。
1.1 离散余弦变换
1.2 量化
1.3 压缩

2、视频压缩:MPEG
原则上,一个运动的图像是一系列快速帧的序列,每个帧都是一副图像。
压缩视频就是对每帧空间上的压缩和对一系列帧时间上的压缩。
-空间压缩 每一帧的空间压缩使用JPEG(或改进版)。
-时间压缩 在时间压缩中,多于的帧将被丢弃。
为了压缩时间数据,MPEG方法首先将帧分成三类:I-帧,P-帧,B-帧。
I-帧是内部编码帧,是独立帧,与任何其他帧无关。周期性间隔出现。
P-帧,即预帧,与前面的I-帧或P-帧有关联。携带信息少。
B-帧,即双向帧,与前面和后续的I-帧或P-帧有关系。不会与另一个B-帧有关系。

3、音频压缩
语音需要压缩64kHz的数字化信号,而音乐需要压缩一个1.411MHz的信号。
3.1 预测编码
在预测编码中,样本间的差别被编码,而不是对所有的样本值进行编码。常用于语音。
3.2 感知编码:MP3
感知编码基于心理声学。想法是基于人类听觉系统的瑕疵,有些声音能够掩盖其他声音。掩盖可以发生在频率和时间上。
频率掩盖中,一个频率范围的高的声音可以部分或完全掩盖另一个频率范围的轻的声音。
时间掩盖中,一个高音可以短时间内降低人类听觉的灵敏度,甚至在声音停止之后。

第十六章 安全 P290
一、目标
1、定义三种安全目标(机密性、完整性和可用性)和威胁这些目标的攻击;
2、定义预防攻击的五种安全服务:数据机密性、数据完整性、验证、不可否认和访问控制;
3、讨论两种提供安全服务的技术:密码术和隐写术;
4、区分对称密钥密码术和非对称密钥密码术,显示如何用对称密钥或非对称密钥密码提供机密性;
5、说明如何使用密码散列函数来提供完整性;
6、讨论数字签名的思想以及它如何能提供消息完整性、消息验证和不可否认性;
7、简要讨论实体验证和证据的分类:所知道的、所拥有的和所固有的;
8、讨论实体验证中的四种技术:基于口令、质询-响应、零知识和生物测定;
9、讨论对称密钥和非对称密钥密码术中的密钥管理。

二、引言
1、安全目标
三个安全目标:机密性、完整性和可用性
1.1 机密性
机密性(保护信息机密,防止非授权访问)也许是信息安全中最常见的方面。
1.2 完整性
完整性的意思是变化只应该由授权的用户通过授权的机制来完成。
1.3 可用性
信息的安全的第三个部分是可用性。一个组织创建和存储的信息需要对授权用户和应用程序是可用的。

2、攻击
三个安全目标会受到安全攻击的威胁。
对机密性的威胁:嗅探、流量分析
对完整性的威胁:修改、假冒、回放、否认
对可用性的威胁:拒绝服务
2.1 威胁机密性的攻击
通常两种攻击:嗅探和流量分析。
嗅探是指对数据的非授权访问和侦听数据。
流量分析是入侵者通过在线流量监控收集其他类型的信息。
2.2 威胁完整性的攻击
修改是指攻击者修改信息,使得信息对他们有利。
假冒是指攻击者冒充其他人。
回放是指攻击者得到用户发送的消息的副本,过后设法回放它。
否认是一种不同于其他类型的攻击,因为它是由通信双方中的一个来进行的:发送者或接收者。
2.3 威胁可用性的攻击
拒绝服务(DoS)攻击可能减慢或完全中断系统的服务。分布式拒绝服务(DDoS).

3、安全服务
数据机密性用来保护数据,防止嗅探和流量分析。
数据完整性用来保护数据,防止攻击者修改、插入、删除和回复。
验证标识位于通信另一端的一方提供发送者和接收者的验证,也验证数据源。
不可否认放着数据的发送者或接收者的否认。
访问控制保护数据,防止非授权访问。

4、技术
4.1 密码术(Cryptography,秘密书写)
指为向入侵者隐藏消息的含义而进行消息转换的科学和艺术。
4.2 隐写术(steganography,掩饰书写)
通过在消息上覆盖其他内容而隐藏消息

三、对称密钥密码术
假设A通过一个不安全的信道向B发送一则消息,从A到B的原始消息称为明文,而通过信道发送的消息称为密文。为了从明文创建密文,A使用了一个加密算法和一个共享的密钥。为了从密文创建明文,B使用了一个解密算法和一个相同密钥。这个过程中需要保密的唯一的东西就是密钥。
1、传统密码
传统密码使用两种技术对入侵者隐藏消息:替换和置换。
1.1 替换密码
替换密码就是用一个符号替代另一个符号。
最简单的替换密码就是移位密码。
破解方法:采用暴力破解或频率分析。
1.2 置换密码
置换密码就是符号重新排序。
破解方法:采用频率分析。
2、现代对称密钥密码
现代密码是面向二进制单位的,明文、密文和密钥都是二进制位的串。
2.1 DES
数据加密标准(Data Encryption Standard,DES)是美国国家标准技术研究院(NIST)于1977年发布的一种对称密钥块密码。
加密地点,DES用64位明文并建立64位密文;在解密地点,DES用64位密文建立64位明文,同样的56位密钥被用于加密和解密。
2.2 AES
高级加密标准(Advanced Encryption Standard,AES)是NIST于2001年发布的一种对称密钥密码。
AES使用128位明文并建立128位密文,密钥为128位、192位或256位密码密钥。

四、非对称密钥密码术
在非对称密钥密码术中有不同的密钥:私钥和公钥。如果把加密和解密思想想象成是带有钥匙的挂锁的锁上和打开,那么用公钥锁上的挂锁只能被相应的私钥打开。
首先,非对称密钥密码术强调密码系统的非对称性质,即由接收者提供公钥分发给社区,接收信息后用私钥打开。
其次,非对称密钥密码术意味着双向通信中不能使用同一组密钥。即在通信中的每个个体应该创建自己的私钥和公钥。
第三,非对称密钥密码术意味着团体中如果有n个人,就会有n个公钥存在。
1、明文/密文
明文和密文被当做整数来对待。
在加密之前,消息必须被编码成一个长整数(或一组长整数),在解密之后整数(或一组整数)必须被译码成信息。非对称密钥密码术通常被用来加密或译码少量的信息。
2、加密/解密
最常用的公钥算法是RSA算法。
接收者选择两个素数p和q,创建模n=p*q,然后计算出两个指数e和d。
接收者的公钥是n和e,私钥是d。如果P是明文,C是密文。加密和解密就表示为:
加密:C=P^e mod n
解密:P=C^d mod n

五、对称密钥方法和非对称密钥方法

1、秘密记号的数目
对称密钥密码术是基于共享秘密。
非对称密钥密码术是基于个人秘密。

2、两个系统的一个共同需要
在对称密钥密码术中,符号被置换或替代。
在非对称密钥密码术中,对数字进行操作。


六、其他安全服务
1、消息完整性
保护文件完整性的一种方法是通过使用指纹。
文件和指纹对的电子等价物就是消息和摘要对。
消息通过一个密码散列函数的算法,生成消息摘要。
检查完整性时,再次运行密码散列函数,然后对比新旧两个消息摘要即可。
2、消息验证
由密码散列函数创建的摘要通常称为修改检测码(MDC),代码能检测出消息中的任何修改。
对于消息验证(数据起源验证),我们需要消息验证码(MAC)。MDC与MAC是区别在于后者包含了发送者和接收者间的秘密。
3、数字签名
3.1 数字签名过程
发送者使用签名算法来签署信息,消息和签名被发送给接收者。接收者收到消息和签名,使用验证算法来结合。
数字签名需要公钥系统。签署者用私钥签署,验证者用签署者的公钥验证。
密码系统使用接收者的私钥和公钥,数字签名使用发送的私钥和公钥。
3.2 签署摘要
即签署消息的摘要。
3.3 服务
3.3.1 消息验证
一个安全的数字签名模式就像一个安全常规的签名,能提供消息验证,也称为数据起源验证。
3.3.2 消息完整性
当今的数字签名模式在签署和验证算法中使用了散列函数,保护了消息的完整性。
3.3.3 不可否认性
解决方案是可信第三方。
3.3.4 机密性
数字签名不提供机密通信。
4、实体验证
用来使得一方证明另一方身份的一种技术。
4.1 数据起源与实体验证
消息验证(数据起源验证)和实体验证的区别:
消息验证可能不会实时发生,而实体验证是会的。
消息验证简单地验证一则消息,这一过程需对每则新的消息重复。实体验证则在一整个会话期间内验证要求者。
4.2 验证分类
所知道的:这是一种只有要求者知道的秘密,证明者可以通过它来检查要求者,如密码、PIN码、密钥和私钥。
所拥有的:能证明要求者的身份。如护照、驾驶证、身份证、信用卡等。
所固有的:要求者内在固有的特性。如签名、指纹、声音、面部特征、视网膜特征、笔迹等。
4.3 口令
基于口令的验证是最简单最古老的实体验证。
4.4 质询-响应
在质询-响应验证中,要求者证明他们知道秘密,而不需要把秘密暴露给证明者。
4.5 零知识
在零知识验证中,要求者不暴露任何维基秘密的机密性东西。
4.6 生物测定
生物测定是标识一个人的生理上或行为上特征的测量。

七、密钥管理
为了使用对称密钥密码术,在通信双方间需要建立一个共享的密钥。
密钥管理定义了创建密钥的过程和安全密钥分发。
1、对称密钥分发
在对大量消息进行加密时,对称密钥密码术的效率比非对称密钥密码术要高。但,对称密钥密码术需要在双方间共享密钥。
因此一个实用的解决方案是使用可信第三方,被称为密钥分发中心(KDC)。
2、公钥分发
在公钥密码术中,每个人有权访问每个人的公钥,公钥对公众可用。
2.1 公开声明
一种不成熟的方法是公开地声明公钥。
有伪造的可能。
2.2 可信中心
一种较为安全的方法是使用一个可信中心来保存公钥目录。
2.3 认证机构
认证机构(CA)把公钥和实体捆绑在一起并处理认证的政府机构。

 

第十七章 计算理论
一、目标
1、描述我们成为简单语言(Simple Language)的编程语言,并定义它的基本语句;
2、在简单语言中,使用简单语言的复合写出宏;
3、描述作为计算机模型的图灵机的构成;
4、使用图灵机,显示简单语言中简单语句是如何被模拟的;
5、理解邱奇-图灵理论和它的含义;
6、定义歌德尔数和它的应用;
7、理解停机问题的概念和问题不可解是如何证明的;
8、区分可解和不可解问题;
9、区分多项式和非多项式可解问题。

二、简单语言
我们可以仅用三条语句来定义一种语言,它们是递增语句、递减语句和循环语句。
1、递增语句
递增语句对变量加1。
2、递减语句
递减语句从变量中减1.
3、循环语句
循环语句是在变量的值不为0时,重复进行一个动作(或一系列动作)。
4、简单语言的威力
4.1 简单语言中的宏
我们把每次模拟称为一个宏,等价于相同语言中的一条或多条指令的特定集合。
第一个宏:X←0,给变量X赋值为0,有时叫做清空变量。
第二个宏:X←n,将一正整数值赋值给变量X,首先清空变量X,然后对X递增n次。
第三个宏:Y←X。
第四个宏:Y←Y+X。
第五个宏:Y←Y*X。可以使用加法宏,整数的乘法可以用重复的加法来模拟。
第六个宏:Y←Y^X。可以使用乘法宏来完成它。
第七个宏:if X then A. 变量X的值只能是0或1这两个值之间的一个。
while(X){
decr(X)
A
}
其他宏:同样可以建立。
4.2 输入和输出
Read X可以用(X←n)来模拟。

三、图灵机
图灵机是1936年由阿兰·图灵提出用来解决可计算问题的。
1、图灵机组成部件
由三部分组成:磁带、控制器和读/写头
1.1 磁带
用来保存一系列顺序字符,该字符来自计算机所能接收的字符集中。
1.2 读/写头
读/写头任何时刻总是指向磁带上的一个符号,我们称这个符号为当前符号,读/写头每次在磁带上读写一个符号。读写完一次后,在控制器指令下左移、右移或留在原地。
1.3 控制器
理论上功能作用类似于现代计算机中央处理单元的一个部件。是一个有限状态的自动机。
可以建立一个每一行代表一个状态的状态转移表,类似为简单计算机建立的指令集。
2、对简单语言的模拟
2.1 递增语句
2.2 递减语句
2.3 循环语句

3、邱奇-图灵论题
如果存在一个能完成一个符号操纵任务的算法,那么也存在一台完成这个任务的图灵机。

四、歌德尔数
一个无符号数能被分配给任何用特定语言编写的程序,这个数通常被称为歌德尔数。
如用一个简单的变换给用简单语言编写的程序编号。
符号 十六进制编码
1~9 1~9
incr A
decr B
while C
{ D
} E
X F
1、表示一个程序
将每一个符号用表中所给的对应十六进制代码替代,然后将最后的结果转化为无符号整数。

incr X → (AF)16 → 175
2、翻译一个数字
将数字转换成十六进制数,再将十六进制数翻译成对应的符号,忽略0.

3058 → (BF2)16 → decrX2 → decr(X2) [X的下标为2]

五、停机问题
几乎每一个用简单语言编写的程序都包含某种形式的重复,也就是说一个含有无限循环的程序可以永远运行。
那么,能否编写一个程序来测试任何可以用歌德尔数表示的程序是否会终止?
事实上:停机问题是不可解决的。

六、可解问题和不可解问题
一般来说,问题可以分为两类,可解问题和不可解问题。
可解问题又分为:多项式问题和非多项式问题。
1、不可解问题
证明一个问题能否解决等同于证明停机问题能否解决。
2、可解问题
问题如果可解,那么它有多复杂?一种衡量方法是运行时间
3、可解问题的复杂度
衡量可解问题复杂度的一个方法是找出计算机运行该程序要执行的运算数量。
3.1 大O表示法
在该表示法中,运算数量表示为输入量的函数。符号O(n)表示有n个输入,执行n个运算,符号O(n^2)表示有n个输入,执行n^2个运算。
3.2 多项式问题
如果程序的复杂度为O(log n)、O(n)、O(n^2)、O(n^3)、O(n^4)或O(n^k),则被称为多项式问题。
对于一个有合理输入数量的多项式问题,我们都能解决。
3.3 非多项式问题
如果一个程序的复杂度远比多项式问题复杂,如O(10^n)或者O(n!),当输入数很小(小于100),这种问题可以解决。输入数很多,要花很长时间才能看到非多项式问题的解决结果。


第十八章 人工智能 P326
一、目标
1、定义并叙述人工智能的简史;
2、描述知识在智能体中是如何表示的;
3、说明当人类专家不可用时,专家系统是如何使用的;
4、说明如何用人工智能体来模仿人类完成任务;
5、说明人工智能中两种不同的搜索方法;
6、说明计算机是如何模仿人类的学习过程的。

二、引言
1、什么是人工智能
人工智能是对程序系统的研究,该程序系统在一定程度上能模仿人类的活动,如感知、思考、学习和反应。
2、简史
莱布尼茨和牛顿完成逻辑语言的定稿,乔治·布尔的布尔代数奠定了计算机电子电路的基础。思维计算机的主要思想来自于阿兰·图灵的图灵测试。
3、图灵测试
该测试提出了机器具有智能的一个定义,即人类不能区分问题的答案来自人类还是计算机。
4、智能体
是一个能够智能地感知环境、从环境中学习并与环境进行交互的系统。
4.1 软件智能体
一组用来完成特殊任务的程序。
4.2 物理智能体
一个用来完成各项任务的可编程系统。
5、编程语言
两种语言特别为人工智能设计,LISP和PROLOG
5.1 LISP
LISP是一种操作表的编程语言,LISP把数据和程序都当成表。
缺点是 行动迟缓,语法复杂。
5.2 PROLOG
一种能建立事实数据库和规则知识库的编程语言。
缺点是 效率不是很高。

三、知识表示
事实被表示成数据结构就能被存储在计算机中程序操纵。有四种常见的知识表示方法。
1、语义网
语义网是Richard H.Richens在20世纪60年代提出。使用有向图表示知识。语义网用顶点代表概念,用边(用箭头表示)表示两个概念间的关系。
1.1 概念
概念被看成一个集合或一个子集。对象是集合中的成员(实例),概念用顶点表示。
1.2 关系
在语义网中,关系用边表示。边可以定义一个“子类”关系、“实例”关系,边也可以定义一个对象的属性。边还可以定义一个对象的所有权。
语义网能很好定义的最重要的关系是“继承”。

2、框架
在框架中,数据结构(记录)用来表示相同的知识。
2.1 对象
语义网中的一个节点变成了一组框架中的一个对象,所有一个对象可以定义一个类,一个子类或类的一个实例。
2.2 槽
语义网中的边被翻译成“槽”(数据结构中的域)。槽的名字定义了关系的类型和构成关系的槽的值。
3、谓词逻辑
谓词逻辑是最常见的知识表示。谓词逻辑使用了命题逻辑。
3.1 命题逻辑
命题逻辑是由对世界进行逻辑推理的一组句子组成的一种语言。
3.1.1 运算符
命题逻辑使用了五种运算符,¬(非)、∨(或)、∧(与)、→(如果...那么)、↔(当且仅当)
3.1.2 句子
递归定义:
a、大写字母(如A、B、S或T)表示自然语言中的一个语句,它们是一个句子。
b、两个常数值(真和假)中的任意一个都是句子。
c、如果P是句子,则¬P也是句子。
d、如果P和Q是句子,那么 P∨Q,P∧Q,P→Q,P↔Q都是句子。
3.1.3 推演
给定两个假定为真的句子,我们能推演出新的为真的句子,前面两个句子称为前提,推演出的句子称为结论,而整个称为论断。
验证论断合法性的一种方法是为前提和结论建立真值表。如果我们在其中发现了反例,那么结论就是非法的,如:所有的前提都为真,而结论却是假。
当找不到反例时,论断就是合法的。
3.2 谓词逻辑
命题逻辑中,表示句子的符号是原子的。
谓词逻辑定义了命题各部分间的关系。
3.2.1 句子
谓词逻辑语言中的句子的定义如下:
a、一个带有n个参数的谓词,每个参数可以是一个常数、一个变量、一个函数。
b、两个常数值(真和假)中的任一个都是句子。
c、如果P是句子,则¬P也是句子。
d、如果P和Q是句子,那么 P∨Q,P∧Q,P→Q,P↔Q都是句子。
3.2.2 量词
谓词逻辑允许使用量词,在谓词逻辑中的两个常用的量词是∀和∃。
第一个词,∀,读成"所有的"(for all),被称为 全称量词。表明变量所表示的全部对象某些事为真。
第二个词,∃,读成"存在"(there exists),被称为 存在量词,它表明变量所表示的一个或多个对象某些事为真。
3.2.3 推演
在谓词逻辑中,如果没有量词,一个论断的真假确认与命题逻辑完全相同。但当有量词时,判断就变得复杂多了。
3.3 超谓词逻辑
逻辑推理的进一步发展出现了 高阶逻辑、默认逻辑、模态逻辑和时态逻辑。
高阶逻辑扩展了谓词逻辑中量词∀和∃的范围。
模态逻辑包含了"could"/"should"/"may"/"might"/"ought"等表达式,来表达句子中语法上的语气。
时态逻辑像模态逻辑一样,用一套时态运算符扩展了谓词逻辑,包含了论断合法性中的时间因素。
默认逻辑,假定论断的默认结论可以被接收,只要论断与知识库中的内容相一致即可。
4、基于规则的系统
基于规则的系统使用一组规则来表示知识,这些规则能用来从已知的事实中推导出新的事实。
规则表示当指定条件满足时什么为真。
4.1 组成
基于规则的系统由三部分构成:解释器(或推理机)、知识库和事实库。
知识库是规则的数据库,包含一组预先建立的规则。
事实库中包含了知识库中的规则要使用的一组条件。
解释器是一个处理器或控制器,把规则和事实组合在一起。有两种类型:正向推理和反向推理。
4.2 正向推理
过程:解释器使用一组规则和一组事实来执行一个行动。
4.3 反向推理
过程:从一个结论(目标)开始,如果目标已在事实库中,则过程停止,结论得到验证。

四、专家系统
专家系统使用前面所讨论的知识表示语言,来执行通常需要人类专家才能完成的认为。
1、抽取知识
专家系统是建立在预先定义的相应领域专家经验的基础上的。
2、抽取事实
为了能够推导新的事实或采取动作,除了需要知识表示语言表示的知识库外,还需要事实库。
3、体系结构
一个专家系统由7个部分构成:
用户;使用系统的实体。
用户界面:允许用户与系统交互。能接受用户的自然语言,然后把它们翻译给系统。
推理机:专家系统的心脏,与知识库、事实库和用户界面进行通信。
知识库:基于与相关领域专家的会面而得到的知识的集合。
事实库:在专家系统中是基于事例的。
解释系统:用来解释推理机得出的结论的合理性。
知识库编辑器:当从领域专家那里获得新的经验时,用来更新知识库

五、感知
1、图像处理
图像处理或计算机视觉,处理通过像摄像机这样的智能体的人工眼睛而获得的对对象的感知。
1.1 边缘探测
图像处理的第一步是边缘探测。边缘显示了在表面、深度或亮度方面的不连续性。
1.2 分段
分段(segmentation)把图像分成同构的段或区域。
有阈值化、分割、合并等方法来进行处理。
1.3 查找深度
深度的查找可以帮助智能体测量对象距它多远。有立体视觉和运动两种方法。
立体视觉使用人类眼睛的技术来发现对象的深度。两台摄像机创建的图像能帮助智能体判定对象是近还是远。
运动,当图中一个或多个对象移动时,相对位置能给出对象距离的提示。
1.4 查找方向,两种技术
光照 ,反射光线的总量可以显示对象表面的方向。
纹理,有规律重复的图案能对查找方向或表面的曲率有所帮助。
1.5 对象识别
当智能体"看"到对象时,它就进行对象的分解,把对象分解成原始形状的组合。
2、语言理解
机器理解自然语言的任务分成四个连续的步骤:语音识别、语法分析、语义分析和语用分析。
2.1 语音识别
分析语音信号,提取单词序列。
2.2 语法分析
用来定义单词在句子中是如何组织的。
2.2.1 文法
正确分析句子的第一个工具是良好定义的文法。
2.2.2 词法分析器
词法分析器基于文法规则建立一棵词法分析树来判断一个句子的合法性。
2.3 语义分析
在句子被语法分析之后提取出句子的意思。
2.4 语用分析
进一步明确句子的意图和消除歧义。
2.4.1 意图:上面三个步骤不能发现句子的意图。语用分析可以发现。
2.4.2 消除歧义: 如果可能的话,语用分析从句子的知识表示中消除含糊。

六、搜索
搜索可以描述成使用状态(情形)集合来求解问题。
搜索过程起始于一个起始状态,经过中间状态,最后到达目标状态。
搜索过程所使用的全部状态的集合称为搜索空间。
1、搜索方法
有两种常用的搜索方法:蛮力搜索和启发式搜索。蛮力搜索本身又分为广度优先和深度优先。
1.1 蛮力搜索
当对搜索没有任何先验的知识时,我们就使用蛮力搜索。
1.1.1 广度优先搜索
在这种方法中,我们从树的根开始,在我们走向下一层前,检查当前层中的所有节点。
1.1.2 深度优先搜索
在这种方法中,我们从树的根开始,做一个向前搜索,直至发现目标或到达一个死端,如果到达了死端,我们回溯到最近的分支,然后再次向前搜索。继续这样的过程,直至达到目标。
1.2 启发式搜索
使用启发式搜索,我们给每个节点赋一个称为启发值(h值)的定量值。这个定量值显示了该节点与目标节点间的相对远近。

七、神经网络
学习是一种复杂的生物现象。人工智能体的学习方法多是归纳学习法或从例子中学习。
神经网络试图使用神经元网络去模仿人脑的学习过程。
1、生物神经元
神经键是神经元的轴突和其他神经元的树突的连接点。
树突从相邻的神经元中收集电信号,把它传给胞体。
神经键的工作就是给传到相邻的神经元的信号上加上权重。
一个神经元有两种状态:兴奋和抑制。兴奋会触发一个输出信号,抑制不触发或产生输出。
2、感知器
感知器是一个类似于单个生物神经元的人工神经元。它带有一组具有权重的输入,对输入求和,把结果与阈值进行比较,如果结果大于阈值,感知器触发,否则不触发。
3、多层网络
几个层次的感知器可以组合起来,形成多层神经网络。每一层的输出变成下一层的输入。
4、应用
光学字符识别(OCR)和信用赋值。


附录
Unicode
UML
伪代码
结构图
布尔代数和逻辑电路
C/C++/Java程序实例
数学复习
错误检测和纠正



转载于:https://www.cnblogs.com/yexingzhiguang/p/6360060.html

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值