第七章学习小结
本章學(xué)習(xí)的是數(shù)據(jù)查找。個人感覺這一章的知識相比于之前的章節(jié)更加貼切實際操作。
目錄:
(一) 查找的基本概念
(1)查找表
查找表是由同一類型的數(shù)據(jù)元素(或記錄)構(gòu)成的集合,它是一種非常靈變的數(shù)據(jù)結(jié)構(gòu),涉及的數(shù)據(jù)結(jié)構(gòu)主要有線性表,樹表以及散列表。
(2)關(guān)鍵字
關(guān)鍵字是數(shù)據(jù)元素(或記錄)中某個數(shù)據(jù)項的值,可以標(biāo)識一個數(shù)據(jù)元素。關(guān)鍵字又分兩種,可以唯一標(biāo)識一個記錄的關(guān)鍵字被稱為主關(guān)鍵字;可以識別若干記錄的關(guān)鍵字被稱為次關(guān)鍵字。
(3)查找
查找是指根據(jù)給定的某個值,在查找表中確定一個其關(guān)鍵字等于給定值的記錄或者數(shù)據(jù)元素。若存在這樣一個記錄,則稱為查找成功;若不存在這樣一個記錄,則稱為查找失敗。
(4)查找表的種類
查找表分為動態(tài)查找表和靜態(tài)查找表。在查找的同時進行插入和刪除工作的叫做動態(tài)查找表,反之則稱為靜態(tài)查找表。
(5)平均查找長度
平均查找長度簡稱ASL,是和給定值進行比較的關(guān)鍵字個數(shù)的期望值。
(二)線性表的查找
(1)順序查找
從表的一段開始,依次將記錄的關(guān)鍵字和給定值進行比較,既適用于線性表的線性儲存結(jié)構(gòu),又適用于線性表的練市存儲結(jié)構(gòu),改良后的算法加入監(jiān)視哨,將str[0]置為key。ASL = (n+1)/ 2
(2)折半查找
采用該方法有一下幾點前提:
(i)必須采用數(shù)據(jù)順序存儲結(jié)構(gòu)
(ii)表中元素按照關(guān)鍵字有序排列
折半查找法在每一次查找都會使查找范圍縮小一半,提高了查找的效率。下圖為折半查找方法的查找過程(找21):
?
?
?
ASL = log2(n) (注意是有序查找)
?
?
(三)樹表的查找
(1)二叉排序樹(又稱二叉查找樹)
定義如下:
(i)若它的左子樹不為空,則左子樹上所有結(jié)點的值均小于它的根結(jié)點的值。
(ii)若它的右子樹不為空,則右子樹上所有結(jié)點的值均大于它的根結(jié)點的值。
(iii)它的左右子樹也分別為二叉排序樹
然后對二叉排序樹的操作主要有查找,插入,創(chuàng)建和刪除。
其中,查找,插入和創(chuàng)建均可以通過遞歸來實現(xiàn),這四種操作中最難的是刪除,刪除又分三種情況:
(i)f -> lchild = NULL 左右子樹均為空樹
? (ii)? f -> lchild = p -> lchild? 一邊為空樹
? (iii) f ->lchild = p ->lchild; s ->rchild = p ->rchild (或者 p -> data = s ->data; q ->rchild = s ->lchild)? 左右子樹均不為空樹
?
(2)平衡二叉樹(改良版的二叉排序樹)
先明白一個定義:平衡因子是該結(jié)點左子樹和右子樹的深度之差,取值可能是-1,0, 1。
有以下特點:
(i)左子樹和右子樹的深度之差的絕對值不超過1。
(ii)左子樹和右子樹也是平衡二叉樹。
后面的B-樹,B+樹還有散列表還沒有吃透,個人覺得還是有點難度的。
網(wǎng)安的進度漸漸地趕上了。
最近期末的時間開始有點緊張了,而且又要開始復(fù)習(xí)了,希望下一階段可以安排好自己的學(xué)習(xí)時間,認真復(fù)習(xí),保住績點!
轉(zhuǎn)載于:https://www.cnblogs.com/Buki11/p/10964182.html
總結(jié)
- 上一篇: jQuery中HTML的操作
- 下一篇: selenium 在centos中的配置