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

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

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

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

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

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

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

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


第二章 数字系统 P25小程序

1、本章目标
一、理解数字系统的概念;
二、分清非位置化和位置化数字系统;
三、描述十进制系统、二进制系统、十六进制系统、八进制系统
四、将二进制、八进制或十六进制数字转换为十进制系统
五、将十进制数字转化为二进制、八进制或十六进制系统
六、二进制和八进制、二进制和十六进制数字相互转化
七、查找在各类系统中表明特定数值所需的数码数组

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

第三章 数据存储 P41缓存

1、本章目标
一、5种不一样的数据类型
二、不一样的数据如何以位模式存储在计算机内部
三、整数如何以无符号格式存储在计算机中
四、整数如何以符号加绝对值格式存储
五、整数如何以二进制补码格式存储
六、实数如何以浮点格式存储在计算机中
七、文本如何经过各类不一样的编码系统存储在计算机
八、音频如何经过采样、量化和编码存储在计算机中
九、图像如何经过光栅和矢量图模式存储在计算机中
十、视频如何经过以图像随时间变化的表示来存储在计算机中
2、数据类型
一、数据类型:数字、文本、音频、视频
二、计算机内部的数据
位(bit)是存储在计算机中的最小单位,是0/1
为了表示数据的不一样类型,使用位模式,长度为8的位模式称为一个字节,byte
三、存储数字
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位表示尾数
四、存储文本
ASCII码(美国信息交换标准码) 表示2^7=128 种符号
Unicode,使用32位存储
五、存储音频
5.1 采样、量化、编码
5.2 声音编码标准 MP3(MPEG layer3)
六、存储图像
光栅图与矢量图
6.1 光栅图:
解析度:在图像处理中的扫描率称为解析度。
色彩深度、真彩色-1600万色 与 索引色-256色
编码标准:JPEG(真彩色)、GIF(索引色)
6.2 矢量图
几何模型、面向对象图像
七、存储视频
视频是图像在时间上的表示(称为帧)。


第四章 数据运算 P64

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


第五章 计算机组成 P80

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

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

