數(shù)據(jù)庫系統(tǒng)工程師考點知識精講.docx_第1頁
數(shù)據(jù)庫系統(tǒng)工程師考點知識精講.docx_第2頁
數(shù)據(jù)庫系統(tǒng)工程師考點知識精講.docx_第3頁
數(shù)據(jù)庫系統(tǒng)工程師考點知識精講.docx_第4頁
數(shù)據(jù)庫系統(tǒng)工程師考點知識精講.docx_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第二章:數(shù)據(jù)結構與算法1、線性表的定義及特點線性表是若干數(shù)據(jù)元素組成的有限集合。線性表的特點是,有惟一的起始結點和惟一的終端結點,其它元素都有惟一的直接前驅(qū)和惟一的直接后繼。線性表的抽像數(shù)據(jù)類型定義包括2方面:數(shù)據(jù)對象、關系的定義;線性表有關操作的定義;線性表的數(shù)據(jù)對象是具有相同性質(zhì)數(shù)據(jù)元素的集合。線性表的有關操作有:基本操作:初始化線性表、撤消線性表、判/置空表、取表長、取前驅(qū)元素、取后繼元素、取第i個元素、遍歷等。插刪操作:在順序結構下,結點的插入(n/2)和刪除(n-1)/2主要是進行元素的移動;在鏈式結構下,結點的插刪是調(diào)整指針的指向。查找操作:在順序表中可以進行折半查找,在鏈表中只能進行順序查找。2、線性表的基本存儲結構及特點,線性表有順序和鏈式兩種存儲結構。順序存儲結構是:用一組地址連續(xù)的存儲單元依次存儲線性表中的數(shù)據(jù)元素。鏈式存儲結構是:用一組地址任意的存儲單元存儲線性表中的數(shù)據(jù)元素。(存儲單元節(jié)點可以是連續(xù)的,也可以是不連續(xù)的)。鏈式存儲結構包括:單鏈表(又稱線性鏈表),結點的結構體有兩個域,分別存儲數(shù)據(jù)元素和當前元素有關系的其它元素所在結點的指針。雙向鏈表,每個結點包含兩個指針,分別指明直接前驅(qū)和直接后繼元素,可以在兩個方向上遍歷其后及其前的元素。循環(huán)鏈表,鏈表中最后一個結點的指針指向第一個結點,開成環(huán)狀結構,可以在任意位置上方向不變地遍歷全表。靜態(tài)鏈表,借助數(shù)組描述線性表的鏈式存儲結構。3、棧的定義:是只能通過訪問它的一端來實現(xiàn)數(shù)據(jù)存儲和檢索的一種線性數(shù)據(jù)結構。棧的特點:是先進后出(FILO)。在線結構中,允許進行插、刪操作的一端稱為棧頂,相應另一端稱為棧底。不含數(shù)據(jù)的棧稱為空棧。棧的基本運算有:置空棧、判空棧、元素入棧、出棧和讀取棧頂元素的值。棧的存儲結構:順序棧和鏈棧。順序棧指,用一組連續(xù)的存儲單元依次存儲自棧頂?shù)綏5椎脑?,同時設置指針top指示棧頂元素的位置。順序棧的空間容量是有限的,要預先定義。順序棧的入棧和出棧操作是通過修改數(shù)組下標來完成。假設棧底對應于數(shù)組下標較大的一端,那么在元素入棧時就是下標減1,而元素出棧時就是下標加1。鏈棧,類似于線性鏈表,棧頂指針就是鏈表首結點的位置,元素的插刪操作限定在首結點處進行。棧的應用:表達式計算,數(shù)制轉換,括號匹配,迷宮問題,遞歸問題。4、隊列的定義:是一種先進先出(FIFO)的線性表。隊列的特點:它只允許在表的一端插入元素而在表的另一端刪除元素。在隊列中允許插的一端叫隊尾(rear),允許刪的一端叫隊頭(front)。隊列的基本運算:置隊空、判隊空、入隊、出隊、讀隊頭元素等。隊列的存儲結構:順序隊列和鏈隊列。順序隊列,又被叫作循環(huán)隊列,設順序隊列Q,Q.front表示隊頭指針,Q.rear表示隊尾指針,則Q.front和Q.rear相等且為0時為空隊列;元素入隊時Q.rear加1,元素出隊時Q.front加1.因為順序隊列的空間容量是提前設定的,所以當Q.rear達到了上限時表示隊列滿。 為區(qū)別隊列空和隊列滿兩種情況下可能出現(xiàn)的Q.front = Q.rear,有兩種方法。一個是設置一個標識位,以區(qū)別頭尾指針相同時隊列是空還是滿;另一個方法是犧牲一個元素空間,約定以Q.rear所指的下一個位置是Q.front時表示隊列滿。鏈隊列,鏈隊列為空的判定條件是頭尾指針相同且均指向頭結點。隊列的應用:常用于需要排隊的場合,如操作系統(tǒng)中的打印隊列,離散事件的復讀機模擬等。5、串的定義:是僅由字符構成的有限序列。是取值范圍受限的線性表。一般記為S = a1a2an。串的幾個概念:空串、空格串、子串、串相等、串比較。串的幾個操作:賦值操作StrAssign(s,t)、聯(lián)接操作Concat(s,t)、求串長StrLength(s)、串比較StrCompare(s,t)、求子串SubString(s,start,len)。串的存儲:靜態(tài)存儲(順序存儲),是定長的存儲結構。當串超長時,超過部分將被截斷。堆存儲,通過程序語言提供的字符數(shù)組定義串的存儲空間,事先不限定串的長度,在程序執(zhí)行過程中動態(tài)地申請地址連續(xù)的串值的空間。塊鏈存儲,使用鏈表存儲串值,每個結點可以存儲一個或多個字符,同時每個結點設置一個指針指向后繼結點。串的模式匹配:樸素的模式匹配法、KMP算法。6、數(shù)組:是定長線性表在維數(shù)上的擴張,即線性表中的每個元素又是一個線性表。N維數(shù)組是一種同構的數(shù)據(jù)結構,其每個數(shù)據(jù)元素類型相同,結構一致。數(shù)組的特點: 數(shù)組元素數(shù)目固定。一旦定義了一個數(shù)組結構就不再有元素的增減變化;數(shù)據(jù)元素具有相同的類型;數(shù)據(jù)元素的下標關系受上下界的約束且下標有序。數(shù)組的基本運算:給定一組下標,存取相應的數(shù)據(jù)元素;給定一組下標,修改相應的數(shù)據(jù)元素中的某個數(shù)據(jù)項的值。數(shù)組的存儲: 數(shù)組的固定結構適于使用順序存儲。對于數(shù)組,只要知道它的維數(shù)和長度,就可以為它分配存儲空間。反之,只要給出一組下標就可以求出該數(shù)組元素的存儲位置。就是說,在數(shù)組的順序存儲結構中,數(shù)據(jù)元素的位置是其下標的線性函數(shù)。以行為主序; Loc(Aij) = Loc(Aij) + (i-1)*n + (j-1)*L以列為主序; Loc(Aij) = Loc(Aij) + (j-1)*m + (i-1)*L多維數(shù)組的順序存儲計算:例如3維數(shù)組A110, 58, -36,數(shù)組空間的起始位置是a,每個元素占4個存儲單元,試以行為主存儲和以列為主存儲時給出數(shù)組元素Ai,j,k的存儲地址。解:理解上面給出的以行為主序和以列為主序的兩個線性函數(shù)公式。把3維數(shù)組拆開計算,例如以行為主序時先將3維數(shù)組看成是有一個行和2個列的數(shù)組,算出此時以行為主占用了多少空間。然后再單獨看兩個列的組合Bj,k又會占用多少空間。前后結果相加就是這個3維數(shù)組元素在以行為主序存儲時的地址。如下,以行為主序時,Ai,j,k前面的元素個數(shù)是: (i-1)(8-5+1)(6-(-3)+1) + (j-5)(6-(-3)+1) + k-(-3) = 40i-40 + 10j-50 + k+3 = 40i + 10j + k -87因此Ai,j,k的地址為a + (40i+10j+k-87)*4以列為主序時,Ai,j,k的地址為a + (40k+10j+i+69)*47、特殊矩陣與稀疏矩陣,稀疏矩陣就是非零元素很少的矩陣,而特殊矩陣是非零元素分布有規(guī)律的一類矩陣。為節(jié)省空間,在存儲它們時都使用壓縮存儲,特殊矩陣有壓縮算法,稀疏矩陣使用三元組順序表或使用十字鏈表存儲矩陣元素。8、廣義表的定義:是由零個或多個單元素或子表所組成的有限序列。廣義表的長度是指廣義表中元素的個數(shù),深度是指廣義表展開后所含的括號的最大層數(shù)。廣義表的基本運算:取表頭head(LS),非空廣義表的第一個元素稱為表頭;取表尾tail(LS),非空廣義表中除第一個元素之外,由其余元素構成的表稱為表尾。表尾必定是一個表。Head(LS)=a1, Tail(LS)=(a2,a3,,an)9、樹的定義:樹是n(n=0)個結點的有限集合。當n=0時稱為空樹。在任一非空樹中,有且僅有一個稱為根的結點;其余m個結點可分為m(m=0)個互不相交的有限集,其中每個子集合又都是一棵樹,稱為根結點的子樹。樹的定義是遞歸的,樹形結構具有明顯的層次結構。樹的術語:雙親和孩子,兄弟,結點的度,葉子結點,內(nèi)部結點,結點的層次,樹的高度,有序樹和無序樹,森林。樹的基本操作是:先根遍歷和后根遍歷。10、二叉樹的定義:二叉樹是另一種樹形結構,它的特點是每個結點至多有兩棵子樹并且有左右之分,且左、右子樹的次序不能顛倒。滿二叉樹,若二叉樹上每一層的結點數(shù)目都達到最大值,則稱為滿二叉樹;完全二叉樹,若二叉樹的除第H層以外,其余各層的結點數(shù)目達到了最大值,而第H層上的結點集中存放在左側,則稱為完全二叉樹;非完全二叉樹,就是完全二叉樹的相反情況。二叉樹的性質(zhì): 1)二叉樹第i層(i=1)上至多有2(i-1)個結點。2)深度為K的二叉樹至多有2k -1 個結點(k=1)。3)對任何一棵二叉樹,若其終端結點個數(shù)為N0,度為2的結點個數(shù)為N2,則N0 = N2 + 1 。4)具有n個結點的完全二叉樹的深度為log(2,n)+1。5)對一棵有n個結點的完全二叉樹的結點按層次自左至右進行編號,則對任一結點i (1=i1則其雙親為i/2。若2in,則結點i無左孩子,否則其左孩子為2i。若2i+1n,則結點i無右孩子,否則其右孩子為2i+1。例:一棵有124個葉結點的完全二叉樹,最多有多少結點?N0=N2+1N=N0+N1+N2N1=1綜合上面3個表達式可以求解。例2:具有N個結點的滿二叉樹,其葉子結點個數(shù)為多少?設其深度為h,則: N0=2(h-1)N = 2h - 1所以N0 = (n+1)/2二叉樹的存儲結構:二叉樹的順序存儲結構,若采用二叉樹的性質(zhì)5對樹中的結點進行編號,即樹根結點的編號為1,若編號為i的結點存在左孩子,則其左孩子的編號為2i;若編號為i的結點存在右孩子,則其右孩子的編號為2i+1,這樣利用數(shù)組元素的下標作為結點的編號,表示出結點間的關系。二叉樹的鏈式存儲結構,二叉鏈表(有單向性)和三叉鏈表(有雙向性)。遍歷二叉樹,有4種方式:先序、中序、后序和層序遍歷。先序遍歷二叉樹的操作定義為:訪問根結點;先序遍歷根的左子樹;先序遍歷根的右子樹。(若二叉樹為空,則進行空操作)。中序遍歷二叉樹的操作定義為:中序遍歷根的左子樹;訪問根結點;中序遍歷根的右子樹。(若二叉樹為空,則進行空操作)。后序遍歷二叉樹的操作定義為:后序遍歷根的左子樹;后序遍歷根的右子樹;訪問根結點。層序遍歷二叉樹的操作定義為:從根結點開始,從或到右依次訪問每層上的結點。二叉樹遍歷思想的關鍵:首先在想象中把二叉樹補齊為滿二叉樹,葉子結點也要被想象為有2個子結點。然后,畫一條路線,從根出發(fā),逆時針沿著二叉樹的外緣移動,全程對每個結點均途經(jīng)三次。若第一次經(jīng)過時即訪問,則是先序遍歷;若是第二次經(jīng)過結點時訪問結點,則是中序遍歷;若是第3次經(jīng)過時訪問則是后序遍歷。這3種方法的路徑相同,但結果不同。遍歷二叉樹的基本操作就是,訪問結點。-遍歷二叉樹實質(zhì)上是按一定規(guī)則,將樹中的結點排成一個線性序列。11、線索二叉樹:對于有N個結點的二叉樹的二叉鏈表存儲表示,其中必有N+1個空指針。遍歷時使結點中原本為空的左孩子指針或(和)右孩子指針指向結點的前驅(qū)或(和)后繼,這樣的處理稱為對二叉樹的線索化,指向前驅(qū)或后繼的指針稱為線索。加上線索的二叉樹稱為線索二叉樹。為了區(qū)分結點中的指針是孩子還是線索,在結點結構中增加標志域ltag, rtag。兩個標志取值0,則lchild,rchild域分別指向左孩子和右孩子;兩個標志取值1,則lchild,rchild域分別指向直接前驅(qū)和直接后繼。訪問線索二叉樹時,如何查找結點的前驅(qū)和后繼?以中序線索二叉樹為例,令P指向樹中的某個結點。當p-ltag = 0時,P的中序直接前驅(qū)一定是其左子樹進行中序遍歷得到的最后一個結點,也可以沿P的左子樹根結點出發(fā)沿右孩子指針向下查找,直到找到一個沒有右孩子的結點時為止,該結點就是P的直接前驅(qū)結點,也稱為P的左子樹中“最右下”的結點。當P-rtag = 0時,P的中序直接后繼一定是其右子樹進行中序遍歷得到的第一個結點, 也可以沿P的右子樹根結點出發(fā)沿左孩子指針向上查找,直到找到一個沒有右孩子的結點時為止,該結點就是P的直接后繼結點,也稱為P的右子樹中“最左下”的結點。12、二叉樹的應用:最優(yōu)二叉樹(又稱霍夫曼樹),是一種帶權路徑長度最短的樹。路徑,是從樹中一個結點到另一個結點之間的通路,路徑上的分支數(shù)目稱為路徑長度。樹的路徑長度,是從根到每一個葉子結點之間的路徑長度之和。結點的帶權路徑長度,是從該結點到樹根之間的路徑長度與該結點權的乘積。樹的帶權路徑長度,是樹的所有葉子結點的帶權路徑長度之和,記為 WPL 。如何構造最優(yōu)二叉樹?使用霍夫曼算法如下:1)將給定的N個結點的權值構成N棵二叉樹的集合F,其中每棵樹Ti只有一個權為Wi的根結點,其左右子樹為空。2)在F中選取兩棵根結點的權值最小的樹作為左右子樹,并新生成一個根結點,根結點的權值為左右子樹的權值和。3)從F中刪除被取出的兩棵樹并將新生成的樹放入F。4)重復2,3步驟到只剩一棵樹為止,這棵樹就是最優(yōu)二叉樹。最優(yōu)二叉樹的形式不唯一,但其WPL值卻是唯一確定的?;舴蚵幋a:若要設計長度不等的編碼,則任一字符的編碼都不是其他字符編碼的前綴,這種編碼稱為“前綴編碼”。要設計總長最短的二進制前綴編碼,應以N種字符出現(xiàn)的頻率作為權來構造一棵霍夫曼樹,由此得到的二進制前綴編碼稱為霍夫曼編碼。樹的左右分枝分別標上0和1(或相反)。從根到葉子路徑上的0,1組成的串就是每個字符的二進制編碼。13、樹的存儲結構1)樹的雙親表示法,用一組連續(xù)的存儲單元存儲樹的結點,并在每個結點中附設一個指示器,指示其雙親結點在該存儲結構中的位置;2)樹的孩子表示法,是在存儲結構中用指針指出結點的每個孩子。要為樹的每個結點的孩子建立一個鏈表,則N個結點的樹具有N個單鏈表,這N個單鏈表的頭指針又排成了一個線性表(頭指針即樹的存儲結構中每個結點的指示器)。將上兩種方法結合起來可以形成樹的雙親孩子表示法。3)樹的孩子兄弟表示法,是指用二叉鏈表表示樹。在鏈表的結點中設置兩個指針域,分別指向該結點的第一個孩子和下一個兄弟。 |firstchild| data |nextbrother| 若將樹的孩子指針解釋為左孩子、兄弟指針解釋為右孩子,則可以得到這棵樹的二叉樹結構。14、樹的遍歷:先根遍歷;后根遍歷。樹進行先根遍歷也就是對轉換得到的二叉樹進行先序遍歷;對樹進行后根遍歷也就是對轉換得到的二叉樹進行中序遍歷。(先根遍歷的順序是:由根出發(fā)從左至右遍歷每棵子樹。后根遍歷的順序是從左至右從每棵子樹的葉子結點向根的方向訪問子樹,最后訪問根結點。)15、森林的遍歷:先序遍歷森林;中序遍歷森林。先序遍歷森林,若森林非空,訪問森林中第一棵樹的根結點,先序遍歷第一棵子樹根結點的子樹森林,再先序遍歷除第一棵樹之外的樹所構成的森林。中序遍歷森林,若森林非空,中序遍歷森林中第一棵樹的子樹森林,再訪問第一棵樹的根結點,再中序遍歷除第一棵樹以外的樹所構成的森林。16、樹、森林和二叉樹的轉換利用樹的孩子兄弟表示法可以由一棵樹轉成唯一的一棵二叉樹。森林如何轉換成二叉樹呢?因為樹根沒有兄弟,所以樹轉換成二叉樹后一定沒有右子樹,所以森林轉換成二叉樹的方法是:1)先將森林中的每棵樹全轉成二叉樹;2)用第一棵樹的根做新二叉樹的根,第一棵樹轉為二叉樹后得到的左子樹做為新二叉樹的左子樹,第二棵樹作為新二叉樹的右子樹,第三棵樹作為新二叉樹的右子樹的右子樹,依此類推,森林便轉為了一棵二叉樹。17、圖的定義:在數(shù)據(jù)結構中,圖是一個由頂點集合和邊集合構成的二元組,其中邊表示頂點之間的關系。圖的主要術語:有向圖,圖中每條邊都是有方向的,弧、弧尾、弧頭;無向圖,圖中的邊是沒有方向的,邊;無向完全圖,圖中的N個結點之間每兩個結點間都有邊,共有n(n-1)/2條邊;有向完全圖,圖中的N個結點之間每兩個結點間都有方向相反的兩條弧,共有n(n-1)條?。欢?、入度、出度,頂點v的度是指關聯(lián)于該頂點的邊的數(shù)目,記作D(v)。若是有向圖則以該頂點為終點的有向邊數(shù)目稱為入度,從該頂點出發(fā)的有向邊的數(shù)目稱為出度,有向圖的度是入庫和出度的和。路徑,兩個頂點之間由邊組成的一條通路。若是有向圖則路徑也有方向。路徑長度是路徑上邊或弧的數(shù)目。第一個頂點和最后一個頂點相同的路徑稱為回路。若首尾頂點以外的頂點均不相同則是簡單路徑,若只有首尾頂點相同則稱為簡單回路。子圖,一個圖的頂點集合與邊集合都從屬于另一個圖,則稱之為另一個圖的子圖;連通圖與連通分量,在無向圖中若兩個頂點之間有路徑則稱為這兩個頂點是連通的。若無向圖中任兩個頂點間都是連通的則稱其為連通圖。該無向圖的最大連通子圖稱為它的連通分量。強連通圖與強連通分量,是有向圖的連通概念;網(wǎng),邊(?。嘀档膱D稱為網(wǎng);生成樹,是一個極小的連通子圖,它包括圖中的全部頂點,但只有構成一棵樹的n-1條邊;有向樹和生成森林,一個有向圖恰有一個頂點的入度為0其它頂點的入度均為1,則這是一棵有向樹。生成森林是一個有向圖中的若干棵有向樹組成,特點是含有全部頂點但只有足以構成若干棵不相交的有向樹的弧。圖的存儲結構:鄰接矩陣表示法,用于表示圖有頂點之間的關系。對于個有n個頂點的圖G=(V,E)來說,其鄰接矩陣就是一個n階方陣。依靠判斷圖的兩頂點間是否存在邊或弧來決定Aij=1或Aij=0;網(wǎng)的鄰接矩陣,當兩頂點間存在邊或弧時Aij等于權值否則Aij等于無窮。鄰接鏈表表示法,為圖的每個頂點建立一個單鏈表,單鏈表中的結點表示依附于相應頂點的邊或弧,有表頭結點和表結點兩種結構類型。圖的遍歷:深度優(yōu)先搜索;廣度優(yōu)先搜索。一個類似于先根遍歷,一個類似于層序遍歷。生成樹的概念:生成樹是連通圖的一個子圖,它由全部頂點和一次遍歷圖所經(jīng)過的邊組成。圖的生成樹不惟一,按深度優(yōu)先搜索得到深度優(yōu)先生成樹,按廣度優(yōu)先搜索得到廣度優(yōu)先生成樹。一個非連通圖,每個連通分量中的頂點集和遍歷時走過的邊集一起構成若干棵生成樹,稱為非連通圖的生成樹森林。18、最小生成樹:連通網(wǎng)的邊是帶有權值的,將生成樹的各邊權值和稱為生成樹的權。其中權值最小的生成樹稱為最小生成樹。構造最小生成樹的兩種算法:普里母算法:以一個頂點集合U作為初態(tài),不斷尋找與U中頂點相鄰且代價最小的邊的另一個頂點,擴充U至U=V時為止。例如初始只給U一個頂點且邊的集合TE=;這種算法的時間復雜度為O(n2),因為它由頂點推算出的,所以適合于邊稠密的網(wǎng)的最小生成樹??唆斔箍査惴ǎ杭僭O連通網(wǎng)N=(V,E),令最小生成樹的初始狀態(tài)為只有n個頂點而無邊的非連通圖T=(V,),圖中每個頂點自成一個連通分量。在E中選擇代價最小的邊,若該邊依附的頂點落在T中不同的連通分量上,則將此邊加入到T中,否則舍去此邊而選擇下一條代價最小的邊。信此類推,直至T中所有頂點都在一個連通分量上為止。這種算法與頂點數(shù)無關,所以適合計算頂點多而邊稀疏的網(wǎng)的最小生成樹。19、AOV網(wǎng)(active on vertex):在有向圖中,以頂點表示活動,用有向邊表示活動之間的優(yōu)先關系,這樣的網(wǎng)稱為AOV網(wǎng)。在AOV網(wǎng)中不應出現(xiàn)有向環(huán)。拓樸排序:是將AOV網(wǎng)中所有頂點排成一個線性序列的過程,并且該序列滿足:若在AOV網(wǎng)中從頂點Vi到Vj有一條路徑,則在該線性序列中,頂點Vi必然在Vj之前。拓樸排序的方法:在AOV網(wǎng)中選一個入度為0的頂點并輸出它;從網(wǎng)中刪除該頂點及與其有關的邊;重復前兩步至網(wǎng)中不存在入度為0的頂點為止。這樣操作會有兩種結果:一個是所有頂點已輸出,也就是拓樸排序完成,說明網(wǎng)中不存在回路;另一個可能結果是尚有未輸出的結點,剩余頂點均有前驅(qū)頂點,表明網(wǎng)中存在回路!也可以進行逆拓樸排序,即計算出度為0的頂點。拓樸算法的時間復雜度為O(n+e)。AOE網(wǎng)(active on edge):,在帶權有向圖中,以事件表示頂點,以邊表示活動,以邊上的權值表示活動持續(xù)的時間,則這種網(wǎng)稱為用邊表示活動的網(wǎng),簡稱AOE網(wǎng)。AOE網(wǎng)特點:1)頂點所表示的事件是指該頂點的所有進入邊所表示的活動已完成,所有發(fā)出邊表示的活動可以開始的一種狀態(tài)。2)對一個工程來說,要有一個開始狀態(tài)和一個結束狀態(tài),所以在AOE網(wǎng)中有一個入度為0的開始頂點,稱為源點;有一個出度為0的結束頂點,稱為匯點。AOE網(wǎng)中也不允許存在回路。3)完成整個工程的時間是從開始頂點到結束頂點間的最長路徑的長度(指該路徑上的權值和)?;顒拥乃神Y時間:用活動的持續(xù)時間和該活動兩側的兩個事件的關鍵路徑時間,二者取差。關鍵路徑:從源點到匯點的路徑長度最長路徑稱為關鍵路徑。關鍵路徑上的所有活動均是關鍵活動。最短路徑?20、查找的基本概念1)查找是一種常用的基本運算。查找表是由同一類型數(shù)據(jù)元素構成的集合;2)靜態(tài)查找表,指在進行查找運算時不再修改的已經(jīng)構造好的查找表。靜態(tài)查找表只進行兩種操作:查詢某個特定的數(shù)據(jù)元素是否在查找表中;檢索某個特定的數(shù)據(jù)元素的各種屬性。3)動態(tài)查找表,是可以進行另兩種操作的查找表,即在查找表中插入一個數(shù)據(jù)元素;從查找表中刪除一個數(shù)據(jù)元素。4)關鍵字,是數(shù)據(jù)元素的某個數(shù)據(jù)項的值,用它來識別這個數(shù)據(jù)元素;5)主關鍵字,指能唯一標識一個數(shù)據(jù)元素的關鍵字;6)次關鍵字,指能標識多個數(shù)據(jù)元素的關鍵字;7)查找,根據(jù)給定的某個值,在查找表中確定是否存在一個其關鍵字等于給定值的記錄,并返回結果。順序查找,從表的一端開始,逐個進行記錄的關鍵字和給定值的比較,若找到一個記錄的關鍵字和給定值相等則查找成功;若整個表均比較過仍未找到則查找失敗。若要查找的記錄不在表中則需進行n+1次查找。平均查找長度為(n+1)/2。折半查找(二分查找),可以用二叉樹進行分析,以中間記錄為根,左子表為左子樹,右子表為右子樹,依此類推。關鍵字的比較次數(shù)即為被查找結點在樹中的層數(shù)。查找成功或失敗時所比較的關鍵字數(shù)不超過樹的層數(shù)。折半查找只適用于有序順序表(以數(shù)組方式存儲的有序表)。 n=2k - 1, k=log(n+1)分塊查找,又稱為索引順序查找,綜合使用上面兩種方法。將長度為n的表均勻分為b塊,每塊含有s個記錄,按順序查找確定元素所在的塊,則ASL = Lb + Lw , 即塊內(nèi)查找與索引查找之和。ASL=(b+1)/2 + (s+1)/2 , 當s取n的平方根時,ASL取得最小值“n的平方根加1”。21、二叉排序樹(又稱二叉查找樹):二叉查找樹或者是一棵空樹,或者具有這樣的特性,1)若二叉查找樹的左子樹非空,則左子樹上的結點值均小于根結點的值;2)若它的右子樹非空,則右子樹上的結點值均大于根結點的值;3)左、右子樹的子身就是一棵二叉查找樹。二叉查找樹的查找過程從根結點開始,過程類似于折半查找(二分查找)。二叉查找樹的插入操作按它的特性法則進行插入,若是空樹則作根結點,否則會成為一個新的葉子結點。在二叉查找樹中刪除一個結點時不能把該結點的子樹也刪掉,只能刪除這個結點但仍要保持二叉查找樹的特性,相當于是從一個有序序列中刪除一個元素,不能破壞其它元素的有序性。一種方法是,如果刪除結點*P,則可以用*P的直接前驅(qū)或直接后繼代替*P,同時刪除它的直接前驅(qū)(或直接后繼)。二叉排序樹順序存儲在一地址連續(xù)的空間內(nèi),則序列按中序遞增存儲。22、平衡二叉樹:它或者是一棵空樹,或者具有這樣的性質(zhì):它的左右子樹都是平衡二叉樹,且左右子樹的深度之差的絕對值不超過1。平衡因子: 某結點的平衡因子定義為該結點的左子樹深度減去它的右子樹深度。平衡二叉樹上的所有結點的平衡因子只可能是-1、0和1。為了得到樹形均勻的二叉排序樹,在構造二叉排序樹的過程中可以使用幾種辦法讓它保持為一棵平衡二叉樹。每插入一個新結點時,就檢查是否打破了平衡。若是,則找出最小不平衡二叉樹,在保持二叉排序樹特性的情況下,調(diào)整最小不平衡二叉樹中結點間關系,達到新的平衡。最小不平衡二叉樹是指離插入結點最近且以平衡因子的絕對值大于1的結點作為根的子樹。平衡二叉樹上的插入操作引起不平衡的解決方法:1)單向右旋平衡處理 -用于在根的左子樹根結點的左子樹上插入新結點情況。2)單向左旋平衡處理 -用于在根的右子樹根結點的右子樹上插入新結點情況。3)雙向旋轉(先左旋后右旋)操作 -用于在根的左子樹根結點的右子樹上插入新結點的情況。4)雙向旋轉(先右旋后左旋)操作 -用于在根的右子樹根結點的左子樹上插入新結點的情況。B樹,有幾個比較鮮明的特點。如:一棵m階的B樹中每個結點至多有m棵子樹;非終結點(根除外)至少有m/2棵樹;根至少有兩棵子樹(當根不是葉子時);所有葉子結點出現(xiàn)在同一層次上。23、哈希表的定義:根據(jù)設定的哈希函數(shù)H(key)和處理沖突的方法,將一組關鍵字映射到一個有限的連續(xù)地址集上,并以關健字在地址集中的“像”作為記錄在表中的存儲位置,這種表稱為哈希表。這一映射過程稱為哈希造表或散列,所得的存儲位置稱為哈希地址或散列地址。哈希函數(shù)是從關鍵字集合到地址集合的映像。對于哈希表主要考慮兩個問題:一是如何構造哈希函數(shù);一是如何解決沖突。構造哈希函數(shù)要解決好兩個問題:首先哈希函數(shù)是一個壓縮映像函數(shù);其次哈希函數(shù)應具有較好的散列性。前者為節(jié)省空間,后者為減少沖突。常用的哈希函數(shù)構造方法有直接定址法、數(shù)字分析法、平方取中法、折疊法、隨機數(shù)法和除留余數(shù)法。處理沖突的方法:1)開放地址法 Hi = (H(key) + Di)%m i=1,2,,k (k=m-1)H(key)為哈希函數(shù);m為哈希表的表長;Di為增量序列。Di=1,2,3,,m-1 稱為線性探測再散列;Di=12,-12,22,-22,k2 (k=m/2) 稱為二次探測再散列;Di=偽隨機序列,稱為隨機探測再散列。最簡單的產(chǎn)生探測序列的方法是線性探測,即當沖突時順序?qū)ο乱粏卧M行探測并存儲。在用線性探測法解決沖突構造的哈希表中進行查找時有3種可能結果:一是在某一位置上找到關鍵字等于key的記錄,查找成功;一是按探測序列查找不到而又遇到了空單元,查找失敗,此時可進行插入操作;一是查遍全表,未查到指定關鍵字且存儲區(qū)已滿,要進行溢出處理。線性探測法的缺點是“溢出處理需別編程序”,“很容易產(chǎn)生聚集現(xiàn)象”。2)鏈地址法 ,它在符號表的每一個記錄增加一個鏈域,鏈域中存放下一個有相同哈希函數(shù)值的記錄的的存儲地址。3)再哈希法 ,Hi = RHi(key) i= 1,2,k RHi均是不同的哈希函數(shù),即在同義詞發(fā)生地址沖突時計算另一個哈希函數(shù)地址,直到解決。4)建立一個公共溢出區(qū),一溢出全放這里去;哈希表的裝填因子, a = (表中添入的記錄數(shù)/哈希表長度) -a越小,發(fā)生沖突的可能越小雖然哈希表在關鍵字與記錄的存儲位置之間建立了直接映像,但由于“沖突”的產(chǎn)生,使得哈希表的查找過程仍是一個給定值和關鍵字進行比較的過程。仍須以平均查找長度衡量哈希表的查找效率。在查找過程中須與給定值進行比較的關鍵字的個數(shù)取決于3個因素:哈希函數(shù)、處理沖突方法、哈希表的裝填因子。24、排序:穩(wěn)定的排序、不穩(wěn)定的排序。內(nèi)部排序、外部排序。簡單排序法:包括直接插入排序、冒泡排序和簡單選擇排序。它們的算法復雜度為O(n2),在元素已經(jīng)基本有序的情況下,使用直接排序方法可獲得較高的效率O(n)。直接插入排序和冒泡排序是穩(wěn)定的排序方法,簡單選擇排序是不穩(wěn)定的排序方法。直接插入排序適用于“在文件局部有序或文件長度較小的情況下的一種最佳內(nèi)部排序方法”.直接插入排序的時間復雜度為O(n*n),若記錄序列為正序時其時間復雜度可提高到O(n)。正序?冒泡排序算法: void bubblesort(int data, int n)int i,j,tag,temp;for(i=0,tag=1;tag=1&in-1;i+)tag = 0;for(j=0;jdataj+1)temp=dataj;dataj=dataj+1;dataj+1=temp;tag=1;簡單選擇排序算法:void selectsort(int data, int n)int i,j,k,temp;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(datajdatak)k=j;if(k!=j)temp=datai;datai=datak;datak=temp;希爾排序,又稱為縮小增量排序。它是在直接插入排序的基礎上加以改進得到的排序方法?;舅枷刖褪牵涸O定一個初始間隔d,dn,按間隔d將元素分組,在每一組內(nèi)進行直接插入排序,可以使得最小元素跳躍式向前移動。然后縮小增量d的值,重復上述操作到d=1時為止??焖倥判颍舅枷胧峭ㄟ^一趟排序?qū)⒋判虻挠涗浄指顬楠毩⒌膬刹糠?,其中一部分的關鍵字均比另一部分小,然后再分別對這兩部分記錄繼續(xù)進行排序。具體做法:在頭尾設兩個指針low,high,分別指向第一個元素和最后一個元素。設樞軸記錄為正向(返向)的第一個記錄。當初始序列有序時,快速排序蛻變?yōu)槊芭菖判颍藭r算法的時間復雜度為n*n。例如,對50個整數(shù)進行快速排序時,因為初始序列有序,所以排序過程退化為冒泡排序,總過程中的比較次數(shù)為49+48+1 = 49*50/2堆排序,基本思想是對一組待排序記錄的關鍵字,首選把它們按堆的定義排成一個序列,從而輸出堆頂?shù)淖钚£P鍵字。然后將剩余關鍵字再調(diào)整成堆,便得到次小關鍵字,反復進行,直至全部關鍵字排成有序序列

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論