數(shù)據(jù)結(jié)構(gòu)--靜態(tài)樹表和索引順序表的查找

一蜈膨、靜態(tài)樹表的查找
對有序表的查找悼沿,如使用折半查找方法等舔,是在“等概率”的前提下進(jìn)行的,如果查找概率不一樣糟趾,折半查找就不是最佳方法了慌植。
舉例:假設(shè)有序表有5條記錄,且各記錄的查找概率不等义郑,分別為p1 = 0.1蝶柿,p2 = 0.2,p3= 0.1非驮,p4 = 0.4交汤,p5 = 0.2,劫笙,則對此有序表進(jìn)行折半查找芙扎,查找成功時的平均查找長度為


image.png

但是,如果在查找是令給定值先和第4個記錄(這條記錄查找概率高)進(jìn)行比較填大,比較不相等時在繼續(xù)在左子序列或右子序列中進(jìn)行折半查找戒洼,則查找成功時的平均查找長度為


image.png

由此說明,對于每個元素被查找的概率不同的情況下栋盹,折半查找不是最佳方法施逾。
如果把權(quán)值越大的結(jié)點放到越靠近根結(jié)點的位置,縮短查找概率高的結(jié)點的查找路徑例获,進(jìn)而提高查找效率汉额,但是構(gòu)造這種最優(yōu)查找樹,時間復(fù)雜度非常高O(n3)榨汤。因此采用構(gòu)造次優(yōu)查找樹的方法進(jìn)行查找蠕搜,這種樹的查找效率很少低于最優(yōu)查找樹的3%,且構(gòu)造次優(yōu)查找樹的算法的時間復(fù)雜度為O(nlogn)收壕。
構(gòu)造的核心時間就是妓灌,選出一個結(jié)點轨蛤,使得它左右兩側(cè)的子數(shù)組的權(quán)值累加和之差的絕對值最小。把這個結(jié)點當(dāng)做根節(jié)點虫埂,遞歸地用剛才的左右字?jǐn)?shù)組構(gòu)造它的左右子樹祥山。
算法:
void SecondOptional(BiTree &T,Elemtype R[],float sw[],int low,int high)  
{  
    /** 由有序表R[low..high]及其累計權(quán)值表sw(其中sw[0]=0)遞歸構(gòu)造次優(yōu)查找樹T */  
    i = low; min = abs(sw[high]-sw[low]) ; dw = sw[high]+sw[low-1];  
    for(j = low+1 ; j <= high ; j ++) {  
        if(abs(dw-sw[j]-sw[j-1]) < min) {  
            i = j;  
            min = abs(dw-sw[j]-sw[j-1]);  
        }  
    }  
    T = (BiTree)malloc(sizeof(BiTNode));  
    T -> data = R[i];//生成結(jié)點  
    if(i == low) T->lchild = NULL;//左子樹空  
    else SecondOptimal(T->lchild,R,sw,low,i-1);//構(gòu)造左子樹  
    if(i == high) T->rchild = NULL;//右子樹空  
    else SecondOptimal(T->rchild,R,sw,i+1,high);//構(gòu)造右子樹  
}

舉例:

image.png

wi為第i個關(guān)鍵字的權(quán)值,swl為從0到i個關(guān)鍵字之間的權(quán)值之和掉伏,
設(shè)wl-1= 0缝呕,swl-1 = 0
image.png

按照上面的算法,得到的構(gòu)造次優(yōu)查找樹的過程如下:
image.png

構(gòu)造所得次優(yōu)二叉查找樹如下圖所示:
image.png