第六章 计算机网络 P111
1、学习目标
一、描述网络标准、物理结构和网络分类
二、区分互联网internet与因特网Internet
三、描述做为因特网网络模型的TCP/IP协议族
四、定义TCP/IP协议族中的各层以及它们的关系
五、讨论因特网的客户/服务器体系结构
六、描述三种因特网早期应用:电子邮件、文件传输和远程登陆
七、理解做为因特网最多见应用的万维网及其组成
八、区分三种因特网文档类型:静态文档、动态文档和活动文档
九、列出其余因特网应用,如视频会议、分组讨论和聊天
2、引言
一、网络是硬件和软件的组合,把数据从一个地方发送到另外一个地方。
二、网络标准
2.1 性能,传输时间和响应时间。
2.2 可靠性,发送的准确性、发生故障的频率
2.3 安全,保护数据,防止非受权访问、损坏和修改
三、物理结构
3.1 链接类型
网络由两个或两个以上经过链路链接的设备构成。链路是数据从一个设备传输到另外一个设备的通讯通道。点对点链接与多点链接
3.2 物理拓扑
网络的拓扑是全部链路和设备间关系的几何表示,基本结构是网状型、星型、总线型、环型
高速局域网最常使用的拓扑是星型拓扑
四、网络分类
4.1 局域网,LAN,为我的计算机或工做站间的资源共享而设计的。
4.2 广域网,WAN,提供长距离的数据、图像、音频和视频信息的传输。
4.3 城域网,MAN,大小结余LAN与WAN之间的网络,用来为那些须要高速链接且终端点分布在一个城市或城市一部分的客户服务。
五、互联网 internet
网络是一组链接在一块儿的通讯设备,而互联网是可以互相通讯的两个或多个网络。路由器是发送数据包(消息),并使其在互联网中传输的链接设备。
六、因特网,Internet
由成千上万个互相链接的网络组成。使用ISP的服务。
3、TCP/IP协议族
为了分解完成任务所需的服务,因特网建立了一组规则,称为协议。协议容许使用不一样技术的局域网和广域网互相链接到一块儿,从一点向另外一点传送消息。控制因特网的一组协议称为TCP/IP协议族。
原始的TCP/IP协议族被定义成4层,网络与链路层、网络层、传输层和应用层。
现在的TCP/IP协议一般被定义成5层,物理层、数据链路层、网络层、传输层、应用层。
4、层
一、应用层:负责向用户提供服务。
应用层容许用户访问网络,是惟一一个大多数因特网用户可以看到的层。
1.1 客户/服务器体系结构
运行服务器端程序的计算机称为服务器,而运行客户端程序的计算机称为客户,服务端程序须要一直运行,而客户端程序只在须要时运行。
客户端程序和服务端程序间的通讯称为进程到进程的通讯,由于运行在这种体系结构中程序称为进程。
1.2 应用层地址
为了标识一个特殊的HTTP站点,客户使用统一资源定位符(URL)。服务器应用层地址不是用来发送消息的,只是帮助客户找到服务器计算机的实际地址。
网络中的每台计算机都有一个称为逻辑地址或IP地址的地址。
二、传输层:负责客户和服务器进程间的消息的逻辑传输。
传输层负责整个消息的进程到进程的传输——创建客户和服务器计算机的传输层的逻辑通讯。
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.1 网络层地址
从客户端到服务器的数据包和从服务器返回的数据包须要网络层地址。
网络层使用它的路由表找到下一跳的逻辑地址,把这个地址传递给数据链路层,使用数据链路层须要的这个逻辑地址来找到下一个路由器的数据链路层地址。
3.2 路由选择
网络层的一个特殊的职责:路由选择。路由选择是肯定数据包的部分或所有路径。
路由基于目的地址和可用的最佳路径来选择的。
3.3 网络层协议
TCP/IP 协议族支持一个主协议(IP)和几个辅助协议,帮助IP完成它的职责。
3.3.1 网络层的主协议是因特网协议(IP),有IPv4和IPv6两个版本,IP提供了尽力而为服务。
3.3.2
辅助协议
四、数据链路层:负责数据帧的节点到节点的发送
网络层数据包可能在从源到目的地的传输中通过多个路由器。从一个节点到另外一个节点传送数据是数据链路层的职责。
4.1 数据链路层地址
与IP地址不一样,数据链路层的地址不是通用的。每一个数据链路协议可能使用不一样的地址格式和大小。以太网协议使用48位地址,常被写成十六进制格式,分为6部分,每部分两位十六进制数,如
07:01:02:11:2C:5B
数据链路层地址常被成为物理地址或 介质访问控制(MAC)地址。
4.2 差错控制和流量控制
方法与传输层相同
五、物理层
完成在物理介质上传输二进制流所须要的功能。
物理层传送的单元是二进制位,物理层的传播方式是广播。
六、层的总结
在应用层,进程交换消息;在传输层,数据单元被称为段、用户数据报或包;在网络层,数据单元被称为数据报;在数据链路层,数据单元被称为帧。最后,在物理层,数据单元是二进制位。
各层的另外一个特性:封装。
5、因特网应用
一、电子邮件
1.1 邮件访问协议
POP,邮局协议
IMAP,因特网邮件访问协议
1.2 地址
一个电子邮件处理系统必须有惟一的地址系统来分发邮件。SMTP使用的地址系统由两部分组成:本地部分和域名,中间用@符号隔开。
1.3 多用途因特网邮件扩充协议(MIME)
容许非ASCII数据经过SMTP传输的补充协议,MIME不是一个电子邮件协议,不能替代SMTP,只是SMTP的扩展
二、文件传输协议
FTP是因特网上最多见任务的标准机制,用于从一台计算机拷贝文件到另外一计算机。
FTP与其余客户/服务器应用不一样,它在两主机间创建两个链接。一个链接是用来传输数据的;另外一个链接是用来控制信息(命令和响应)的。命令和数据的分开传输使得FTP效率更高。
三、远程登录——TELNET
TELNET是多用途的客户/服务器程序,容许用户访问远程计算机上的任何应用程序。
四、万维网
分布式客户/服务器服务
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)
五、活动文档
对于许多应用来讲,须要在客户端运行程序或脚本。这些应用被称为活动文档。
有Java小程序、JavaScript
五、其余因特网应用
5.1 视频会议
5.2 分组讨论
5.3 聊天

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

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

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

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

