讀書筆記——計算機科學導論

計算機科學導論-讀書筆記前端

第一章 緒論
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程序實例數學複習錯誤檢測和糾正

相關文章
相關標籤/搜索