算法基础:常用的查找算法知识笔记
1、查找表和查找效率的概念
查找表是指由同一類型的數(shù)據(jù)元素構(gòu)成的集合。分為靜態(tài)查找表和動(dòng)態(tài)查找表。
1.1 靜態(tài)查找表
1、查詢某個(gè)特定元素是否在查找表的集合當(dāng)中
2、查詢某個(gè)特定元素的各種屬性
1.2 動(dòng)態(tài)查找表
1、在查找表中插入一個(gè)數(shù)據(jù)元素
2、在查找表中刪除一個(gè)元素
1.3 關(guān)鍵字
它是數(shù)據(jù)元素的某個(gè)數(shù)據(jù)項(xiàng)的值。用來(lái)識(shí)別該元素。主關(guān)鍵字是唯一能表示該元素的值。次關(guān)鍵字用來(lái)表示多個(gè)數(shù)據(jù)元素的關(guān)鍵字。
1.4 查找
根據(jù)給定的值在查找表中查詢是否存在一個(gè)其關(guān)鍵字等于給定值的記錄或者數(shù)據(jù)元素。
1.5 平均查找長(zhǎng)度
關(guān)鍵字和給定值進(jìn)行比較的記錄個(gè)數(shù)的平均值。也是衡量查找算法好壞的依據(jù)。
2、順序查找
從數(shù)據(jù)集合的一端,逐個(gè)記錄的關(guān)鍵字和給定值進(jìn)行比較,找到則為查找成功。整個(gè)數(shù)據(jù)集合比較完后仍然找不到,則為查找失敗。
順序查找適用于順序存儲(chǔ)和鏈?zhǔn)酱鎯?chǔ)。其平均查找長(zhǎng)度為(n+1)/2.
順序查找算法簡(jiǎn)單、適應(yīng)性廣。當(dāng)數(shù)據(jù)集合數(shù)據(jù)量大的話,查詢效率會(huì)較低。
3、折半查找
折半查找也稱為二分查找。
平均查找長(zhǎng)度:(n+1)/n*log^2(n+1) -1,當(dāng)n值較大 log^2(n+1) -1
折半查找效率比順序查找高,它比較合適順序存儲(chǔ)和關(guān)鍵字有序排列。所以折半查找適合數(shù)據(jù)表不經(jīng)常變動(dòng),查詢頻率較高的情況。
? ? ? ? ? ? ?
4、索引順序查找
索引順序查找又稱為分塊查找,是順序查找的一個(gè)改進(jìn)查找算法。
原理:分塊查找首先將表分為若干塊。每一塊可以無(wú)序。但塊之間是要有序的。即后一塊所記錄的關(guān)鍵字均大于前一塊的關(guān)鍵字。另外還會(huì)創(chuàng)建一個(gè)索引塊表,索引塊表關(guān)鍵字有序。
查詢過(guò)程:1、在索引表中確認(rèn)待查記錄所在數(shù)據(jù)塊。2、在該數(shù)據(jù)塊內(nèi)順序查找。
平均查找長(zhǎng)度:1/2(n/s + s) +1
它的效率優(yōu)于順序查找,比不上折半查找。
5、樹(shù)表查找
常見(jiàn)的樹(shù)表查找有二叉查找樹(shù)、B-樹(shù)、紅黑樹(shù)等常見(jiàn)查找算法。二叉查找樹(shù)是一種動(dòng)態(tài)查找表
5.1 二叉查找樹(shù)查找過(guò)程
利用二叉查找樹(shù)左小右大的特性,可以很容易實(shí)現(xiàn)查找任意值和最大/小值。
在二叉查找樹(shù)中查找一個(gè)給定的關(guān)鍵字n的過(guò)程與折半查找很類似,
查找過(guò)程如下:
1.若二叉樹(shù)是空樹(shù),則查找失敗。
2.若x等于根節(jié)點(diǎn)的數(shù)據(jù),則查找成功,否則。
3.若x小于根節(jié)點(diǎn)的數(shù)據(jù),則遞歸查找其左子樹(shù),否則。
4.遞歸查找其右子樹(shù)。
5.2 二叉樹(shù)查找樹(shù)b插入操作x的過(guò)程
1.若b是空樹(shù),則直接將插入的節(jié)點(diǎn)作為根節(jié)點(diǎn)插入。
2.x等于b的根節(jié)點(diǎn)的數(shù)據(jù)的值,則直接返回,否則。
3.若x小于b的根節(jié)點(diǎn)的數(shù)據(jù)的值,則將x要插入的節(jié)點(diǎn)的位置改變?yōu)閎的左子樹(shù),否則。
4.將x要插入的節(jié)點(diǎn)的位置改變?yōu)閎的右子樹(shù)。
注:如果二叉樹(shù)是單枝樹(shù)。查詢效率和順序查找相當(dāng)。
6、哈希查找
6.1 概念
通過(guò)計(jì)算數(shù)據(jù)元素的存儲(chǔ)地址進(jìn)行元素查找的一種查找算法。
根據(jù)設(shè)定的哈希函數(shù)和處理沖突的方法,將一組關(guān)鍵字映射到一個(gè)有限的連續(xù)的地址集上,并以關(guān)鍵字在地址集中的“像”作為記錄在表中的存儲(chǔ)位置,這種表稱為哈希表。這一映射過(guò)程稱為哈希造表或散列。所得的存儲(chǔ)位置稱為哈希位置或者散列地址。
哈希算法要解決兩個(gè)問(wèn)題:哈希函數(shù)的構(gòu)造、沖突的解決。
6.2 解決沖突
解決沖突就是為出現(xiàn)沖突的關(guān)鍵字找到另一個(gè)“空”的哈希地址。
常用的解決沖突的方法有:開(kāi)放定址法、鏈地址法、再哈希法、建立公共溢區(qū)法。
6.2.1開(kāi)放定址法
最簡(jiǎn)單的產(chǎn)生探測(cè)序列的方法是進(jìn)行線性探測(cè),發(fā)生沖突后,順序到下一個(gè)存儲(chǔ)單元進(jìn)行探測(cè)。
6.2.2 鏈地址法
鏈地址法是常用并且很有效的方法。它將具有相同哈希函數(shù)值記錄組成一個(gè)鏈表,當(dāng)鏈域值為NULL時(shí),表示沒(méi)有后繼記錄。
6.2.3 哈希查找
線性探測(cè)解決沖突的方式下:某一個(gè)位置上找到關(guān)鍵字等于key的記錄,表示查找成功;探測(cè)序列查不到key關(guān)鍵字的記錄,又遇到了空單元,表示找不到該元素,查找失敗。
鏈地址法解決沖突構(gòu)造的哈希表中查找元素,就是根據(jù)哈希函數(shù)得到的元素所在鏈表的頭指針,然后在鏈表中順序查找的過(guò)程。
IT技術(shù)分享社區(qū)
個(gè)人博客網(wǎng)站:https://programmerblog.xyz
文章推薦程序員效率:畫(huà)流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠(yuǎn)程辦公:常用的遠(yuǎn)程協(xié)助軟件,你都知道嗎?51單片機(jī)程序下載、ISP及串口基礎(chǔ)知識(shí)硬件:斷路器、接觸器、繼電器基礎(chǔ)知識(shí)
總結(jié)
以上是生活随笔為你收集整理的算法基础:常用的查找算法知识笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Could not mount the
- 下一篇: Could not mount the