第九章、程序设计语言 P176
1、学习目标
一、描述从机器语言到高级语言的编程语言演化;
二、理解如何使用解释器或编译器将高级语言中的程序翻译成机器语言
三、区分四种计算机语言模式;
四、理解过程式模式和在模式中程序单元与数据项间的交互;
五、理解面向对象模式和在这种模式中程序单元与对象间的交互;
六、定义函数式模式,理解它的应用;
七、定义说明式模式,理解它的应用;
八、定义过程式和面向对象语言中的常见概念
2、演化
计算机语言是指编写程序时,根据事先定义的规则(语法)而写出的预约语句的集合。计算机语言已经从机器语言演化到高级语言。
一、机器语言
在计算机发展的早期,惟一的程序设计语言是机器语言。
机器语言是计算机硬件惟一能理解的语言。
二、汇编语言
用带符号或助记符的指令和地址代替二进制代码的语言被称为符号语言,这些助记符语言后来被称为汇编语言。
用于将汇编语言代码翻译成机器语言的特殊程序是汇编程序。
三、高级语言
高级语言使程序员可以将精力集中在应用程序上,其设计目标就是使程序员摆脱汇编语言繁琐的细节。有BASIC、COBOL、Pascal、Ada、C、C++、Java.
高级语言被转化为机器语言的过程称为解释或编译。
3、翻译
高级语言为了在计算机上运行,需被翻译成机器语言。高级程序被称为源程序,被翻译成的机器语言程序称为目标程序。有两种方法:编译和解释。
一、编译
编译程序一般把整个源程序翻译成目标程序。
二、解释
解释是指把源程序中的每一行翻译成目标程序中相应的行,并执行它的过程。
2.1 解释程序的第一种方法( Java语言以前的第一种方法)
源程序的每一行被翻译成被其使用的计算机上的机器语言,该行机器语言被当即执行。有错误,过程显示消息,其他的过程终止,程序被改正后再次重头解释和执行。
2.2 Java使用的解释程序
Java源程序首先被编译,建立Java的字节代码,字节代码而后能被任何运行JVM虚拟机的计算机编译或解释。
三、翻译过程
编译在执行前翻译整个源代码,而解释一次只翻译和执行源代码中的一行。
3.1 词法分析器
词法分析器一个符号接一个符号地读源代码,建立源语言中的助记符表。
3.2 语法分析器
语法分析器分析一组助记符,找出指令。
3.3 语义分析器
语义分析器检查语法分析器建立的句子,确保它们不含有二义性。
3.4 代码生成器
在无二义性的指令被语义分析器建立后,每条指令将转化为一组程序将要在其上运行的计算机机器语言。这个由代码生成器完成。
4、编程模式
模式是一种计算机语言看待要解决问题的方式。分为4种模式:过程式、面向对象、函数式和说明式。
一、过程式模式
在过程式模式中,程序被当作操纵被动对象的活动主体。
表明有,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
特征:有其余过程式语言那样的高级指令、有容许实时处理的指令、具备并行处理能力。
二、面向对象模式
面向对象模式处理活动对象,而不是被动对象。在过程式模式中的过程是独立的实体,但面向对象模式中的方法是属于对象领地。
表明有: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++的基础上发展而来,移除了一些特性,从而健壮性更好。是彻底面向类操做。
三、函数式模式
在函数式模式中程序被当作是一个数学函数,主要实现如下功能:
定义一系列可供任何程序员调用的原始(原子)函数
容许程序员经过若干原始函数的组合建立新的函数。
相对于过程式语言具备两方面优点:支持模块化编程而且容许程序员使用已经存在的函数来开发新的函数。
表明有:LISP/Scheme
3.1 LISP
表处理解释语言(LISt Programming,LISP)
3.2 Scheme
LISP没有统一标准化,实际使用的标准有MIT在20世纪70年代早期开发,称为模式。
四、说明式模式
说明式模式依据逻辑推理的原则响应查询。
表明有:Prolog
栗子
human(John)
mortal(human)
用户询问
? -mortal(John)
程序响应 yes
5、共同概念
一、标识符
过程式语言的共同特色之一就是都具备标识符。
标识符容许给程序中的数据和其余对象命名。
二、数据类型
数据类型定义了一系列值及应用于这些值的一系列操做。每种数据类型值的集合称为数据类型的域。大多数语言都定义了两类数据类型:简单数据类型和复合数据类型。
2.1 简单数据类型
简单数据类型是不能分解成更小数据类型的数据类型。有:
整数类型是不包括小数部分的完整的数。
实数类型是带小数部分的数字。
字符类型是语言使用的潜在字符集中的符号
布尔类型是只取两个值(真/假)的数据类型
2.2 复合数据类型
复合数据类型是一组元素,其中每一个元素是简单数据类型或复合数据类型。有:
数组是一组元素,元素的类型相同。
记录是一组元素,元素的类型能够不一样。
三、变量
变量是存储单元的名字。
3.1 变量声明
大多数过程式语言和面向对象语言要求变量在使用前被声明。
3.2 变量初始化
变量在声明和定义时能够进行初始化,即在变量中存储一个值。
四、字面值
字面值是程序中使用的预约义的值。
五、常量
常量是一个能够存储值的命名的位置。一样是有类型。
六、输入和输出
几乎全部的程序都须要输入和(或)输出数据。
6.1 输入
数据或者经过语句或者经过预先定义的函数完成输入。
6.2 输出
数据或者经过语句或者经过预先定义的函数来完成输出。
七、表达式
表达式是由一系列操做数和运算符简化后的一个单一数值。
7.1 运算符
运算符是用来完成一个动做的特定语言的语法记号。每一种语言都有运算符,在语法或规则等方面的使用是严格定义的。有:
算术运算符,如+ - * / ++ --
关系运算符,如< <= > >= == !=
逻辑运算符,如! && ||
7.2 操做数
操做数接收一个运算符的动做。
八、语句
每条语句都使程序执行一个相应动做,被直接翻译成一条或者多条计算机可执行的指令。
8.1 赋值语句
赋值语句给变量赋值。使用 符号←定义赋值
8.2 复合语句
复合语句是一个包含0个或多个语句的代码单元,也被称为块。通常包括一个左大括号、一个可选语句段以及一个右大括号。
8.3 控制语句
控制语句与选择和重复有关。
选择语句由两路和多路选择语句。
重复语句,C/C++/Java中有while、for、do..while三种语句
九、子程序
完成单一任务的这些过程的子集能集合在一块儿,放在它们本身的程序单元中,也就是子程序。
9.1 局部变量
当子程序每次被调用时这些局部对象或局部变量被建立,当控制从子程序返回时被销毁。
9.2 参数
子程序可能须要做用于主程序建立的对象,在此时程序使用参数。在主程序中称为实际参数,在子程序中称为形式参数。
有传值和传引用两种方式。
9.3 传值
在传值参数中,主程序和子程序的通讯是单向的,从主程序到子程序,主程序传递实际参数的值,存储到子程序中相应的形式参数中。从子程序到主程序没有参数的通讯。
9.4传引用
传引用被设计来容许子程序改变主程序中变量的值。在传引用中,变量被主程序和子程序共享。
9.5 返回值
子程序能够被设计成返回一个或几个值。
9.6 实现
子程序概念在不一样的语言中不一样,在C/C++中,子程序被实现为函数。

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

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

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

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

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

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

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