從次優(yōu)查找樹的結(jié)構(gòu)特點可見斧散,其查找過程類似于折半查找供常,若次優(yōu)查找樹為空,則查找失敗鸡捐,否則栈暇,先將給定值K和其根節(jié)點相比,若不相等箍镜,則根據(jù)給定值K大于或小于根節(jié)點的情況分別在左子樹或右子樹中繼續(xù)查找源祈,直至成功或不成功為止。由于查找過程恰走了一條從根到待查記錄所在結(jié)點的一條路徑色迂,進(jìn)行比較的關(guān)鍵字個數(shù)不超過樹的深度新博,因此,次優(yōu)查找樹的平均查找長度和logn成正比脚草。

二、索引順序表的查找
分塊查找又稱索引順序查找原献,這是順序查找的一種改進(jìn)方法馏慨,在此查找法中,除表本身外姑隅,還要建立一個“索引表”写隶,如下圖


image.png

表中含有18個記錄,分成三個子表(R1, R2, ... R6)(R7, R8, ... R12)(R13, R14, ... R18)讲仰,對每個子表建立一個索引項慕趴,索引項包括兩項內(nèi)容:關(guān)鍵字項(其值為該子表內(nèi)的最大關(guān)鍵字)和項指針(指示該子表的第一個記錄在表中的位置)。索引表按關(guān)鍵字有序鄙陡,則表或者有序冕房,或者分塊有序(分塊有序:第二個子表中所有記錄的關(guān)鍵字均大于第一個子表中的最大關(guān)鍵字,第三個子表中的所有關(guān)鍵字均大于第二個子表中的最大關(guān)鍵字趁矾,以此類推)耙册。
因此,分塊查找過程分兩步:
1毫捣、確定待查記錄所在塊详拙。2帝际、在塊中順序查找
舉例:
給定值K = 38,先將K依次和索引表中最大關(guān)鍵字進(jìn)行比較饶辙,因為22 < K < 48蹲诀,則關(guān)鍵字為38的記錄若存在,必在第二個子表中弃揽,第二個子表的索引項的項指針脯爪,指向第二個子表的第一個記錄是表中的第7個記錄,所以從第7個記錄開始進(jìn)行順序查找蹋宦,直到查到r[10].key = K為止披粟,若K = 29,從第7個記錄查到第12個記錄都沒有比較成功冷冗,則查找失敗守屉。
由于由索引項組成的索引表按關(guān)鍵字有序,則確定塊的查找可以用順序查找蒿辙,也可以用折半查找拇泛,若塊中的記錄是任意排列的,則只能用順序查找了思灌。
分塊查找的平均查找長度為:查找索引表的平均查找長度 + 在塊中查找元素的平均查找長度俺叭。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市泰偿,隨后出現(xiàn)的幾起案子熄守,更是在濱河造成了極大的恐慌,老刑警劉巖耗跛,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裕照,死亡現(xiàn)場離奇詭異,居然都是意外死亡调塌,警方通過查閱死者的電腦和手機晋南,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來羔砾,“玉大人负间,你說我怎么就攤上這事〗啵” “怎么了政溃?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長檀葛。 經(jīng)常有香客問我玩祟,道長,這世上最難降的妖魔是什么屿聋? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任空扎,我火速辦了婚禮藏鹊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘转锈。我一直安慰自己盘寡,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布撮慨。 她就那樣靜靜地躺著竿痰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪砌溺。 梳的紋絲不亂的頭發(fā)上影涉,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音规伐,去河邊找鬼蟹倾。 笑死,一個胖子當(dāng)著我的面吹牛猖闪,可吹牛的內(nèi)容都是我干的鲜棠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼培慌,長吁一口氣:“原來是場噩夢啊……” “哼豁陆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吵护,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盒音,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后馅而,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體里逆,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年用爪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胁镐。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡偎血,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盯漂,到底是詐尸還是另有隱情颇玷,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布就缆,位于F島的核電站帖渠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏竭宰。R本人自食惡果不足惜空郊,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一份招、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧狞甚,春花似錦锁摔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涩盾,卻和暖如春十气,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背春霍。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工砸西, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人终畅。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓籍胯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親离福。 傳聞我的和親對象是個殘疾皇子杖狼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容