第十二章 抽象数据类型 P226
1、目标
一、说明抽象数据类型(ADT)的概念
二、说明栈、栈上的基本操做、它们的应用和它们是如何实现的;
三、说明队列、队列上的基本操做、它们的应用以及它们是如何实现的;
四、说明广义线性表、广义线性表上的基本操做、它们的应用以及它们是如何实现的;
五、说明通常的树和它的应用;
六、说明二叉搜索树(BST)和它的应用;
七、说明图和它的应用。

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

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

二、栈的抽象数据类型
定义:一种只能在一端存取的数据项表,该端称为栈顶。
操做:stack,创建一个空栈。
push,在栈顶插入一个元素。
pop,删除栈顶元素。
empty,检查栈的状态。若是栈为空,返回真,非空,返回假。
三、栈的应用
3.1 倒转数据
倒转数据须要一组给定数据,从新拍下,使得首尾元素互换,中间的全部元素也相应地进行交换。
3.2 配对数据
在表达式中进行一些字符的配对。编译器能够使用栈来检查全部的开括号都与闭括号配对。
四、栈的实现
栈抽象数据类型能够使用数组也能够使用链表来实现。

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

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

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

一、广义线性表操做
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),若是表空,返回真,非空,返回假。
二、广义线性表的抽象数据类型
定义:一个有序的数据项表,全部的项具备相同类型。
操做:list,建立一个空表;
insert,在表中插入一个元素;
delete,从表中删除一个元素;
retrieve,从表中检索一个元素;
traverse,顺序地遍历表;
empty,检查表的状态。
三、广义线性表的应用
可应用于元素被随机地存取或顺序存取的状况。
四、广义线性表的实现
能够使用数组或链表来实现。

6、树
树包括一组有限的元素,称为节点(或顶点),同时包括一组有限的有向线段,用来链接节点,称为弧。若是树是非空,其中有一个节点没有进入的弧,该节点称为根。树中的其余节点能够沿着从根开始的惟一路径到达。
树中的顶点能够分红三类:根、叶子和内部。
子节点、双亲、兄弟节点、祖先、子树

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

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

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



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

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

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

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


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

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

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

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

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

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

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

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

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

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

9、其余数据库模型
一、分布式数据库
分布式数据库模型并非新的模型,它是基于关系模型的。数据库中的数据存储在一些经过因特网通讯的计算机上,每台计算机拥有部分或所有数据库。
1.1 不彻底的分布式数据库
在不彻底的分布式数据库中,数据是本地化的。
1.2 复制似的分布式数据库
在复制似的分布式数据库中,每一个站点都有其余站点的一个彻底副本。
二、面向对象数据库
面向对象数据库在试图保留关系模型优势的同时容许存取结构化数据。在面向对象数据库中,定义了对象和它们的关系。每个对象能够具备属性并以域的形式表达。

第十五章 数据压缩 P277
1、目标
一、区分无损压缩和有损压缩;
二、描述游程长度编码和它是如何实现压缩的;
三、描述赫夫曼编码和它是如何实现压缩的;
四、描述Lempel Ziv编码以及字典在编码和译码中的做用;
五、描述压缩静止图像的JPEG标准背后的主要思想;
六、描述压缩视频的MPEG标准背后的主要思想以及它与JPEG间的关系;
七、描述压缩音频的MP3标准背后的主要思想。
数据压缩意味着发送或是存储更少的位数。文本与程序一般是无损压缩,图像、音频、视频常是有损压缩。
2、无损压缩
在无损数据压缩中,数据的完整性是受到保护的。原始数据与压缩和解压后的数据彻底同样。冗余的数据在压缩中时被移走,在解压时则再被加回去。
一、游程长度编码
也许是最简单的压缩方法。大体思想是将数据中连续重复出现的符号用一个字符和这个字符重复的次数来代替。如AAAAAAAA能够用A08来代替。
二、赫夫曼编码
在赫夫曼编码中,对于出现更为频繁的字符分配较短的编码,而对于出现较少的字符分配较长的编码。
2.1 编码
编码前文本 EAEBAECDEA
编码器(根据使用频率分配权值,根据权值构建二叉树,根据二叉树给定编码)===此处省略详细的生成编码器过程
A-00,B-010,C-011,D-10,E-11
赫夫曼编码:1100 11010 0011 01110 1100
2.2 译码
根据译码器,咱们能够将编码即时明确翻译成编码。由于每一个编码都是独一无二的。
三、Lempel Ziv编码
是称为基于字典的编码的一类算法的一个例子。即将字符串由字符串字典中的索引来代替,以减小通讯的数据传输量。不实用。
一个实用的算法 Lempel Ziv算法,是基于字典的自适应编码的思想。
如字符串 BAABABBBAABBBBAA
3.一、压缩
在整个过程当中须要同时作两件事:创建字典索引和压缩字符串。
算法从未压缩的字符串中选取最小的子字符串,而后将这个子字符串复制到字典中,并为它分配一个索引值。压缩时,除了最后一个字母以外,其余全部的字符被字典中的索引所代替。而后将索引和最后一个字母插入压缩字符串。
示例:
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 解压
解压是压缩的逆过程。从压缩的字符串中取出子字符串,而后尝试按照字典中所列出的记录还原相应索引号对应的字符串。

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

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

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

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

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

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

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

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

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

3、对称密钥密码术
假设A经过一个不安全的信道向B发送一则消息,从A到B的原始消息称为明文,而经过信道发送的消息称为密文。为了从明文建立密文,A使用了一个加密算法和一个共享的密钥。为了从密文建立明文,B使用了一个解密算法和一个相同密钥。这个过程当中须要保密的惟一的东西就是密钥。
一、传统密码
传统密码使用两种技术对入侵者隐藏消息:替换和置换。
1.1 替换密码
替换密码就是用一个符号替代另外一个符号。
最简单的替换密码就是移位密码。
破解方法:采用暴力破解或频率分析。
1.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位密码密钥。

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

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

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

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


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

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

 

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

2、简单语言
咱们能够仅用三条语句来定义一种语言,它们是递增语句、递减语句和循环语句。
一、递增语句
递增语句对变量加1。
二、递减语句
递减语句从变量中减1.
三、循环语句
循环语句是在变量的值不为0时,重复进行一个动做(或一系列动做)。
四、简单语言的威力
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)来模拟。

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

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

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

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

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

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

6、可解问题和不可解问题
通常来讲,问题能够分为两类,可解问题和不可解问题。
可解问题又分为:多项式问题和非多项式问题。
一、不可解问题
证实一个问题可否解决等同于证实停机问题可否解决。
二、可解问题
问题若是可解,那么它有多复杂?一种衡量方法是运行时间
三、可解问题的复杂度
衡量可解问题复杂度的一个方法是找出计算机运行该程序要执行的运算数量。
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、引言
一、什么是人工智能
人工智能是对程序系统的研究,该程序系统在必定程度上能模仿人类的活动,如感知、思考、学习和反应。
二、简史
莱布尼茨和牛顿完成逻辑语言的定稿,乔治·布尔的布尔代数奠基了计算机电子电路的基础。思惟计算机的主要思想来自于阿兰·图灵的图灵测试。
三、图灵测试
该测试提出了机器具备智能的一个定义,即人类不能区分问题的答案来自人类仍是计算机。
四、智能体
是一个可以智能地感知环境、从环境中学习并与环境进行交互的系统。
4.1 软件智能体
一组用来完成特殊任务的程序。
4.2 物理智能体
一个用来完成各项任务的可编程系统。
五、编程语言
两种语言特别为人工智能设计,LISP和PROLOG
5.1 LISP
LISP是一种操做表的编程语言,LISP把数据和程序都当成表。
缺点是 行动迟缓,语法复杂。
5.2 PROLOG
一种能创建事实数据库和规则知识库的编程语言。
缺点是 效率不是很高。

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

二、框架
在框架中,数据结构(记录)用来表示相同的知识。
2.1 对象
语义网中的一个节点变成了一组框架中的一个对象,全部一个对象能够定义一个类,一个子类或类的一个实例。
2.2 槽
语义网中的边被翻译成“槽”(数据结构中的域)。槽的名字定义了关系的类型和构成关系的槽的值。
三、谓词逻辑
谓词逻辑是最多见的知识表示。谓词逻辑使用了命题逻辑。
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.1 组成
基于规则的系统由三部分构成:解释器(或推理机)、知识库和事实库。
知识库是规则的数据库,包含一组预先创建的规则。
事实库中包含了知识库中的规则要使用的一组条件。
解释器是一个处理器或控制器,把规则和事实组合在一块儿。有两种类型:正向推理和反向推理。
4.2 正向推理
过程:解释器使用一组规则和一组事实来执行一个行动。
4.3 反向推理
过程:从一个结论(目标)开始,若是目标已在事实库中,则过程中止,结论获得验证。

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

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

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

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

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

相关文章
相关标签/搜索