3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

B树、B+树、B*树谈到R 树

發(fā)布時(shí)間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 B树、B+树、B*树谈到R 树 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:?https://blog.csdn.net/v_JULY_v/article/details/6530142

?

從B 樹、B+ 樹、B* 樹談到R 樹

?

作者:July、weedge、Frankie。編程藝術(shù)室出品。

說明:本文從B樹開始談起,然后論述B+樹、B*樹,最后談到R 樹。其中B樹、B+樹及B*樹部分由weedge完成,R 樹部分由Frankie完成,全文最終由July統(tǒng)稿修訂完成。

出處:http://blog.csdn.net/v_JULY_v?。

?

第一節(jié)、B樹、B+樹、B*樹
1.前言:

動(dòng)態(tài)查找樹主要有:二叉查找樹(Binary Search Tree),平衡二叉查找樹(Balanced Binary Search Tree),紅黑樹(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找樹結(jié)構(gòu),其查找的時(shí)間復(fù)雜度O(log2N)與樹的深度相關(guān),那么降低樹的深度自然會(huì)提高查找效率。

但是咱們有面對(duì)這樣一個(gè)實(shí)際問題:就是大規(guī)模數(shù)據(jù)存儲(chǔ)中,實(shí)現(xiàn)索引查詢這樣一個(gè)實(shí)際背景下,樹節(jié)點(diǎn)存儲(chǔ)的元素?cái)?shù)量是有限的(如果元素?cái)?shù)量非常多的話,查找就退化成節(jié)點(diǎn)內(nèi)部的線性查找了),這樣導(dǎo)致二叉查找樹結(jié)構(gòu)由于樹的深度過大而造成磁盤I/O讀寫過于頻繁,進(jìn)而導(dǎo)致查詢效率低下(為什么會(huì)出現(xiàn)這種情況,待會(huì)在外部存儲(chǔ)器-磁盤中有所解釋),那么如何減少樹的深度(當(dāng)然是不能減少查詢的數(shù)據(jù)量),一個(gè)基本的想法就是:采用多叉樹結(jié)構(gòu)(由于樹節(jié)點(diǎn)元素?cái)?shù)量是有限的,自然該節(jié)點(diǎn)的子樹數(shù)量也就是有限的)。

也就是說,因?yàn)榇疟P的操作費(fèi)時(shí)費(fèi)資源,如果過于頻繁的多次查找勢(shì)必效率低下。那么如何提高效率,即如何避免磁盤過于頻繁的多次查找呢?根據(jù)磁盤查找存取的次數(shù)往往由樹的高度所決定,所以,只要我們通過某種較好的樹結(jié)構(gòu)減少樹的結(jié)構(gòu)盡量減少樹的高度,那么是不是便能有效減少磁盤查找存取的次數(shù)呢?那這種有效的樹結(jié)構(gòu)是一種怎樣的樹呢?

這樣我們就提出了一個(gè)新的查找樹結(jié)構(gòu)——多路查找樹。根據(jù)平衡二叉樹的啟發(fā),自然就想到平衡多路查找樹結(jié)構(gòu),也就是這篇文章所要闡述的第一個(gè)主題B~tree,即B樹結(jié)構(gòu)(后面,我們將看到,B樹的各種操作能使B樹保持較低的高度,從而達(dá)到有效避免磁盤過于頻繁的查找存取操作,從而有效提高查找效率)。

B-tree(B-tree樹即B樹,B即Balanced,平衡的意思)這棵神奇的樹是在Rudolf Bayer,?Edward M. McCreight(1970)寫的一篇論文《Organization and Maintenance of Large Ordered Indices》中首次提出的(wikipedia中:http://en.wikipedia.org/wiki/B-tree,闡述了B-tree名字來源以及相關(guān)的開源地址)。

在開始介紹B~tree之前,先了解下相關(guān)的硬件知識(shí),才能很好的了解為什么需要B~tree這種外存數(shù)據(jù)結(jié)構(gòu)。?

?

2.外存儲(chǔ)器—磁盤

計(jì)算機(jī)存儲(chǔ)設(shè)備一般分為兩種:內(nèi)存儲(chǔ)器(main memory)和外存儲(chǔ)器(external memory)。 內(nèi)存存取速度快,但容量小,價(jià)格昂貴,而且不能長(zhǎng)期保存數(shù)據(jù)(在不通電情況下數(shù)據(jù)會(huì)消失)。

外存儲(chǔ)器—磁盤是一種直接存取的存儲(chǔ)設(shè)備(DASD)。它是以存取時(shí)間變化不大為特征的??梢灾苯哟嫒∪魏巫址M,且容量大、速度較其它外存設(shè)備更快。

2.1磁盤的構(gòu)造

磁盤是一個(gè)扁平的圓盤(與電唱機(jī)的唱片類似)。盤面上有許多稱為磁道的圓圈,數(shù)據(jù)就記錄在這些磁道上。磁盤可以是單片的,也可以是由若干盤片組成的盤組,每一盤片上有兩個(gè)面。如下圖11.3中所示的6片盤組為例,除去最頂端和最底端的外側(cè)面不存儲(chǔ)數(shù)據(jù)之外,一共有10個(gè)面可以用來保存信息。

???????????????????????????

?

當(dāng)磁盤驅(qū)動(dòng)器執(zhí)行讀/寫功能時(shí)。盤片裝在一個(gè)主軸上,并繞主軸高速旋轉(zhuǎn),當(dāng)磁道在讀/寫頭(又叫磁頭) 下通過時(shí),就可以進(jìn)行數(shù)據(jù)的讀 / 寫了。

一般磁盤分為固定頭盤(磁頭固定)和活動(dòng)頭盤。固定頭盤的每一個(gè)磁道上都有獨(dú)立的磁頭,它是固定不動(dòng)的,專門負(fù)責(zé)這一磁道上數(shù)據(jù)的讀/寫。

活動(dòng)頭盤 (如上圖)的磁頭是可移動(dòng)的。每一個(gè)盤面上只有一個(gè)磁頭(磁頭是雙向的,因此正反盤面都能讀寫)。它可以從該面的一個(gè)磁道移動(dòng)到另一個(gè)磁道。所有磁頭都裝在同一個(gè)動(dòng)臂上,因此不同盤面上的所有磁頭都是同時(shí)移動(dòng)的(行動(dòng)整齊劃一)。當(dāng)盤片繞主軸旋轉(zhuǎn)的時(shí)候,磁頭與旋轉(zhuǎn)的盤片形成一個(gè)圓柱體。各個(gè)盤面上半徑相同的磁道組成了一個(gè)圓柱面,我們稱為柱面 。因此,柱面的個(gè)數(shù)也就是盤面上的磁道數(shù)。?

2.2磁盤的讀/寫原理和效率

磁盤上數(shù)據(jù)必須用一個(gè)三維地址唯一標(biāo)示:柱面號(hào)、盤面號(hào)、塊號(hào)(磁道上的盤塊)。

讀/寫磁盤上某一指定數(shù)據(jù)需要下面3個(gè)步驟:

(1)??首先移動(dòng)臂根據(jù)柱面號(hào)使磁頭移動(dòng)到所需要的柱面上,這一過程被稱為定位或查找 。

(2)??如上圖11.3中所示的6盤組示意圖中,所有磁頭都定位到了10個(gè)盤面的10條磁道上(磁頭都是雙向的)。這時(shí)根據(jù)盤面號(hào)來確定指定盤面上的磁道。

(3) 盤面確定以后,盤片開始旋轉(zhuǎn),將指定塊號(hào)的磁道段移動(dòng)至磁頭下。

經(jīng)過上面三個(gè)步驟,指定數(shù)據(jù)的存儲(chǔ)位置就被找到。這時(shí)就可以開始讀/寫操作了。

訪問某一具體信息,由3部分時(shí)間組成:

● 查找時(shí)間(seek time) Ts: 完成上述步驟(1)所需要的時(shí)間。這部分時(shí)間代價(jià)最高,最大可達(dá)到0.1s左右。

● 等待時(shí)間(latency time) Tl: 完成上述步驟(3)所需要的時(shí)間。由于盤片繞主軸旋轉(zhuǎn)速度很快,一般為7200轉(zhuǎn)/分(電腦硬盤的性能指標(biāo)之一, 家用的普通硬盤的轉(zhuǎn)速一般有5400rpm(筆記本)、7200rpm幾種)。因此一般旋轉(zhuǎn)一圈大約0.0083s。

● 傳輸時(shí)間(transmission time) Tt: 數(shù)據(jù)通過系統(tǒng)總線傳送到內(nèi)存的時(shí)間,一般傳輸一個(gè)字節(jié)(byte)大概0.02us=2*10^(-8)s

磁盤讀取數(shù)據(jù)是以盤塊(block)為基本單位的。位于同一盤塊中的所有數(shù)據(jù)都能被一次性全部讀取出來。而磁盤IO代價(jià)主要花費(fèi)在查找時(shí)間Ts上。因此我們應(yīng)該盡量將相關(guān)信息存放在同一盤塊,同一磁道中?;蛘咧辽俜旁谕恢婊蛳噜徶嫔?#xff0c;以求在讀/寫信息時(shí)盡量減少磁頭來回移動(dòng)的次數(shù),避免過多的查找時(shí)間Ts。

所以,在大規(guī)模數(shù)據(jù)存儲(chǔ)方面,大量數(shù)據(jù)存儲(chǔ)在外存磁盤中,而在外存磁盤中讀取/寫入塊(block)中某數(shù)據(jù)時(shí),首先需要定位到磁盤中的某塊,如何有效地查找磁盤中的數(shù)據(jù),需要一種合理高效的外存數(shù)據(jù)結(jié)構(gòu),就是下面所要重點(diǎn)闡述的B-tree結(jié)構(gòu),以及相關(guān)的變種結(jié)構(gòu):B+-tree結(jié)構(gòu)和B*-tree結(jié)構(gòu)。

3.B- 樹?

?????3.1什么是B-樹

具體講解之前,有一點(diǎn),再次強(qiáng)調(diào)下:B-樹,即為B樹。因?yàn)锽樹的原英文名稱為B-tree,而國(guó)內(nèi)很多人喜歡把B-tree譯作B-樹,其實(shí),這是個(gè)非常不好的直譯,很容易讓人產(chǎn)生誤解。如人們可能會(huì)以為B-樹是一種樹,而B樹又是一種一種樹。而事實(shí)上是,B-tree就是指的B樹。特此說明。

我們知道,B 樹是為了磁盤或其它存儲(chǔ)設(shè)備而設(shè)計(jì)的一種多叉(下面你會(huì)看到,相對(duì)于二叉,B樹每個(gè)內(nèi)結(jié)點(diǎn)有多個(gè)分支,即多叉)平衡查找樹。與本blog之前介紹的紅黑樹很相似,但在降低磁盤I/0操作方面要更好一些。許多數(shù)據(jù)庫(kù)系統(tǒng)都一般使用B樹或者B樹的各種變形結(jié)構(gòu),如下文即將要介紹的B+樹,B*樹來存儲(chǔ)信息。

?B樹與紅黑樹最大的不同在于,B樹的結(jié)點(diǎn)可以有許多子女,從幾個(gè)到幾千個(gè)。那為什么又說B樹與紅黑樹很相似呢?因?yàn)榕c紅黑樹一樣,一棵含n個(gè)結(jié)點(diǎn)的B樹的高度也為O(lgn),但可能比一棵紅黑樹的高度小許多,應(yīng)為它的分支因子比較大。所以,B樹可以在O(logn)時(shí)間內(nèi),實(shí)現(xiàn)各種如插入(insert),刪除(delete)等動(dòng)態(tài)集合操作。

如下圖所示,即是一棵B樹,一棵關(guān)鍵字為英語中輔音字母的B樹,現(xiàn)在要從樹種查找字母R(包含n[x]個(gè)關(guān)鍵字的內(nèi)結(jié)點(diǎn)x,x有n[x]+1]個(gè)子女(也就是說,一個(gè)內(nèi)結(jié)點(diǎn)x若含有n[x]個(gè)關(guān)鍵字,那么x將含有n[x]+1個(gè)子女)。所有的葉結(jié)點(diǎn)都處于相同的深度,帶陰影的結(jié)點(diǎn)為查找字母R時(shí)要檢查的結(jié)點(diǎn)):

?

相信,從上圖你能輕易的看到,一個(gè)內(nèi)結(jié)點(diǎn)x若含有n[x]個(gè)關(guān)鍵字,那么x將含有n[x]+1個(gè)子女。如含有2個(gè)關(guān)鍵字D H的內(nèi)結(jié)點(diǎn)有3個(gè)子女,而含有3個(gè)關(guān)鍵字Q T X的內(nèi)結(jié)點(diǎn)有4個(gè)子女。

????B樹的定義,從下文中,你將看到,或者是用階,或者是用度,如下段文字所述:
????Unfortunately, the literature on B-trees is not uniform in its use of terms relating to B-Trees. (Folk & Zoellick 1992, p. 362)?Bayer & McCreight (1972), Comer (1979), and others define the order of B-tree as the minimum number of keys in a non-root node. Folk & Zoellick (1992) points out that terminology is ambiguous because the maximum number of keys is not clear. An order 3 B-tree might hold a maximum of 6 keys or a maximum of 7 keys. (Knuth 1998,TAOCP p. 483) avoids the problem by defining the order to be maximum number of children (which is one more than the maximum number of keys).

????from: http://en.wikipedia.org/wiki/Btree#Technical_description。

????用階定義的B樹

????B 樹又叫平衡多路查找樹。一棵m階的B 樹 (注:切勿簡(jiǎn)單的認(rèn)為一棵m階的B樹是m叉樹,雖然存在四叉樹,八叉樹,KD樹,及vp/R樹/R*樹/R+樹/X樹/M樹/線段樹/希爾伯特R樹/優(yōu)先R樹等空間劃分樹,但與B樹完全不等同)的特性如下:

樹中每個(gè)結(jié)點(diǎn)最多含有m個(gè)孩子(m>=2);
除根結(jié)點(diǎn)和葉子結(jié)點(diǎn)外,其它每個(gè)結(jié)點(diǎn)至少有[ceil(m / 2)]個(gè)孩子(其中ceil(x)是一個(gè)取上限的函數(shù));
若根結(jié)點(diǎn)不是葉子結(jié)點(diǎn),則至少有2個(gè)孩子(特殊情況:沒有孩子的根結(jié)點(diǎn),即根結(jié)點(diǎn)為葉子結(jié)點(diǎn),整棵樹只有一個(gè)根節(jié)點(diǎn));
所有葉子結(jié)點(diǎn)都出現(xiàn)在同一層,葉子結(jié)點(diǎn)不包含任何關(guān)鍵字信息(可以看做是外部接點(diǎn)或查詢失敗的接點(diǎn),實(shí)際上這些結(jié)點(diǎn)不存在,指向這些結(jié)點(diǎn)的指針都為null);(讀者反饋@冷岳:這里有錯(cuò),葉子節(jié)點(diǎn)只是沒有孩子和指向孩子的指針,這些節(jié)點(diǎn)也存在,也有元素。@研究者July:其實(shí),關(guān)鍵是把什么當(dāng)做葉子結(jié)點(diǎn),因?yàn)槿缂t黑樹中,每一個(gè)NULL指針即當(dāng)做葉子結(jié)點(diǎn),只是沒畫出來而已)。
每個(gè)非終端結(jié)點(diǎn)中包含有n個(gè)關(guān)鍵字信息: (n,P0,K1,P1,K2,P2,......,Kn,Pn)。其中:
???????a)???Ki (i=1...n)為關(guān)鍵字,且關(guān)鍵字按順序升序排序K(i-1)< Ki。?
???????b)???Pi為指向子樹根的接點(diǎn),且指針P(i-1)指向子樹種所有結(jié)點(diǎn)的關(guān)鍵字均小于Ki,但都大于K(i-1)。?
???????c)???關(guān)鍵字的個(gè)數(shù)n必須滿足: [ceil(m / 2)-1]<= n <= m-1。如下圖所示:


????用度定義的B樹

??????針對(duì)上面的5點(diǎn),再闡述下:B樹中每一個(gè)結(jié)點(diǎn)能包含的關(guān)鍵字(如之前上面的D H和Q T X)數(shù)有一個(gè)上界和下界。這個(gè)下界可以用一個(gè)稱作B樹的最小度數(shù)(算法導(dǎo)論中文版上譯作度數(shù),最小度數(shù)即內(nèi)節(jié)點(diǎn)中節(jié)點(diǎn)最小孩子數(shù)目)m(m>=2)表示。

每個(gè)非根的內(nèi)結(jié)點(diǎn)至多有m個(gè)子女,每個(gè)非根的結(jié)點(diǎn)必須至少含有m-1個(gè)關(guān)鍵字,如果樹是非空的,則根結(jié)點(diǎn)至少包含一個(gè)關(guān)鍵字;
每個(gè)結(jié)點(diǎn)可包含至多2m-1個(gè)關(guān)鍵字。所以一個(gè)內(nèi)結(jié)點(diǎn)至多可有2m個(gè)子女。如果一個(gè)結(jié)點(diǎn)恰好有2m-1個(gè)關(guān)鍵字,我們就說這個(gè)結(jié)點(diǎn)是滿的(而稍后介紹的B*樹作為B樹的一種常用變形,B*樹中要求每個(gè)內(nèi)結(jié)點(diǎn)至少為2/3滿,而不是像這里的B樹所要求的至少半滿);
當(dāng)關(guān)鍵字?jǐn)?shù)m=2(t=2的意思是,mmin=2,m可以>=2)時(shí)的B樹是最簡(jiǎn)單的(有很多人會(huì)因此誤認(rèn)為B樹就是二叉查找樹,但二叉查找樹就是二叉查找樹,B樹就是B樹,B樹是一棵含有m(m>=2)個(gè)關(guān)鍵字的平衡多路查找樹),此時(shí),每個(gè)內(nèi)結(jié)點(diǎn)可能因此而含有2個(gè)、3個(gè)或4個(gè)子女,亦即一棵2-3-4樹,然而在實(shí)際中,通常采用大得多的t值。
????B樹中的每個(gè)結(jié)點(diǎn)根據(jù)實(shí)際情況可以包含大量的關(guān)鍵字信息和分支(當(dāng)然是不能超過磁盤塊的大小,根據(jù)磁盤驅(qū)動(dòng)(disk drives)的不同,一般塊的大小在1k~4k左右);這樣樹的深度降低了,這就意味著查找一個(gè)元素只要很少結(jié)點(diǎn)從外存磁盤中讀入內(nèi)存,很快訪問到要查找的數(shù)據(jù)。如果你看完上面關(guān)于B樹定義的介紹,思維感覺不夠清晰,請(qǐng)繼續(xù)參閱下文第6小節(jié)、B樹的插入、刪除操作 部分。

????3.2B樹的類型和節(jié)點(diǎn)定義

????B樹的類型和節(jié)點(diǎn)定義如下圖所示:

?

?

????3.3文件查找的具體過程(涉及磁盤IO操作)

為了簡(jiǎn)單,這里用少量數(shù)據(jù)構(gòu)造一棵3叉樹的形式,實(shí)際應(yīng)用中的B樹結(jié)點(diǎn)中關(guān)鍵字很多的。上面的圖中比如根結(jié)點(diǎn),其中17表示一個(gè)磁盤文件的文件名;小紅方塊表示這個(gè)17文件內(nèi)容在硬盤中的存儲(chǔ)位置;p1表示指向17左子樹的指針。

其結(jié)構(gòu)可以簡(jiǎn)單定義為:

typedef struct {

????/*文件數(shù)*/

????int??file_num;

????/*文件名(key)*/

????char * file_name[max_file_num];

????/*指向子節(jié)點(diǎn)的指針*/

?????BTNode * BTptr[max_file_num+1];

?????/*文件在硬盤中的存儲(chǔ)位置*/

?????FILE_HARD_ADDR offset[max_file_num];

}BTNode;

假如每個(gè)盤塊可以正好存放一個(gè)B樹的結(jié)點(diǎn)(正好存放2個(gè)文件名)。那么一個(gè)BTNODE結(jié)點(diǎn)就代表一個(gè)盤塊,而子樹指針就是存放另外一個(gè)盤塊的地址。

下面,咱們來模擬下查找文件29的過程:

根據(jù)根結(jié)點(diǎn)指針找到文件目錄的根磁盤塊1,將其中的信息導(dǎo)入內(nèi)存?!敬疟PIO操作 1次】????
此時(shí)內(nèi)存中有兩個(gè)文件名17、35和三個(gè)存儲(chǔ)其他磁盤頁(yè)面地址的數(shù)據(jù)。根據(jù)算法我們發(fā)現(xiàn):17<29<35,因此我們找到指針p2。
根據(jù)p2指針,我們定位到磁盤塊3,并將其中的信息導(dǎo)入內(nèi)存?!敬疟PIO操作 2次】????
此時(shí)內(nèi)存中有兩個(gè)文件名26,30和三個(gè)存儲(chǔ)其他磁盤頁(yè)面地址的數(shù)據(jù)。根據(jù)算法我們發(fā)現(xiàn):26<29<30,因此我們找到指針p2。
根據(jù)p2指針,我們定位到磁盤塊8,并將其中的信息導(dǎo)入內(nèi)存?!敬疟PIO操作 3次】????
此時(shí)內(nèi)存中有兩個(gè)文件名28,29。根據(jù)算法我們查找到文件名29,并定位了該文件內(nèi)存的磁盤地址。
分析上面的過程,發(fā)現(xiàn)需要3次磁盤IO操作和3次內(nèi)存查找操作。關(guān)于內(nèi)存中的文件名查找,由于是一個(gè)有序表結(jié)構(gòu),可以利用折半查找提高效率。至于IO操作是影響整個(gè)B樹查找效率的決定因素。

當(dāng)然,如果我們使用平衡二叉樹的磁盤存儲(chǔ)結(jié)構(gòu)來進(jìn)行查找,磁盤4次,最多5次,而且文件越多,B樹比平衡二叉樹所用的磁盤IO操作次數(shù)將越少,效率也越高。

3.4B樹的高度
????根據(jù)上面的例子我們可以看出,對(duì)于輔存做IO讀的次數(shù)取決于B樹的高度。而B樹的高度由什么決定的呢?

????若B樹某一非葉子節(jié)點(diǎn)包含N個(gè)關(guān)鍵字,則此非葉子節(jié)點(diǎn)含有N+1個(gè)孩子結(jié)點(diǎn),而所有的葉子結(jié)點(diǎn)都在第I層,我們可以得出:
因?yàn)楦辽儆袃蓚€(gè)孩子,因此第2層至少有兩個(gè)結(jié)點(diǎn)。
除根和葉子外,其它結(jié)點(diǎn)至少有┌m/2┐個(gè)孩子,
因此在第3層至少有2*┌m/2┐個(gè)結(jié)點(diǎn),
在第4層至少有2*(┌m/2┐^2)個(gè)結(jié)點(diǎn),
在第 I 層至少有2*(┌m/2┐^(l-2) )個(gè)結(jié)點(diǎn),于是有:?N+1 ≥ 2*┌m/2┐I-2;
考慮第L層的結(jié)點(diǎn)個(gè)數(shù)為N+1,那么2*(┌m/2┐^(l-2))≤N+1,也就是L層的最少結(jié)點(diǎn)數(shù)剛好達(dá)到N+1個(gè),即: I≤ log┌m/2┐((N+1)/2 )+2;
  所以
當(dāng)B樹包含N個(gè)關(guān)鍵字時(shí),B樹的最大高度為l-1(因?yàn)橛?jì)算B樹高度時(shí),葉結(jié)點(diǎn)所在層不計(jì)算在內(nèi)),即:l - 1 =?log┌m/2┐((N+1)/2 )+1。
  這個(gè)B樹的高度公式從側(cè)面顯示了B樹的查找效率是相當(dāng)高的。
曾在一次面試中被問到,一棵含有N個(gè)總關(guān)鍵字?jǐn)?shù)的m階的B樹的最大高度是多少?答曰:log_ceil(m/2)(N+1)/2?+ 1 (上面中關(guān)于m階B樹的第1點(diǎn)特性已經(jīng)提到:樹中每個(gè)結(jié)點(diǎn)含有最多含有m個(gè)孩子,即m滿足:ceil(m/2)<=m<=m。而樹中每個(gè)結(jié)點(diǎn)含孩子數(shù)越少,樹的高度則越大,故如此)。在2012微軟4月份的筆試中也問到了此問題。
此外,還有讀者反饋,說上面的B樹的高度計(jì)算公式與算法導(dǎo)論一書上的不同,而后我特意翻看了算法導(dǎo)論第18章關(guān)于B樹的高度一節(jié)的內(nèi)容,如下圖所示:

在上圖中書上所舉的例子中,也許,根據(jù)我們大多數(shù)人的理解,它的高度應(yīng)該是4,而書上卻說的是“一棵高度為3的B樹”。我想,此時(shí),你也就明白了,算法導(dǎo)論一書上的高度的定義是從“0”開始計(jì)數(shù)的,而我們中國(guó)人的習(xí)慣是樹的高度是從“1”開始計(jì)數(shù)的。特此說明。July、二零一二年九月二十七日。
4.B+-tree

B+-tree:是應(yīng)文件系統(tǒng)所需而產(chǎn)生的一種B-tree的變形樹。

一棵m階的B+樹和m階的B樹的異同點(diǎn)在于:

??????1.有n棵子樹的結(jié)點(diǎn)中含有n-1?個(gè)關(guān)鍵字;?(此處頗有爭(zhēng)議,B+樹到底是與B 樹n棵子樹有n-1個(gè)關(guān)鍵字 保持一致,還是不一致:B樹n棵子樹的結(jié)點(diǎn)中含有n個(gè)關(guān)鍵字,待后續(xù)查證。暫先提供兩個(gè)參考鏈接:①wikipedia?http://en.wikipedia.org/wiki/B%2B_tree#Overview;②http://hedengcheng.com/?p=525。而下面B+樹的圖尚未最終確定是否有問題,請(qǐng)讀者注意)

??????2.所有的葉子結(jié)點(diǎn)中包含了全部關(guān)鍵字的信息,及指向含有這些關(guān)鍵字記錄的指針,且葉子結(jié)點(diǎn)本身依關(guān)鍵字的大小自小而大的順序鏈接。 (而B 樹的葉子節(jié)點(diǎn)并沒有包括全部需要查找的信息)

??????3.所有的非終端結(jié)點(diǎn)可以看成是索引部分,結(jié)點(diǎn)中僅含有其子樹根結(jié)點(diǎn)中最大(或最小)關(guān)鍵字。 (而B 樹的非終節(jié)點(diǎn)也包含需要查找的有效信息)

?

?

a)?????為什么說B+-tree比B 樹更適合實(shí)際應(yīng)用中操作系統(tǒng)的文件索引和數(shù)據(jù)庫(kù)索引?

1) B+-tree的磁盤讀寫代價(jià)更低

B+-tree的內(nèi)部結(jié)點(diǎn)并沒有指向關(guān)鍵字具體信息的指針。因此其內(nèi)部結(jié)點(diǎn)相對(duì)B 樹更小。如果把所有同一內(nèi)部結(jié)點(diǎn)的關(guān)鍵字存放在同一盤塊中,那么盤塊所能容納的關(guān)鍵字?jǐn)?shù)量也越多。一次性讀入內(nèi)存中的需要查找的關(guān)鍵字也就越多。相對(duì)來說IO讀寫次數(shù)也就降低了。

????舉個(gè)例子,假設(shè)磁盤中的一個(gè)盤塊容納16bytes,而一個(gè)關(guān)鍵字2bytes,一個(gè)關(guān)鍵字具體信息指針2bytes。一棵9階B-tree(一個(gè)結(jié)點(diǎn)最多8個(gè)關(guān)鍵字)的內(nèi)部結(jié)點(diǎn)需要2個(gè)盤快。而B+ 樹內(nèi)部結(jié)點(diǎn)只需要1個(gè)盤快。當(dāng)需要把內(nèi)部結(jié)點(diǎn)讀入內(nèi)存中的時(shí)候,B 樹就比B+ 樹多一次盤塊查找時(shí)間(在磁盤中就是盤片旋轉(zhuǎn)的時(shí)間)。

2) B+-tree的查詢效率更加穩(wěn)定

由于非終結(jié)點(diǎn)并不是最終指向文件內(nèi)容的結(jié)點(diǎn),而只是葉子結(jié)點(diǎn)中關(guān)鍵字的索引。所以任何關(guān)鍵字的查找必須走一條從根結(jié)點(diǎn)到葉子結(jié)點(diǎn)的路。所有關(guān)鍵字查詢的路徑長(zhǎng)度相同,導(dǎo)致每一個(gè)數(shù)據(jù)的查詢效率相當(dāng)。

讀者點(diǎn)評(píng)
本文評(píng)論下第149樓,fanyy1991針對(duì)上文所說的兩點(diǎn),道:個(gè)人覺得這兩個(gè)原因都不是主要原因。數(shù)據(jù)庫(kù)索引采用B+樹的主要原因是 B樹在提高了磁盤IO性能的同時(shí)并沒有解決元素遍歷的效率低下的問題。正是為了解決這個(gè)問題,B+樹應(yīng)運(yùn)而生。B+樹只要遍歷葉子節(jié)點(diǎn)就可以實(shí)現(xiàn)整棵樹的遍歷。而且在數(shù)據(jù)庫(kù)中基于范圍的查詢是非常頻繁的,而B樹不支持這樣的操作(或者說效率太低)。

b)????B+-tree的應(yīng)用: VSAM(虛擬存儲(chǔ)存取法)文件(來源論文 the ubiquitous Btree 作者:D COMER - 1979 )

?

?

5.B*-tree

B*-tree是B+-tree的變體,在B+樹的基礎(chǔ)上(所有的葉子結(jié)點(diǎn)中包含了全部關(guān)鍵字的信息,及指向含有這些關(guān)鍵字記錄的指針),B*樹中非根和非葉子結(jié)點(diǎn)再增加指向兄弟的指針;B*樹定義了非葉子結(jié)點(diǎn)關(guān)鍵字個(gè)數(shù)至少為(2/3)*M,即塊的最低使用率為2/3(代替B+樹的1/2)。給出了一個(gè)簡(jiǎn)單實(shí)例,如下圖所示:

?

B+樹的分裂:當(dāng)一個(gè)結(jié)點(diǎn)滿時(shí),分配一個(gè)新的結(jié)點(diǎn),并將原結(jié)點(diǎn)中1/2的數(shù)據(jù)復(fù)制到新結(jié)點(diǎn),最后在父結(jié)點(diǎn)中增加新結(jié)點(diǎn)的指針;B+樹的分裂只影響原結(jié)點(diǎn)和父結(jié)點(diǎn),而不會(huì)影響兄弟結(jié)點(diǎn),所以它不需要指向兄弟的指針。

B*樹的分裂:當(dāng)一個(gè)結(jié)點(diǎn)滿時(shí),如果它的下一個(gè)兄弟結(jié)點(diǎn)未滿,那么將一部分?jǐn)?shù)據(jù)移到兄弟結(jié)點(diǎn)中,再在原結(jié)點(diǎn)插入關(guān)鍵字,最后修改父結(jié)點(diǎn)中兄弟結(jié)點(diǎn)的關(guān)鍵字(因?yàn)樾值芙Y(jié)點(diǎn)的關(guān)鍵字范圍改變了);如果兄弟也滿了,則在原結(jié)點(diǎn)與兄弟結(jié)點(diǎn)之間增加新結(jié)點(diǎn),并各復(fù)制1/3的數(shù)據(jù)到新結(jié)點(diǎn),最后在父結(jié)點(diǎn)增加新結(jié)點(diǎn)的指針。

所以,B*樹分配新結(jié)點(diǎn)的概率比B+樹要低,空間使用率更高;

?

6、B樹的插入、刪除操作

上面第3小節(jié)簡(jiǎn)單介紹了利用B樹這種結(jié)構(gòu)如何訪問外存磁盤中的數(shù)據(jù)的情況,下面咱們通過另外一個(gè)實(shí)例來對(duì)這棵B樹的插入(insert),刪除(delete)基本操作進(jìn)行詳細(xì)的介紹。
但在此之前,咱們還得簡(jiǎn)單回顧下一棵m階的B 樹的特性,如下:
樹中每個(gè)結(jié)點(diǎn)含有最多含有m個(gè)孩子,即m滿足:ceil(m/2)<=m<=m。
除根結(jié)點(diǎn)和葉子結(jié)點(diǎn)外,其它每個(gè)結(jié)點(diǎn)至少有[ceil(m / 2)]個(gè)孩子(其中ceil(x)是一個(gè)取上限的函數(shù));
若根結(jié)點(diǎn)不是葉子結(jié)點(diǎn),則至少有2個(gè)孩子(特殊情況:沒有孩子的根結(jié)點(diǎn),即根結(jié)點(diǎn)為葉子結(jié)點(diǎn),整棵樹只有一個(gè)根節(jié)點(diǎn));
所有葉子結(jié)點(diǎn)都出現(xiàn)在同一層,葉子結(jié)點(diǎn)不包含任何關(guān)鍵字信息(可以看做是外部接點(diǎn)或查詢失敗的接點(diǎn),實(shí)際上這些結(jié)點(diǎn)不存在,指向這些結(jié)點(diǎn)的指針都為null);
每個(gè)非終端結(jié)點(diǎn)中包含有n個(gè)關(guān)鍵字信息: (n,P0,K1,P1,K2,P2,......,Kn,Pn)。其中:
???????a)???Ki (i=1...n)為關(guān)鍵字,且關(guān)鍵字按順序升序排序K(i-1)< Ki。?
???????b)???Pi為指向子樹根的接點(diǎn),且指針P(i-1)指向子樹種所有結(jié)點(diǎn)的關(guān)鍵字均小于Ki,但都大于K(i-1)。?
???????c)???除根結(jié)點(diǎn)之外的結(jié)點(diǎn)的關(guān)鍵字的個(gè)數(shù)n必須滿足: [ceil(m / 2)-1]<= n <= m-1(葉子結(jié)點(diǎn)也必須滿足此條關(guān)于關(guān)鍵字?jǐn)?shù)的性質(zhì),根結(jié)點(diǎn)除外)。
ok,下面咱們以一棵5階(即樹中任一結(jié)點(diǎn)至多含有4個(gè)關(guān)鍵字,5棵子樹)B樹實(shí)例進(jìn)行講解(如下圖所示):

備注:關(guān)鍵字?jǐn)?shù)(2-4個(gè))針對(duì)--非根結(jié)點(diǎn)(包括葉子結(jié)點(diǎn)在內(nèi)),孩子數(shù)(3-5個(gè))--針對(duì)根結(jié)點(diǎn)和葉子結(jié)點(diǎn)之外的內(nèi)結(jié)點(diǎn)。當(dāng)然,根結(jié)點(diǎn)是必須至少有2個(gè)孩子的,不然就成直線型搜索樹了。下圖中,讀者可以看到關(guān)鍵字?jǐn)?shù)2-4個(gè),內(nèi)結(jié)點(diǎn)孩子數(shù)3-5個(gè):

關(guān)鍵字為大寫字母,順序?yàn)樽帜干颉?/p>

結(jié)點(diǎn)定義如下:

typedef?struct{

???int?Count;?????????//?當(dāng)前節(jié)點(diǎn)中關(guān)鍵元素?cái)?shù)目

???ItemType?Key[4];???//?存儲(chǔ)關(guān)鍵字元素的數(shù)組

???long?Branch[5];????//?偽指針數(shù)組,(記錄數(shù)目)方便判斷合并和分裂的情況

}?NodeType;

?

6.1、插入(insert)操作

插入一個(gè)元素時(shí),首先在B樹中是否存在,如果不存在,即在葉子結(jié)點(diǎn)處結(jié)束,然后在葉子結(jié)點(diǎn)中插入該新的元素,注意:如果葉子結(jié)點(diǎn)空間足夠,這里需要向右移動(dòng)該葉子結(jié)點(diǎn)中大于新插入關(guān)鍵字的元素,如果空間滿了以致沒有足夠的空間去添加新的元素,則將該結(jié)點(diǎn)進(jìn)行“分裂”,將一半數(shù)量的關(guān)鍵字元素分裂到新的其相鄰右結(jié)點(diǎn)中,中間關(guān)鍵字元素上移到父結(jié)點(diǎn)中(當(dāng)然,如果父結(jié)點(diǎn)空間滿了,也同樣需要“分裂”操作),而且當(dāng)結(jié)點(diǎn)中關(guān)鍵元素向右移動(dòng)了,相關(guān)的指針也需要向右移。如果在根結(jié)點(diǎn)插入新元素,空間滿了,則進(jìn)行分裂操作,這樣原來的根結(jié)點(diǎn)中的中間關(guān)鍵字元素向上移動(dòng)到新的根結(jié)點(diǎn)中,因此導(dǎo)致樹的高度增加一層。如下圖所示:

1、OK,下面咱們通過一個(gè)實(shí)例來逐步講解下。插入以下字符字母到一棵空的B?樹中(非根結(jié)點(diǎn)關(guān)鍵字?jǐn)?shù)小了(小于2個(gè))就合并,大了(超過4個(gè))就分裂):C?N?G?A?H?E?K?Q?M?F?W?L?T?Z?D?P?R?X?Y?S,首先,結(jié)點(diǎn)空間足夠,4個(gè)字母插入相同的結(jié)點(diǎn)中,如下圖:

?

2、當(dāng)咱們?cè)囍迦際時(shí),結(jié)點(diǎn)發(fā)現(xiàn)空間不夠,以致將其分裂成2個(gè)結(jié)點(diǎn),移動(dòng)中間元素G上移到新的根結(jié)點(diǎn)中,在實(shí)現(xiàn)過程中,咱們把A和C留在當(dāng)前結(jié)點(diǎn)中,而H和N放置新的其右鄰居結(jié)點(diǎn)中。如下圖:

?

3、當(dāng)咱們插入E,K,Q時(shí),不需要任何分裂操作

?

?

?

?

?

?

?

?

?

?

?

?

4、插入M需要一次分裂,注意M恰好是中間關(guān)鍵字元素,以致向上移到父節(jié)點(diǎn)中

?

5、插入F,W,L,T不需要任何分裂操作

?

6、插入Z時(shí),最右的葉子結(jié)點(diǎn)空間滿了,需要進(jìn)行分裂操作,中間元素T上移到父節(jié)點(diǎn)中,注意通過上移中間元素,樹最終還是保持平衡,分裂結(jié)果的結(jié)點(diǎn)存在2個(gè)關(guān)鍵字元素。

?

7、插入D時(shí),導(dǎo)致最左邊的葉子結(jié)點(diǎn)被分裂,D恰好也是中間元素,上移到父節(jié)點(diǎn)中,然后字母P,R,X,Y陸續(xù)插入不需要任何分裂操作(別忘了,樹中至多5個(gè)孩子)。

?

8、最后,當(dāng)插入S時(shí),含有N,P,Q,R的結(jié)點(diǎn)需要分裂,把中間元素Q上移到父節(jié)點(diǎn)中,但是情況來了,父節(jié)點(diǎn)中空間已經(jīng)滿了,所以也要進(jìn)行分裂,將父節(jié)點(diǎn)中的中間元素M上移到新形成的根結(jié)點(diǎn)中,注意以前在父節(jié)點(diǎn)中的第三個(gè)指針在修改后包括D和G節(jié)點(diǎn)中。這樣具體插入操作的完成,下面介紹刪除操作,刪除操作相對(duì)于插入操作要考慮的情況多點(diǎn)。

?

6.2、刪除(delete)操作

首先查找B樹中需刪除的元素,如果該元素在B樹中存在,則將該元素在其結(jié)點(diǎn)中進(jìn)行刪除,如果刪除該元素后,首先判斷該元素是否有左右孩子結(jié)點(diǎn),如果有,則上移孩子結(jié)點(diǎn)中的某相近元素(“左孩子最右邊的節(jié)點(diǎn)”或“右孩子最左邊的節(jié)點(diǎn)”)到父節(jié)點(diǎn)中,然后是移動(dòng)之后的情況;如果沒有,直接刪除后,移動(dòng)之后的情況。

刪除元素,移動(dòng)相應(yīng)元素之后,如果某結(jié)點(diǎn)中元素?cái)?shù)目(即關(guān)鍵字?jǐn)?shù))小于ceil(m/2)-1,則需要看其某相鄰兄弟結(jié)點(diǎn)是否豐滿(結(jié)點(diǎn)中元素個(gè)數(shù)大于ceil(m/2)-1)(還記得第一節(jié)中關(guān)于B樹的第5個(gè)特性中的c點(diǎn)么?:?c)除根結(jié)點(diǎn)之外的結(jié)點(diǎn)(包括葉子結(jié)點(diǎn))的關(guān)鍵字的個(gè)數(shù)n必須滿足: (ceil(m / 2)-1)<= n <= m-1。m表示最多含有m個(gè)孩子,n表示關(guān)鍵字?jǐn)?shù)。在本小節(jié)中舉的一顆B樹的示例中,關(guān)鍵字?jǐn)?shù)n滿足:2<=n<=4),如果豐滿,則向父節(jié)點(diǎn)借一個(gè)元素來滿足條件;如果其相鄰兄弟都剛脫貧,即借了之后其結(jié)點(diǎn)數(shù)目小于ceil(m/2)-1,則該結(jié)點(diǎn)與其相鄰的某一兄弟結(jié)點(diǎn)進(jìn)行“合并”成一個(gè)結(jié)點(diǎn),以此來滿足條件。那咱們通過下面實(shí)例來詳細(xì)了解吧。

以上述插入操作構(gòu)造的一棵5階B樹(樹中最多含有m(m=5)個(gè)孩子,因此關(guān)鍵字?jǐn)?shù)最小為ceil(m / 2)-1=2。還是這句話,關(guān)鍵字?jǐn)?shù)小了(小于2個(gè))就合并,大了(超過4個(gè))就分裂)為例,依次刪除H,T,R,E。

1、首先刪除元素H,當(dāng)然首先查找H,H在一個(gè)葉子結(jié)點(diǎn)中,且該葉子結(jié)點(diǎn)元素?cái)?shù)目3大于最小元素?cái)?shù)目ceil(m/2)-1=2,則操作很簡(jiǎn)單,咱們只需要移動(dòng)K至原來H的位置,移動(dòng)L至K的位置(也就是結(jié)點(diǎn)中刪除元素后面的元素向前移動(dòng))

?

2、下一步,刪除T,因?yàn)門沒有在葉子結(jié)點(diǎn)中,而是在中間結(jié)點(diǎn)中找到,咱們發(fā)現(xiàn)他的繼承者W(字母升序的下個(gè)元素),將W上移到T的位置,然后將原包含W的孩子結(jié)點(diǎn)中的W進(jìn)行刪除,這里恰好刪除W后,該孩子結(jié)點(diǎn)中元素個(gè)數(shù)大于2,無需進(jìn)行合并操作。

?

3、下一步刪除R,R在葉子結(jié)點(diǎn)中,但是該結(jié)點(diǎn)中元素?cái)?shù)目為2,刪除導(dǎo)致只有1個(gè)元素,已經(jīng)小于最小元素?cái)?shù)目ceil(5/2)-1=2,而由前面我們已經(jīng)知道:如果其某個(gè)相鄰兄弟結(jié)點(diǎn)中比較豐滿(元素個(gè)數(shù)大于ceil(5/2)-1=2),則可以向父結(jié)點(diǎn)借一個(gè)元素,然后將最豐滿的相鄰兄弟結(jié)點(diǎn)中上移最后或最前一個(gè)元素到父節(jié)點(diǎn)中(有沒有看到紅黑樹中左旋操作的影子?),在這個(gè)實(shí)例中,右相鄰兄弟結(jié)點(diǎn)中比較豐滿(3個(gè)元素大于2),所以先向父節(jié)點(diǎn)借一個(gè)元素W下移到該葉子結(jié)點(diǎn)中,代替原來S的位置,S前移;然后X在相鄰右兄弟結(jié)點(diǎn)中上移到父結(jié)點(diǎn)中,最后在相鄰右兄弟結(jié)點(diǎn)中刪除X,后面元素前移。

?

4、最后一步刪除E,?刪除后會(huì)導(dǎo)致很多問題,因?yàn)镋所在的結(jié)點(diǎn)數(shù)目剛好達(dá)標(biāo),剛好滿足最小元素個(gè)數(shù)(ceil(5/2)-1=2),而相鄰的兄弟結(jié)點(diǎn)也是同樣的情況,刪除一個(gè)元素都不能滿足條件,所以需要該節(jié)點(diǎn)與某相鄰兄弟結(jié)點(diǎn)進(jìn)行合并操作;首先移動(dòng)父結(jié)點(diǎn)中的元素(該元素在兩個(gè)需要合并的兩個(gè)結(jié)點(diǎn)元素之間)下移到其子結(jié)點(diǎn)中,然后將這兩個(gè)結(jié)點(diǎn)進(jìn)行合并成一個(gè)結(jié)點(diǎn)。所以在該實(shí)例中,咱們首先將父節(jié)點(diǎn)中的元素D下移到已經(jīng)刪除E而只有F的結(jié)點(diǎn)中,然后將含有D和F的結(jié)點(diǎn)和含有A,C的相鄰兄弟結(jié)點(diǎn)進(jìn)行合并成一個(gè)結(jié)點(diǎn)。

?

5、也許你認(rèn)為這樣刪除操作已經(jīng)結(jié)束了,其實(shí)不然,在看看上圖,對(duì)于這種特殊情況,你立即會(huì)發(fā)現(xiàn)父節(jié)點(diǎn)只包含一個(gè)元素G,沒達(dá)標(biāo)(因?yàn)榉歉?jié)點(diǎn)包括葉子結(jié)點(diǎn)的關(guān)鍵字?jǐn)?shù)n必須滿足于2=<n<=4,而此處的n=1),這是不能夠接受的。如果這個(gè)問題結(jié)點(diǎn)的相鄰兄弟比較豐滿,則可以向父結(jié)點(diǎn)借一個(gè)元素。假設(shè)這時(shí)右兄弟結(jié)點(diǎn)(含有Q,X)有一個(gè)以上的元素(Q右邊還有元素),然后咱們將M下移到元素很少的子結(jié)點(diǎn)中,將Q上移到M的位置,這時(shí),Q的左子樹將變成M的右子樹,也就是含有N,P結(jié)點(diǎn)被依附在M的右指針上。所以在這個(gè)實(shí)例中,咱們沒有辦法去借一個(gè)元素,只能與兄弟結(jié)點(diǎn)進(jìn)行合并成一個(gè)結(jié)點(diǎn),而根結(jié)點(diǎn)中的唯一元素M下移到子結(jié)點(diǎn),這樣,樹的高度減少一層。

?

為了進(jìn)一步詳細(xì)討論刪除的情況,再舉另外一個(gè)實(shí)例:

這里是一棵不同的5序B樹,那咱們?cè)囍鴦h除C

?

于是將刪除元素C的右子結(jié)點(diǎn)中的D元素上移到C的位置,但是出現(xiàn)上移元素后,只有一個(gè)元素的結(jié)點(diǎn)的情況。

又因?yàn)楹蠩的結(jié)點(diǎn),其相鄰兄弟結(jié)點(diǎn)才剛脫貧(最少元素個(gè)數(shù)為2),不可能向父節(jié)點(diǎn)借元素,所以只能進(jìn)行合并操作,于是這里將含有A,B的左兄弟結(jié)點(diǎn)和含有E的結(jié)點(diǎn)進(jìn)行合并成一個(gè)結(jié)點(diǎn)。

?

這樣又出現(xiàn)只含有一個(gè)元素F結(jié)點(diǎn)的情況,這時(shí),其相鄰的兄弟結(jié)點(diǎn)是豐滿的(元素個(gè)數(shù)為3>最小元素個(gè)數(shù)2),這樣就可以想父結(jié)點(diǎn)借元素了,把父結(jié)點(diǎn)中的J下移到該結(jié)點(diǎn)中,相應(yīng)的如果結(jié)點(diǎn)中J后有元素則前移,然后相鄰兄弟結(jié)點(diǎn)中的第一個(gè)元素(或者最后一個(gè)元素)上移到父節(jié)點(diǎn)中,后面的元素(或者前面的元素)前移(或者后移);注意含有K,L的結(jié)點(diǎn)以前依附在M的左邊,現(xiàn)在變?yōu)橐栏皆贘的右邊。這樣每個(gè)結(jié)點(diǎn)都滿足B樹結(jié)構(gòu)性質(zhì)。

?

從以上操作可看出:除根結(jié)點(diǎn)之外的結(jié)點(diǎn)(包括葉子結(jié)點(diǎn))的關(guān)鍵字的個(gè)數(shù)n滿足:(ceil(m / 2)-1)<= n <= m-1,即2<=n<=4。這也佐證了咱們之前的觀點(diǎn)。刪除操作完。

?

7.總結(jié)

通過以上介紹,大致將B樹,B+樹,B*樹總結(jié)如下:

B樹:有序數(shù)組+平衡多叉樹;

B+樹:有序數(shù)組鏈表+平衡多叉樹;

B*樹:一棵豐滿的B+樹。
????在大規(guī)模數(shù)據(jù)存儲(chǔ)的文件系統(tǒng)中,B~tree系列數(shù)據(jù)結(jié)構(gòu),起著很重要的作用,對(duì)于存儲(chǔ)不同的數(shù)據(jù),節(jié)點(diǎn)相關(guān)的信息也是有所不同,這里根據(jù)自己的理解,畫的一個(gè)查找以職工號(hào)為關(guān)鍵字,職工號(hào)為38的記錄的簡(jiǎn)單示意圖。(這里假設(shè)每個(gè)物理塊容納3個(gè)索引,磁盤的I/O操作的基本單位是塊(block),磁盤訪問很費(fèi)時(shí),采用B+樹有效的減少了訪問磁盤的次數(shù)。)

對(duì)于像MySQL,DB2,Oracle等數(shù)據(jù)庫(kù)中的索引結(jié)構(gòu)得有較深入的了解才行,建議去找一些B 樹相關(guān)的開源代碼研究。

走進(jìn)搜索引擎的作者梁斌老師針對(duì)B樹、B+樹給出了他的意見(為了真實(shí)性,特引用其原話,未作任何改動(dòng)):?“B+樹還有一個(gè)最大的好處,方便掃庫(kù),B樹必須用中序遍歷的方法按序掃庫(kù),而B+樹直接從葉子結(jié)點(diǎn)挨個(gè)掃一遍就完了,B+樹支持range-query非常方便,而B樹不支持。這是數(shù)據(jù)庫(kù)選用B+樹的最主要原因。

????比如要查 5-10之間的,B+樹一把到5這個(gè)標(biāo)記,再一把到10,然后串起來就行了,B樹就非常麻煩。B樹的好處,就是成功查詢特別有利,因?yàn)闃涞母叨瓤傮w要比B+樹矮。不成功的情況下,B樹也比B+樹稍稍占一點(diǎn)點(diǎn)便宜。

????B樹比如你的例子中查,17的話,一把就得到結(jié)果了,
有很多基于頻率的搜索是選用B樹,越頻繁query的結(jié)點(diǎn)越往根上走,前提是需要對(duì)query做統(tǒng)計(jì),而且要對(duì)key做一些變化。

????另外B樹也好B+樹也好,根或者上面幾層因?yàn)楸环磸?fù)query,所以這幾塊基本都在內(nèi)存中,不會(huì)出現(xiàn)讀磁盤IO,一般已啟動(dòng)的時(shí)候,就會(huì)主動(dòng)換入內(nèi)存?!狈浅8兄x。

????Bucket Li:"mysql 底層存儲(chǔ)是用B+樹實(shí)現(xiàn)的,知道為什么么。內(nèi)存中B+樹是沒有優(yōu)勢(shì)的,但是一到磁盤,B+樹的威力就出來了"。

?


第二節(jié)、R樹:處理空間存儲(chǔ)問題
相信經(jīng)過上面第一節(jié)的介紹,你已經(jīng)對(duì)B樹或者B+樹有所了解。這種樹可以非常好的處理一維空間存儲(chǔ)的問題。B樹是一棵平衡樹,它是把一維直線分為若干段線段,當(dāng)我們查找滿足某個(gè)要求的點(diǎn)的時(shí)候,只要去查找它所屬的線段即可。依我看來,這種思想其實(shí)就是先找一個(gè)大的空間,再逐步縮小所要查找的空間,最終在一個(gè)自己設(shè)定的最小不可分空間內(nèi)找出滿足要求的解。一個(gè)典型的B樹查找如下:

?

要查找某一滿足條件的點(diǎn),先去找到滿足條件的線段,然后遍歷所在線段上的點(diǎn),即可找到答案。

B樹是一種相對(duì)來說比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),尤其是在它的刪除與插入操作過程中,因?yàn)樗婕暗搅巳~子結(jié)點(diǎn)的分解與合并。由于本文第一節(jié)已經(jīng)詳細(xì)介紹了B樹和B+樹,下面直接開始介紹我們的第二個(gè)主角:R樹。

?

簡(jiǎn)介
1984年,加州大學(xué)伯克利分校的Guttman發(fā)表了一篇題為“R-trees: a dynamic index structure for spatial searching”的論文,向世人介紹了R樹這種處理高維空間存儲(chǔ)問題的數(shù)據(jù)結(jié)構(gòu)。本文便是基于這篇論文寫作完成的,因此如果大家對(duì)R樹非常有興趣,我想最好還是參考一下原著:)。為表示對(duì)這位牛人的尊重,給個(gè)引用先:

Guttman, A.; “R-trees: a dynamic index structure for spatial searching,” ACM, 1984, 14

R樹在數(shù)據(jù)庫(kù)等領(lǐng)域做出的功績(jī)是非常顯著的。它很好的解決了在高維空間搜索等問題。舉個(gè)R樹在現(xiàn)實(shí)領(lǐng)域中能夠解決的例子:查找20英里以內(nèi)所有的餐廳。如果沒有R樹你會(huì)怎么解決?一般情況下我們會(huì)把餐廳的坐標(biāo)(x,y)分為兩個(gè)字段存放在數(shù)據(jù)庫(kù)中,一個(gè)字段記錄經(jīng)度,另一個(gè)字段記錄緯度。這樣的話我們就需要遍歷所有的餐廳獲取其位置信息,然后計(jì)算是否滿足要求。如果一個(gè)地區(qū)有100家餐廳的話,我們就要進(jìn)行100次位置計(jì)算操作了,如果應(yīng)用到谷歌地圖這種超大數(shù)據(jù)庫(kù)中,這種方法便必定不可行了。

R樹就很好的解決了這種高維空間搜索問題。它把B樹的思想很好的擴(kuò)展到了多維空間,采用了B樹分割空間的思想,并在添加、刪除操作時(shí)采用合并、分解結(jié)點(diǎn)的方法,保證樹的平衡性。因此,R樹就是一棵用來存儲(chǔ)高維數(shù)據(jù)的平衡樹。

OK,接下來,本文將詳細(xì)介紹R樹的數(shù)據(jù)結(jié)構(gòu)以及R樹的操作。至于R樹的擴(kuò)展與R樹的性能問題,可以查閱相關(guān)論文。

?

R樹的數(shù)據(jù)結(jié)構(gòu)
如上所述,R樹是B樹在高維空間的擴(kuò)展,是一棵平衡樹。每個(gè)R樹的葉子結(jié)點(diǎn)包含了多個(gè)指向不同數(shù)據(jù)的指針,這些數(shù)據(jù)可以是存放在硬盤中的,也可以是存在內(nèi)存中。根據(jù)R樹的這種數(shù)據(jù)結(jié)構(gòu),當(dāng)我們需要進(jìn)行一個(gè)高維空間查詢時(shí),我們只需要遍歷少數(shù)幾個(gè)葉子結(jié)點(diǎn)所包含的指針,查看這些指針指向的數(shù)據(jù)是否滿足要求即可。這種方式使我們不必遍歷所有數(shù)據(jù)即可獲得答案,效率顯著提高。下圖1是R樹的一個(gè)簡(jiǎn)單實(shí)例:

我們?cè)谏厦嬲f過,R樹運(yùn)用了空間分割的理念,這種理念是如何實(shí)現(xiàn)的呢?R樹采用了一種稱為MBR(Minimal Bounding Rectangle)的方法,在此我把它譯作“最小邊界矩形”。從葉子結(jié)點(diǎn)開始用矩形(rectangle)將空間框起來,結(jié)點(diǎn)越往上,框住的空間就越大,以此對(duì)空間進(jìn)行分割。有點(diǎn)不懂?沒關(guān)系,繼續(xù)往下看。在這里我還想提一下,R樹中的R應(yīng)該代表的是Rectangle(此處參考wikipedia上關(guān)于R樹的介紹),而不是大多數(shù)國(guó)內(nèi)教材中所說的Region(很多書把R樹稱為區(qū)域樹,這是有誤的)。我們就拿二維空間來舉例。下圖是Guttman論文中的一幅圖:

?

我來詳細(xì)解釋一下這張圖。先來看圖(b)

首先我們假設(shè)所有數(shù)據(jù)都是二維空間下的點(diǎn),圖中僅僅標(biāo)志了R8區(qū)域中的數(shù)據(jù),也就是那個(gè)shape of data object。別把那一塊不規(guī)則圖形看成一個(gè)數(shù)據(jù),我們把它看作是多個(gè)數(shù)據(jù)圍成的一個(gè)區(qū)域。為了實(shí)現(xiàn)R樹結(jié)構(gòu),我們用一個(gè)最小邊界矩形恰好框住這個(gè)不規(guī)則區(qū)域,這樣,我們就構(gòu)造出了一個(gè)區(qū)域:R8。R8的特點(diǎn)很明顯,就是正正好好框住所有在此區(qū)域中的數(shù)據(jù)。其他實(shí)線包圍住的區(qū)域,如R9,R10,R12等都是同樣的道理。這樣一來,我們一共得到了12個(gè)最最基本的最小矩形。這些矩形都將被存儲(chǔ)在子結(jié)點(diǎn)中。
下一步操作就是進(jìn)行高一層次的處理。我們發(fā)現(xiàn)R8,R9,R10三個(gè)矩形距離最為靠近,因此就可以用一個(gè)更大的矩形R3恰好框住這3個(gè)矩形。
同樣道理,R15,R16被R6恰好框住,R11,R12被R4恰好框住,等等。所有最基本的最小邊界矩形被框入更大的矩形中之后,再次迭代,用更大的框去框住這些矩形。
我想大家都應(yīng)該理解這個(gè)數(shù)據(jù)結(jié)構(gòu)的特征了。用地圖的例子來解釋,就是所有的數(shù)據(jù)都是餐廳所對(duì)應(yīng)的地點(diǎn),先把相鄰的餐廳劃分到同一塊區(qū)域,劃分好所有餐廳之后,再把鄰近的區(qū)域劃分到更大的區(qū)域,劃分完畢后再次進(jìn)行更高層次的劃分,直到劃分到只剩下兩個(gè)最大的區(qū)域?yàn)橹?。要查找的時(shí)候就方便了。

下面就可以把這些大大小小的矩形存入我們的R樹中去了。根結(jié)點(diǎn)存放的是兩個(gè)最大的矩形,這兩個(gè)最大的矩形框住了所有的剩余的矩形,當(dāng)然也就框住了所有的數(shù)據(jù)。下一層的結(jié)點(diǎn)存放了次大的矩形,這些矩形縮小了范圍。每個(gè)葉子結(jié)點(diǎn)都是存放的最小的矩形,這些矩形中可能包含有n個(gè)數(shù)據(jù)。

在這里,讀者先不要去糾結(jié)于如何劃分?jǐn)?shù)據(jù)到最小區(qū)域矩形,也不要糾結(jié)怎樣用更大的矩形框住小矩形,這些都是下一節(jié)我們要討論的。

講完了基本的數(shù)據(jù)結(jié)構(gòu),我們來講個(gè)實(shí)例,如何查詢特定的數(shù)據(jù)。又以餐廳為例,假設(shè)我要查詢廣州市天河區(qū)天河城附近一公里的所有餐廳地址怎么辦?

打開地圖(也就是整個(gè)R樹),先選擇國(guó)內(nèi)還是國(guó)外(也就是根結(jié)點(diǎn))。
然后選擇華南地區(qū)(對(duì)應(yīng)第一層結(jié)點(diǎn)),選擇廣州市(對(duì)應(yīng)第二層結(jié)點(diǎn)),
再選擇天河區(qū)(對(duì)應(yīng)第三層結(jié)點(diǎn)),
最后選擇天河城所在的那個(gè)區(qū)域(對(duì)應(yīng)葉子結(jié)點(diǎn),存放有最小矩形),遍歷所有在此區(qū)域內(nèi)的結(jié)點(diǎn),看是否滿足我們的要求即可。
怎么樣,其實(shí)R樹的查找規(guī)則跟查地圖很像吧?對(duì)應(yīng)下圖:


一棵R樹滿足如下的性質(zhì):

1.?????除非它是根結(jié)點(diǎn)之外,所有葉子結(jié)點(diǎn)包含有m至M個(gè)記錄索引(條目)。作為根結(jié)點(diǎn)的葉子結(jié)點(diǎn)所具有的記錄個(gè)數(shù)可以少于m。通常,m=M/2。

2.?????對(duì)于所有在葉子中存儲(chǔ)的記錄(條目),I是最小的可以在空間中完全覆蓋這些記錄所代表的點(diǎn)的矩形(注意:此處所說的“矩形”是可以擴(kuò)展到高維空間的)。

3.?????每一個(gè)非葉子結(jié)點(diǎn)擁有m至M個(gè)孩子結(jié)點(diǎn),除非它是根結(jié)點(diǎn)。

4.?????對(duì)于在非葉子結(jié)點(diǎn)上的每一個(gè)條目,i是最小的可以在空間上完全覆蓋這些條目所代表的店的矩形(同性質(zhì)2)。

5.?????所有葉子結(jié)點(diǎn)都位于同一層,因此R樹為平衡樹。

葉子結(jié)點(diǎn)的結(jié)構(gòu)
先來探究一下葉子結(jié)點(diǎn)的結(jié)構(gòu)。葉子結(jié)點(diǎn)所保存的數(shù)據(jù)形式為:(I, tuple-identifier)。

??????其中,tuple-identifier表示的是一個(gè)存放于數(shù)據(jù)庫(kù)中的tuple,也就是一條記錄,它是n維的。I是一個(gè)n維空間的矩形,并可以恰好框住這個(gè)葉子結(jié)點(diǎn)中所有記錄代表的n維空間中的點(diǎn)。I=(I0,I1,…,In-1)。其結(jié)構(gòu)如下圖所示:

下圖描述的就是在二維空間中的葉子結(jié)點(diǎn)所要存儲(chǔ)的信息。

?

在這張圖中,I所代表的就是圖中的矩形,其范圍是a<=I0<=b,c<=I1<=d。有兩個(gè)tuple-identifier,在圖中即表示為那兩個(gè)點(diǎn)。這種形式完全可以推廣到高維空間。大家簡(jiǎn)單想想三維空間中的樣子就可以了。這樣,葉子結(jié)點(diǎn)的結(jié)構(gòu)就介紹完了。

?

非葉子結(jié)點(diǎn)
??????非葉子結(jié)點(diǎn)的結(jié)構(gòu)其實(shí)與葉子結(jié)點(diǎn)非常類似。想象一下B樹就知道了,B樹的葉子結(jié)點(diǎn)存放的是真實(shí)存在的數(shù)據(jù),而非葉子結(jié)點(diǎn)存放的是這些數(shù)據(jù)的“邊界”,或者說也算是一種索引(有疑問的讀者可以回顧一下上述第一節(jié)中講解B樹的部分)。

??????同樣道理,R樹的非葉子結(jié)點(diǎn)存放的數(shù)據(jù)結(jié)構(gòu)為:(I, child-pointer)。

??????其中,child-pointer是指向孩子結(jié)點(diǎn)的指針,I是覆蓋所有孩子結(jié)點(diǎn)對(duì)應(yīng)矩形的矩形。這邊有點(diǎn)拗口,但我想不是很難懂?給張圖:

?

D,E,F,G為孩子結(jié)點(diǎn)所對(duì)應(yīng)的矩形。A為能夠覆蓋這些矩形的更大的矩形。這個(gè)A就是這個(gè)非葉子結(jié)點(diǎn)所對(duì)應(yīng)的矩形。這時(shí)候你應(yīng)該悟到了吧?無論是葉子結(jié)點(diǎn)還是非葉子結(jié)點(diǎn),它們都對(duì)應(yīng)著一個(gè)矩形。樹形結(jié)構(gòu)上層的結(jié)點(diǎn)所對(duì)應(yīng)的矩形能夠完全覆蓋它的孩子結(jié)點(diǎn)所對(duì)應(yīng)的矩形。根結(jié)點(diǎn)也唯一對(duì)應(yīng)一個(gè)矩形,而這個(gè)矩形是可以覆蓋所有我們擁有的數(shù)據(jù)信息在空間中代表的點(diǎn)的。

我個(gè)人感覺這張圖畫的不那么精確,應(yīng)該是矩形A要恰好覆蓋D,E,F,G,而不應(yīng)該再留出這么多沒用的空間了。但為尊重原圖的繪制者,特不作修改。

?

R樹的操作
這一部分也許是編程者最關(guān)注的問題了。這么高效的數(shù)據(jù)結(jié)構(gòu)該如何去實(shí)現(xiàn)呢?這便是這一節(jié)需要闡述的問題。

?

搜索
R樹的搜索操作很簡(jiǎn)單,跟B樹上的搜索十分相似。它返回的結(jié)果是所有符合查找信息的記錄條目。而輸入是什么?就我個(gè)人的理解,輸入不僅僅是一個(gè)范圍了,它更可以看成是一個(gè)空間中的矩形。也就是說,我們輸入的是一個(gè)搜索矩形。

先給出偽代碼:

Function:Search

描述:假設(shè)T為一棵R樹的根結(jié)點(diǎn),查找所有搜索矩形S覆蓋的記錄條目。

S1:[查找子樹] 如果T是非葉子結(jié)點(diǎn),如果T所對(duì)應(yīng)的矩形與S有重合,那么檢查所有T中存儲(chǔ)的條目,對(duì)于所有這些條目,使用Search操作作用在每一個(gè)條目所指向的子樹的根結(jié)點(diǎn)上(即T結(jié)點(diǎn)的孩子結(jié)點(diǎn))。

S2:[查找葉子結(jié)點(diǎn)] 如果T是葉子結(jié)點(diǎn),如果T所對(duì)應(yīng)的矩形與S有重合,那么直接檢查S所指向的所有記錄條目。返回符合條件的記錄。

我們通過下圖來理解這個(gè)Search操作。

?

?

陰影部分所對(duì)應(yīng)的矩形為搜索矩形。它與根結(jié)點(diǎn)對(duì)應(yīng)的最大的矩形(未畫出)有重疊。這樣將Search操作作用在其兩個(gè)子樹上。兩個(gè)子樹對(duì)應(yīng)的矩形分別為R1與R2。搜索R1,發(fā)現(xiàn)與R1中的R4矩形有重疊,繼續(xù)搜索R4。最終在R4所包含的R11與R12兩個(gè)矩形中查找是否有符合條件的記錄。搜索R2的過程同樣如此。很顯然,該算法進(jìn)行的是一個(gè)迭代操作。

?

插入

??????R樹的插入操作也同B樹的插入操作類似。當(dāng)新的數(shù)據(jù)記錄需要被添加入葉子結(jié)點(diǎn)時(shí),若葉子結(jié)點(diǎn)溢出,那么我們需要對(duì)葉子結(jié)點(diǎn)進(jìn)行分裂操作。顯然,葉子結(jié)點(diǎn)的插入操作會(huì)比搜索操作要復(fù)雜。插入操作需要一些輔助方法才能夠完成。

來看一下偽代碼:

Function:Insert

描述:將新的記錄條目E插入給定的R樹中。

I1:[為新記錄找到合適插入的葉子結(jié)點(diǎn)] 開始ChooseLeaf方法選擇葉子結(jié)點(diǎn)L以放置記錄E。

I2:[添加新記錄至葉子結(jié)點(diǎn)] 如果L有足夠的空間來放置新的記錄條目,則向L中添加E。如果沒有足夠的空間,則進(jìn)行SplitNode方法以獲得兩個(gè)結(jié)點(diǎn)L與LL,這兩個(gè)結(jié)點(diǎn)包含了所有原來葉子結(jié)點(diǎn)L中的條目與新條目E。

I3:[將變換向上傳遞] 開始對(duì)結(jié)點(diǎn)L進(jìn)行AdjustTree操作,如果進(jìn)行了分裂操作,那么同時(shí)需要對(duì)LL進(jìn)行AdjustTree操作。

I4:[對(duì)樹進(jìn)行增高操作] 如果結(jié)點(diǎn)分裂,且該分裂向上傳播導(dǎo)致了根結(jié)點(diǎn)的分裂,那么需要?jiǎng)?chuàng)建一個(gè)新的根結(jié)點(diǎn),并且讓它的兩個(gè)孩子結(jié)點(diǎn)分別為原來那個(gè)根結(jié)點(diǎn)分裂后的兩個(gè)結(jié)點(diǎn)。

?

Function:ChooseLeaf

描述:選擇葉子結(jié)點(diǎn)以放置新條目E。

CL1:[Initialize] 設(shè)置N為根結(jié)點(diǎn)。

CL2:[葉子結(jié)點(diǎn)的檢查] 如果N為葉子結(jié)點(diǎn),則直接返回N。

CL3:[選擇子樹] 如果N不是葉子結(jié)點(diǎn),則遍歷N中的結(jié)點(diǎn),找出添加E.I時(shí)擴(kuò)張最小的結(jié)點(diǎn),并把該結(jié)點(diǎn)定義為F。如果有多個(gè)這樣的結(jié)點(diǎn),那么選擇面積最小的結(jié)點(diǎn)。

CL4:[下降至葉子結(jié)點(diǎn)] 將N設(shè)為F,從CL2開始重復(fù)操作。

?

Function:AdjustTree

描述:葉子結(jié)點(diǎn)的改變向上傳遞至根結(jié)點(diǎn)以改變各個(gè)矩陣。在傳遞變換的過程中可能會(huì)產(chǎn)生結(jié)點(diǎn)的分裂。

AT1:[初始化] 將N設(shè)為L(zhǎng)。

AT2:[檢驗(yàn)是否完成] 如果N為根結(jié)點(diǎn),則停止操作。

AT3:[調(diào)整父結(jié)點(diǎn)條目的最小邊界矩形] 設(shè)P為N的父節(jié)點(diǎn),EN為指向在父節(jié)點(diǎn)P中指向N的條目。調(diào)整EN.I以保證所有在N中的矩形都被恰好包圍。

AT4:[向上傳遞結(jié)點(diǎn)分裂] 如果N有一個(gè)剛剛被分裂產(chǎn)生的結(jié)點(diǎn)NN,則創(chuàng)建一個(gè)指向NN的條目ENN。如果P有空間來存放ENN,則將ENN添加到P中。如果沒有,則對(duì)P進(jìn)行SplitNode操作以得到P和PP。

AT5:[升高至下一級(jí)] 如果N等于L且發(fā)生了分裂,則把NN置為PP。從AT2開始重復(fù)操作。

?

同樣,我們用圖來更加直觀的理解這個(gè)插入操作。

?

?

????我們來通過圖分析一下插入操作。現(xiàn)在我們需要插入R21這個(gè)矩形。開始時(shí)我們進(jìn)行ChooseLeaf操作。在根結(jié)點(diǎn)中有兩個(gè)條目,分別為R1,R2。其實(shí)R1已經(jīng)完全覆蓋了R21,而若向R2中添加R21,則會(huì)使R2.I增大很多。顯然我們選擇R1插入。然后進(jìn)行下一級(jí)的操作。相比于R4,向R3中添加R21會(huì)更合適,因?yàn)镽3覆蓋R21所需增大的面積相對(duì)較小。這樣就在R8,R9,R10所在的葉子結(jié)點(diǎn)中插入R21。由于葉子結(jié)點(diǎn)沒有足夠空間,則要進(jìn)行分裂操作。

????插入操作如下圖所示:

?

這個(gè)插入操作其實(shí)類似于第一節(jié)中B樹的插入操作,這里不再具體介紹,不過想必看過上面的偽代碼大家應(yīng)該也清楚了。

?


刪除
R樹的刪除操作與B樹的刪除操作會(huì)有所不同,不過同B樹一樣,會(huì)涉及到壓縮等操作。相信讀者看完以下的偽代碼之后會(huì)有所體會(huì)。R樹的刪除同樣是比較復(fù)雜的,需要用到一些輔助函數(shù)來完成整個(gè)操作。

偽代碼如下:

Function:Delete

描述:將一條記錄E從指定的R樹中刪除。

D1:[找到含有記錄的葉子結(jié)點(diǎn)] 使用FindLeaf方法找到包含有記錄E的葉子結(jié)點(diǎn)L。如果搜索失敗,則直接終止。

D2:[刪除記錄] 將E從L中刪除。

D3:[傳遞記錄] 對(duì)L使用CondenseTree操作

D4:[縮減樹] 當(dāng)經(jīng)過以上調(diào)整后,如果根結(jié)點(diǎn)只包含有一個(gè)孩子結(jié)點(diǎn),則將這個(gè)唯一的孩子結(jié)點(diǎn)設(shè)為根結(jié)點(diǎn)。

?

Function:FindLeaf

描述:根結(jié)點(diǎn)為T,期望找到包含有記錄E的葉子結(jié)點(diǎn)。

FL1:[搜索子樹] 如果T不是葉子結(jié)點(diǎn),則檢查每一條T中的條目F,找出與E所對(duì)應(yīng)的矩形相重合的F(不必完全覆蓋)。對(duì)于所有滿足條件的F,對(duì)其指向的孩子結(jié)點(diǎn)進(jìn)行FindLeaf操作,直到尋找到E或者所有條目均以被檢查過。

FL2:[搜索葉子結(jié)點(diǎn)以找到記錄] 如果T是葉子結(jié)點(diǎn),那么檢查每一個(gè)條目是否有E存在,如果有則返回T。

?

Function:CondenseTree

描述:L為包含有被刪除條目的葉子結(jié)點(diǎn)。如果L的條目數(shù)過少(小于要求的最小值m),則必須將該葉子結(jié)點(diǎn)L從樹中刪除。經(jīng)過這一刪除操作,L中的剩余條目必須重新插入樹中。此操作將一直重復(fù)直至到達(dá)根結(jié)點(diǎn)。同樣,調(diào)整在此修改樹的過程所經(jīng)過的路徑上的所有結(jié)點(diǎn)對(duì)應(yīng)的矩形大小。

CT1:[初始化] 令N為L(zhǎng)。初始化一個(gè)用于存儲(chǔ)被刪除結(jié)點(diǎn)包含的條目的鏈表Q。

CT2:[找到父條目] 如果N為根結(jié)點(diǎn),那么直接跳轉(zhuǎn)至CT6。否則令P為N 的父結(jié)點(diǎn),令EN為P結(jié)點(diǎn)中存儲(chǔ)的指向N的條目。

CT3:[刪除下溢結(jié)點(diǎn)] 如果N含有條目數(shù)少于m,則從P中刪除EN,并把結(jié)點(diǎn)N中的條目添加入鏈表Q中。

CT4:[調(diào)整覆蓋矩形] 如果N沒有被刪除,則調(diào)整EN.I使得其對(duì)應(yīng)矩形能夠恰好覆蓋N中的所有條目所對(duì)應(yīng)的矩形。

CT5:[向上一層結(jié)點(diǎn)進(jìn)行操作] 令N等于P,從CT2開始重復(fù)操作。

CT6:[重新插入孤立的條目] 所有在Q中的結(jié)點(diǎn)中的條目需要被重新插入。原來屬于葉子結(jié)點(diǎn)的條目可以使用Insert操作進(jìn)行重新插入,而那些屬于非葉子結(jié)點(diǎn)的條目必須插入刪除之前所在層的結(jié)點(diǎn),以確保它們所指向的子樹還處于相同的層。

?

??????R樹刪除記錄過程中的CondenseTree操作是不同于B樹的。我們知道,B樹刪除過程中,如果出現(xiàn)結(jié)點(diǎn)的記錄數(shù)少于半滿(即下溢)的情況,則直接把這些記錄與其他葉子的記錄“融合”,也就是說兩個(gè)相鄰結(jié)點(diǎn)合并。然而R樹卻是直接重新插入。

?

同樣,我們用圖直觀的說明這個(gè)操作。

?

假設(shè)結(jié)點(diǎn)最大條目數(shù)為4,最小條目數(shù)為2。在這張圖中,我們的目標(biāo)是刪除記錄c。首先使用FindLeaf操作找到c所處在的葉子結(jié)點(diǎn)的位置——R11。當(dāng)c從R11刪除時(shí),R11就只有一條記錄了,少于最小條目數(shù)2,出現(xiàn)下溢,此時(shí)要調(diào)用CondenseTree操作。這樣,c被刪除,R11剩余的條目——指向記錄d的指針——被插入鏈表Q。然后向更高一層的結(jié)點(diǎn)進(jìn)行此操作。這樣R12會(huì)被插入鏈表中。原理是一樣的,在這里就不再贅述。

有一點(diǎn)需要解釋的是,我們發(fā)現(xiàn)這個(gè)刪除操作向上傳遞之后,根結(jié)點(diǎn)的條目R1也被插入了Q中,這樣根結(jié)點(diǎn)只剩下了R2。別著急,重新插入操作會(huì)有效的解決這個(gè)問題。我們插入R3,R12,d至它原來所處的層。這樣,我們發(fā)現(xiàn)根結(jié)點(diǎn)只有一個(gè)條目了,此時(shí)根據(jù)Inert中的操作,我們把這個(gè)根結(jié)點(diǎn)刪除,它的孩子結(jié)點(diǎn),即R5,R6,R7,R3所在的結(jié)點(diǎn)被置為根結(jié)點(diǎn)。至此,刪除操作結(jié)束。

?

結(jié)語
??????R樹是一種能夠有效進(jìn)行高維空間搜索的數(shù)據(jù)結(jié)構(gòu),它已經(jīng)被廣泛應(yīng)用在各種數(shù)據(jù)庫(kù)及其相關(guān)的應(yīng)用中。但R樹的處理也具有局限性,它的最佳應(yīng)用范圍是處理2至6維的數(shù)據(jù),更高維的存儲(chǔ)會(huì)變得非常復(fù)雜,這樣就不適用了。近年來,R樹也出現(xiàn)了很多變體,R*樹就是其中的一種。這些變體提升了R樹的性能,感興趣的讀者可以參考相關(guān)文獻(xiàn)。文章有任何錯(cuò)誤,還望各位讀者不吝賜教。本文完。

?

參考文獻(xiàn)以及推薦閱讀:

1.???Organization and Maintenance of Large Ordered Indices

2.???the ubiquitous B tree

3.???http://en.wikipedia.org/wiki/Btree (給出了國(guó)外一些開源地址)

4. ??http://en.wikipedia.org/wiki/Btree#Technical_description

5.???http://cis.stvincent.edu/html/tutorials/swd/btree/btree.html(include C++ source code)

6.???http://slady.net/java/bt/view.php(如果了解了B-tree結(jié)構(gòu),該地址可以在線對(duì)該結(jié)構(gòu)進(jìn)行查找(search),插入(insert),刪除(delete)操作。)
7. Guttman, A.; “R-trees: a dynamic index structure for spatial searching,” ACM, 1984, 14

8. http://www.cnblogs.com/CareySon/archive/2012/04/06/2435349.html;

9.?http://baike.baidu.com/view/298408.htm。

10.?http://www.cnblogs.com/leoo2sk/archive/2011/07/10/mysql-index.html?(介紹了mysql中myisam和innodb這兩種引擎的內(nèi)部索引機(jī)制,以及對(duì)不同字段的索引時(shí),檢索效率上的對(duì)比,主要也是基于其內(nèi)部機(jī)制的理解)

11.?http://www.oschina.net/news/31988/mysql-indexing-best-practices?(MySQL 索引最佳實(shí)踐);

12.?http://idlebox.net/2007/stx-btree/(此頁(yè)面包含B樹生成構(gòu)造的一些演示demo)。
?

?

總結(jié)

以上是生活随笔為你收集整理的B树、B+树、B*树谈到R 树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

欧美日韩久久久精品a片 | 丰满人妻翻云覆雨呻吟视频 | 少妇被黑人到高潮喷出白浆 | 性色欲情网站iwww九文堂 | 日本熟妇大屁股人妻 | 99久久婷婷国产综合精品青草免费 | 国产精品无码永久免费888 | 天下第一社区视频www日本 | 水蜜桃亚洲一二三四在线 | 欧洲极品少妇 | 国产成人精品三级麻豆 | 97se亚洲精品一区 | 久久久久久久女国产乱让韩 | 97精品国产97久久久久久免费 | 亚洲一区二区三区无码久久 | 久久99久久99精品中文字幕 | 亚洲日韩av片在线观看 | 一本无码人妻在中文字幕免费 | 领导边摸边吃奶边做爽在线观看 | 国内老熟妇对白xxxxhd | 国产乱子伦视频在线播放 | 国产午夜视频在线观看 | 国产偷抇久久精品a片69 | 国产成人午夜福利在线播放 | 日本xxxx色视频在线观看免费 | 在线亚洲高清揄拍自拍一品区 | 国产又粗又硬又大爽黄老大爷视 | 中文无码精品a∨在线观看不卡 | 婷婷六月久久综合丁香 | 亚洲日韩av片在线观看 | 欧美人与禽zoz0性伦交 | 欧美丰满熟妇xxxx性ppx人交 | 日本一本二本三区免费 | 欧美人与禽猛交狂配 | 5858s亚洲色大成网站www | 久久久精品国产sm最大网站 | 熟妇女人妻丰满少妇中文字幕 | 国产手机在线αⅴ片无码观看 | 性生交片免费无码看人 | 水蜜桃亚洲一二三四在线 | 欧美老熟妇乱xxxxx | 在线成人www免费观看视频 | 久久久久久久人妻无码中文字幕爆 | 国产精品99爱免费视频 | 最近的中文字幕在线看视频 | 国产香蕉尹人综合在线观看 | 无码中文字幕色专区 | 免费视频欧美无人区码 | 国产凸凹视频一区二区 | 噜噜噜亚洲色成人网站 | 疯狂三人交性欧美 | 精品人妻人人做人人爽 | 野外少妇愉情中文字幕 | 国产极品视觉盛宴 | 九九久久精品国产免费看小说 | 最新国产乱人伦偷精品免费网站 | 国产亚洲精品久久久久久国模美 | 在线播放免费人成毛片乱码 | 一本久道高清无码视频 | 色狠狠av一区二区三区 | 国内揄拍国内精品人妻 | 国产乱人无码伦av在线a | 国产精品久久国产精品99 | 国产热a欧美热a在线视频 | 熟女俱乐部五十路六十路av | 成人三级无码视频在线观看 | 偷窥日本少妇撒尿chinese | 久久久中文字幕日本无吗 | 色婷婷av一区二区三区之红樱桃 | 久久综合九色综合97网 | 色爱情人网站 | 一本久道高清无码视频 | www国产亚洲精品久久久日本 | 欧美性猛交xxxx富婆 | 女人高潮内射99精品 | 东京热无码av男人的天堂 | 日产国产精品亚洲系列 | 日韩少妇内射免费播放 | 久久综合给久久狠狠97色 | 久久婷婷五月综合色国产香蕉 | 老太婆性杂交欧美肥老太 | 国产精品无码一区二区桃花视频 | 99久久精品无码一区二区毛片 | 亚洲热妇无码av在线播放 | 国产深夜福利视频在线 | 国产绳艺sm调教室论坛 | 国产精品第一区揄拍无码 | 婷婷丁香六月激情综合啪 | 97资源共享在线视频 | 人妻少妇精品无码专区动漫 | 久久久久免费看成人影片 | 欧美丰满老熟妇xxxxx性 | 国产又爽又猛又粗的视频a片 | 一本精品99久久精品77 | 无码国产色欲xxxxx视频 | 东京热男人av天堂 | 中文字幕+乱码+中文字幕一区 | 无码人妻出轨黑人中文字幕 | 网友自拍区视频精品 | 在线亚洲高清揄拍自拍一品区 | 久久久精品人妻久久影视 | 一区二区传媒有限公司 | 国产亚洲视频中文字幕97精品 | 男女作爱免费网站 | 熟女少妇在线视频播放 | 日本精品人妻无码免费大全 | 99久久99久久免费精品蜜桃 | 欧美日本免费一区二区三区 | 亚洲精品成人av在线 | 88国产精品欧美一区二区三区 | 97无码免费人妻超级碰碰夜夜 | 国产女主播喷水视频在线观看 | 日韩精品无码一本二本三本色 | 色五月丁香五月综合五月 | www国产亚洲精品久久网站 | 红桃av一区二区三区在线无码av | aⅴ亚洲 日韩 色 图网站 播放 | 天天综合网天天综合色 | 对白脏话肉麻粗话av | 国产激情综合五月久久 | 日韩精品无码免费一区二区三区 | 99精品国产综合久久久久五月天 | 国产一区二区三区四区五区加勒比 | 又大又硬又爽免费视频 | 久久久久久国产精品无码下载 | 男女下面进入的视频免费午夜 | 精品午夜福利在线观看 | 青青青手机频在线观看 | 国产精品鲁鲁鲁 | 亚洲成a人片在线观看无码 | 无码播放一区二区三区 | 精品久久8x国产免费观看 | 日本精品人妻无码77777 天堂一区人妻无码 | 澳门永久av免费网站 | 无遮挡国产高潮视频免费观看 | 国产成人精品必看 | 国产精华av午夜在线观看 | 国产综合久久久久鬼色 | 内射老妇bbwx0c0ck | 国产精品久久久久无码av色戒 | 综合激情五月综合激情五月激情1 | 色综合久久久无码中文字幕 | 欧洲美熟女乱又伦 | 精品无码一区二区三区的天堂 | 亚洲乱码国产乱码精品精 | 亚洲精品久久久久久久久久久 | 曰本女人与公拘交酡免费视频 | 国内精品九九久久久精品 | 久久综合香蕉国产蜜臀av | 一个人看的视频www在线 | 亚洲一区二区三区 | 成人无码精品一区二区三区 | 国产精品高潮呻吟av久久4虎 | aa片在线观看视频在线播放 | 男女性色大片免费网站 | 亚洲春色在线视频 | 精品国产乱码久久久久乱码 | 国产一区二区不卡老阿姨 | 男人和女人高潮免费网站 | 国产av一区二区三区最新精品 | 精品熟女少妇av免费观看 | 性色欲情网站iwww九文堂 | 国产免费无码一区二区视频 | 欧美日韩在线亚洲综合国产人 | 一本久道久久综合狠狠爱 | 7777奇米四色成人眼影 | 日韩人妻少妇一区二区三区 | 亚无码乱人伦一区二区 | 夜夜高潮次次欢爽av女 | 色狠狠av一区二区三区 | 欧美 日韩 人妻 高清 中文 | 呦交小u女精品视频 | 久久久久成人精品免费播放动漫 | 亚洲人成网站在线播放942 | 国产精品无码mv在线观看 | 日日摸天天摸爽爽狠狠97 | 日本精品人妻无码77777 天堂一区人妻无码 | а√资源新版在线天堂 | www一区二区www免费 | 天堂а√在线地址中文在线 | 精品aⅴ一区二区三区 | 毛片内射-百度 | 精品久久久久久人妻无码中文字幕 | 欧美三级不卡在线观看 | 精品无码国产自产拍在线观看蜜 | 精品国产青草久久久久福利 | av香港经典三级级 在线 | 国产在线精品一区二区三区直播 | 国产亚洲精品久久久久久久 | 精品成人av一区二区三区 | 真人与拘做受免费视频一 | 亚洲乱码国产乱码精品精 | 自拍偷自拍亚洲精品被多人伦好爽 | 久久99热只有频精品8 | 亚洲精品国偷拍自产在线麻豆 | 亚洲日本va午夜在线电影 | 内射后入在线观看一区 | 亚洲の无码国产の无码影院 | 久久99国产综合精品 | 国产三级精品三级男人的天堂 | 久久精品99久久香蕉国产色戒 | 久久久精品人妻久久影视 | 99国产精品白浆在线观看免费 | 曰本女人与公拘交酡免费视频 | 亚洲aⅴ无码成人网站国产app | 伊人色综合久久天天小片 | 国产午夜手机精彩视频 | 国产午夜亚洲精品不卡下载 | 小泽玛莉亚一区二区视频在线 | 夜夜躁日日躁狠狠久久av | 欧美色就是色 | 亚洲国产精品成人久久蜜臀 | 亚洲一区二区三区无码久久 | 天天做天天爱天天爽综合网 | 亚洲精品久久久久久久久久久 | 精品国产乱码久久久久乱码 | 国产亚洲日韩欧美另类第八页 | 麻豆精品国产精华精华液好用吗 | 亚洲国产精品一区二区美利坚 | 亚洲熟悉妇女xxx妇女av | 国产麻豆精品一区二区三区v视界 | 色狠狠av一区二区三区 | 久久精品99久久香蕉国产色戒 | 国产乱人伦av在线无码 | 女人被男人躁得好爽免费视频 | 一本久久a久久精品亚洲 | 300部国产真实乱 | 中文字幕无线码免费人妻 | 无遮挡国产高潮视频免费观看 | 野外少妇愉情中文字幕 | 色五月丁香五月综合五月 | 又粗又大又硬又长又爽 | 色综合视频一区二区三区 | 亚洲成a人片在线观看无码3d | 娇妻被黑人粗大高潮白浆 | 日日噜噜噜噜夜夜爽亚洲精品 | 久久精品成人欧美大片 | 东京热男人av天堂 | 中国大陆精品视频xxxx | 国产亚洲日韩欧美另类第八页 | 久久久av男人的天堂 | 亚洲精品综合五月久久小说 | av人摸人人人澡人人超碰下载 | 国产精品怡红院永久免费 | 无码国产乱人伦偷精品视频 | 亚洲色偷偷偷综合网 | 欧美人与牲动交xxxx | 亚洲色欲久久久综合网东京热 | 未满成年国产在线观看 | 日韩少妇白浆无码系列 | 麻豆国产人妻欲求不满谁演的 | 国产精品久久久久久亚洲影视内衣 | 亚洲精品综合五月久久小说 | 亚洲精品国产精品乱码不卡 | 久久久久国色av免费观看性色 | 无码福利日韩神码福利片 | 国产免费无码一区二区视频 | 国产福利视频一区二区 | 中文字幕av伊人av无码av | 久久久国产精品无码免费专区 | 久久午夜无码鲁丝片午夜精品 | 在线精品国产一区二区三区 | 男人和女人高潮免费网站 | 激情内射日本一区二区三区 | 日本免费一区二区三区最新 | 国产在线精品一区二区三区直播 | 日日摸夜夜摸狠狠摸婷婷 | 77777熟女视频在线观看 а天堂中文在线官网 | 99视频精品全部免费免费观看 | 熟女体下毛毛黑森林 | 亚洲精品久久久久久久久久久 | 精品人妻人人做人人爽 | 亚洲成a人片在线观看无码3d | 国产精品久久久久7777 | 激情综合激情五月俺也去 | 蜜桃视频插满18在线观看 | 亚洲日韩av一区二区三区中文 | 亚洲日韩一区二区三区 | 中文精品无码中文字幕无码专区 | 亚洲精品国产第一综合99久久 | 欧美乱妇无乱码大黄a片 | 国产精品亚洲综合色区韩国 | 亚洲中文字幕成人无码 | 在线观看免费人成视频 | 国产精品无码一区二区三区不卡 | 无码免费一区二区三区 | 欧美日韩综合一区二区三区 | 亚洲自偷自偷在线制服 | 奇米影视7777久久精品 | 131美女爱做视频 | 欧美精品免费观看二区 | 中文字幕无码热在线视频 | 中文无码成人免费视频在线观看 | 色情久久久av熟女人妻网站 | 国产suv精品一区二区五 | 成人无码影片精品久久久 | 又粗又大又硬毛片免费看 | 无码人妻精品一区二区三区下载 | 国产亚洲精品久久久久久久久动漫 | 丰满人妻精品国产99aⅴ | 国产精品香蕉在线观看 | 久久综合香蕉国产蜜臀av | 亚洲 a v无 码免 费 成 人 a v | 亚洲区欧美区综合区自拍区 | 成熟女人特级毛片www免费 | 成在人线av无码免观看麻豆 | 综合人妻久久一区二区精品 | 婷婷丁香五月天综合东京热 | 亚洲综合无码久久精品综合 | 青青青手机频在线观看 | 亚洲综合在线一区二区三区 | 亚洲 另类 在线 欧美 制服 | 久久久久久久人妻无码中文字幕爆 | 蜜桃av抽搐高潮一区二区 | v一区无码内射国产 | 日韩亚洲欧美精品综合 | www国产亚洲精品久久久日本 | а√资源新版在线天堂 | 午夜熟女插插xx免费视频 | 国产无遮挡吃胸膜奶免费看 | 国产精品久免费的黄网站 | 国产精品久久久午夜夜伦鲁鲁 | 成年美女黄网站色大免费全看 | 成人无码视频在线观看网站 | 人人澡人人透人人爽 | 真人与拘做受免费视频 | 少妇性l交大片欧洲热妇乱xxx | 国产精品无码一区二区三区不卡 | 午夜精品一区二区三区的区别 | 中文精品无码中文字幕无码专区 | 丰满少妇人妻久久久久久 | 久久综合给久久狠狠97色 | 国产精品香蕉在线观看 | 性欧美牲交xxxxx视频 | 任你躁国产自任一区二区三区 | 动漫av网站免费观看 | 无码精品国产va在线观看dvd | 中国大陆精品视频xxxx | 性生交片免费无码看人 | 亚洲国产精品无码久久久久高潮 | 日日天干夜夜狠狠爱 | 久久久久亚洲精品男人的天堂 | 狠狠综合久久久久综合网 | 国产人妻久久精品二区三区老狼 | 无码精品人妻一区二区三区av | 激情内射亚州一区二区三区爱妻 | 色爱情人网站 | 久久亚洲a片com人成 | 午夜熟女插插xx免费视频 | 欧美黑人性暴力猛交喷水 | 国产人妻精品一区二区三区 | 色综合久久网 | 亚洲人成网站在线播放942 | 伦伦影院午夜理论片 | 国产精华av午夜在线观看 | 中文无码成人免费视频在线观看 | 又湿又紧又大又爽a视频国产 | 国产小呦泬泬99精品 | 国产在线精品一区二区三区直播 | 久久精品国产一区二区三区 | 色婷婷久久一区二区三区麻豆 | 精品国产乱码久久久久乱码 | 国产亚洲人成在线播放 | a片免费视频在线观看 | 久久亚洲中文字幕精品一区 | 日日干夜夜干 | 又大又黄又粗又爽的免费视频 | 国产精品美女久久久久av爽李琼 | 男女作爱免费网站 | 亚洲阿v天堂在线 | 西西人体www44rt大胆高清 | 国产亚av手机在线观看 | 亚洲男人av天堂午夜在 | 国产高清av在线播放 | 麻豆蜜桃av蜜臀av色欲av | 国产高清不卡无码视频 | 亚洲精品中文字幕久久久久 | 小sao货水好多真紧h无码视频 | 久久99国产综合精品 | 婷婷丁香五月天综合东京热 | 2020最新国产自产精品 | 图片区 小说区 区 亚洲五月 | 久久人人97超碰a片精品 | 无码一区二区三区在线 | 亚洲色欲色欲天天天www | 日本www一道久久久免费榴莲 | 久久熟妇人妻午夜寂寞影院 | 熟妇人妻激情偷爽文 | 久久精品国产日本波多野结衣 | 亚洲熟熟妇xxxx | 熟女少妇人妻中文字幕 | 中文字幕乱码人妻二区三区 | 久久精品国产大片免费观看 | 人妻夜夜爽天天爽三区 | 国产在热线精品视频 | 亚洲精品久久久久avwww潮水 | 四虎永久在线精品免费网址 | 亚洲中文字幕无码一久久区 | 一本无码人妻在中文字幕免费 | 水蜜桃色314在线观看 | 久久精品99久久香蕉国产色戒 | 18禁黄网站男男禁片免费观看 | 老子影院午夜精品无码 | 99久久精品日本一区二区免费 | 欧美成人午夜精品久久久 | 成人片黄网站色大片免费观看 | 97精品人妻一区二区三区香蕉 | 少妇一晚三次一区二区三区 | 免费国产黄网站在线观看 | 欧美激情内射喷水高潮 | 色一情一乱一伦一区二区三欧美 | 女人被男人躁得好爽免费视频 | 久久久久成人精品免费播放动漫 | 国产精品久久久久久无码 | 色欲人妻aaaaaaa无码 | 日韩成人一区二区三区在线观看 | 亚洲中文字幕无码中字 | 国产 精品 自在自线 | 熟妇人妻中文av无码 | 色婷婷欧美在线播放内射 | 99精品久久毛片a片 | 免费国产黄网站在线观看 | 久久熟妇人妻午夜寂寞影院 | 日韩无码专区 | 东京热无码av男人的天堂 | 国产精品内射视频免费 | 无码播放一区二区三区 | 久久综合狠狠综合久久综合88 | 久久 国产 尿 小便 嘘嘘 | 丝袜人妻一区二区三区 | 少妇被粗大的猛进出69影院 | 国产亚洲欧美日韩亚洲中文色 | 亚洲日韩一区二区 | 在线精品国产一区二区三区 | 国产特级毛片aaaaaa高潮流水 | 精品偷拍一区二区三区在线看 | 无码任你躁久久久久久久 | 亚洲一区二区三区在线观看网站 | 国产情侣作爱视频免费观看 | 荫蒂被男人添的好舒服爽免费视频 | 久久综合网欧美色妞网 | 国产欧美精品一区二区三区 | 久久精品成人欧美大片 | 无码纯肉视频在线观看 | 精品国偷自产在线 | 一本加勒比波多野结衣 | 亚洲熟熟妇xxxx | 色欲综合久久中文字幕网 | 亚洲无人区午夜福利码高清完整版 | 18精品久久久无码午夜福利 | 国产欧美熟妇另类久久久 | 久久综合久久自在自线精品自 | 无码吃奶揉捏奶头高潮视频 | 亚洲精品一区二区三区大桥未久 | 人人妻人人澡人人爽欧美一区 | 高清无码午夜福利视频 | 国产在线一区二区三区四区五区 | 亚洲一区二区三区偷拍女厕 | 中文字幕精品av一区二区五区 | 亚洲色偷偷男人的天堂 | 欧美日本精品一区二区三区 | 久久综合色之久久综合 | 国产真人无遮挡作爱免费视频 | 欧美老人巨大xxxx做受 | 国产精品高潮呻吟av久久 | 欧美兽交xxxx×视频 | 一区二区三区高清视频一 | 日日麻批免费40分钟无码 | 人人妻人人藻人人爽欧美一区 | 久久99精品国产麻豆 | 亚洲 日韩 欧美 成人 在线观看 | 51国偷自产一区二区三区 | 日本又色又爽又黄的a片18禁 | 乱中年女人伦av三区 | 无码福利日韩神码福利片 | 最近中文2019字幕第二页 | 久久成人a毛片免费观看网站 | 国产无遮挡又黄又爽又色 | 久久久av男人的天堂 | 欧美熟妇另类久久久久久多毛 | 一本大道伊人av久久综合 | www成人国产高清内射 | 99riav国产精品视频 | 欧美丰满熟妇xxxx性ppx人交 | 熟妇人妻激情偷爽文 | 亚洲熟女一区二区三区 | 欧美人与禽zoz0性伦交 | 97久久超碰中文字幕 | 全黄性性激高免费视频 | 青草青草久热国产精品 | 久久久久人妻一区精品色欧美 | 狠狠色欧美亚洲狠狠色www | 色偷偷人人澡人人爽人人模 | 亚洲日韩一区二区三区 | 东京热男人av天堂 | 双乳奶水饱满少妇呻吟 | 67194成是人免费无码 | 精品国产麻豆免费人成网站 | 荫蒂添的好舒服视频囗交 | 99久久亚洲精品无码毛片 | 久久精品中文字幕一区 | 纯爱无遮挡h肉动漫在线播放 | 国产亚洲人成在线播放 | 色综合久久久无码网中文 | 日韩精品乱码av一区二区 | 荡女精品导航 | 久久精品视频在线看15 | 亚洲精品成人av在线 | 台湾无码一区二区 | 两性色午夜免费视频 | 伊在人天堂亚洲香蕉精品区 | 欧美成人高清在线播放 | 波多野结衣 黑人 | 日日橹狠狠爱欧美视频 | 亚洲精品无码人妻无码 | а√天堂www在线天堂小说 | 亚洲熟妇自偷自拍另类 | 国产一区二区不卡老阿姨 | 中文无码精品a∨在线观看不卡 | 无码帝国www无码专区色综合 | 国产国语老龄妇女a片 | 天天躁夜夜躁狠狠是什么心态 | 一本无码人妻在中文字幕免费 | 免费人成网站视频在线观看 | 日本xxxx色视频在线观看免费 | 久久精品国产99精品亚洲 | 国产亚洲精品精品国产亚洲综合 | 六十路熟妇乱子伦 | 亚洲一区二区三区 | 成人亚洲精品久久久久 | 波多野结衣一区二区三区av免费 | 亚洲熟悉妇女xxx妇女av | 色窝窝无码一区二区三区色欲 | 国产莉萝无码av在线播放 | 六月丁香婷婷色狠狠久久 | 国产特级毛片aaaaaaa高清 | 中文字幕人妻丝袜二区 | 久久综合网欧美色妞网 | 丰满少妇弄高潮了www | 久久久国产一区二区三区 | 熟女少妇人妻中文字幕 | 麻豆国产人妻欲求不满谁演的 | 精品一二三区久久aaa片 | 国内丰满熟女出轨videos | 色综合天天综合狠狠爱 | 麻豆国产人妻欲求不满 | 精品国产一区av天美传媒 | 亚洲一区二区三区在线观看网站 | 在线精品亚洲一区二区 | 综合人妻久久一区二区精品 | 国精产品一品二品国精品69xx | 特级做a爰片毛片免费69 | 久久综合狠狠综合久久综合88 | 免费无码一区二区三区蜜桃大 | 国产又粗又硬又大爽黄老大爷视 | 日韩视频 中文字幕 视频一区 | 日本精品人妻无码免费大全 | 偷窥日本少妇撒尿chinese | 亚洲人亚洲人成电影网站色 | 欧美性生交活xxxxxdddd | 少妇愉情理伦片bd | 中文精品久久久久人妻不卡 | 国产熟妇另类久久久久 | 亚洲色大成网站www国产 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产日产欧产精品精品app | 欧洲欧美人成视频在线 | a片免费视频在线观看 | 天天摸天天碰天天添 | 亚洲国产精品毛片av不卡在线 | 中文精品无码中文字幕无码专区 | 亚洲s码欧洲m码国产av | 欧美黑人性暴力猛交喷水 | 无码人妻黑人中文字幕 | 性色欲情网站iwww九文堂 | 亚洲七七久久桃花影院 | 亚洲中文字幕无码一久久区 | 国产午夜亚洲精品不卡下载 | 熟女俱乐部五十路六十路av | 成人无码视频在线观看网站 | 国产成人无码a区在线观看视频app | 国内精品久久久久久中文字幕 | 久久久久久久人妻无码中文字幕爆 | 国产精品久久久午夜夜伦鲁鲁 | 精品欧洲av无码一区二区三区 | 大地资源网第二页免费观看 | 好屌草这里只有精品 | 亚洲中文字幕无码中文字在线 | 久久综合九色综合欧美狠狠 | 天下第一社区视频www日本 | 狠狠噜狠狠狠狠丁香五月 | 国产精品无码成人午夜电影 | 4hu四虎永久在线观看 | 久久这里只有精品视频9 | 动漫av一区二区在线观看 | 色综合天天综合狠狠爱 | 亚洲一区二区三区香蕉 | 人妻少妇精品无码专区二区 | 熟妇人妻激情偷爽文 | 国产av一区二区三区最新精品 | 国产人妻人伦精品 | 天堂在线观看www | 国产小呦泬泬99精品 | 中文字幕无码av激情不卡 | 国产凸凹视频一区二区 | 欧美日韩亚洲国产精品 | 国产又粗又硬又大爽黄老大爷视 | 国产乱人无码伦av在线a | 久久婷婷五月综合色国产香蕉 | 熟妇人妻无码xxx视频 | 久久国产劲爆∧v内射 | 国产精品二区一区二区aⅴ污介绍 | 乱码午夜-极国产极内射 | 中文字幕无码免费久久9一区9 | 日本丰满熟妇videos | 精品国产成人一区二区三区 | 午夜福利不卡在线视频 | 国产午夜福利100集发布 | 乌克兰少妇xxxx做受 | 最新国产乱人伦偷精品免费网站 | 国产免费久久精品国产传媒 | 国产在线无码精品电影网 | 中文字幕乱码中文乱码51精品 | 日韩av激情在线观看 | 国产熟妇另类久久久久 | 日本熟妇人妻xxxxx人hd | 一本久久a久久精品亚洲 | а√资源新版在线天堂 | 日韩欧美中文字幕在线三区 | 久久99热只有频精品8 | 欧美亚洲国产一区二区三区 | 人人澡人人妻人人爽人人蜜桃 | 日日碰狠狠躁久久躁蜜桃 | 色综合久久久无码中文字幕 | 大地资源网第二页免费观看 | 国产农村乱对白刺激视频 | 精品午夜福利在线观看 | 久久视频在线观看精品 | 麻豆人妻少妇精品无码专区 | 国产精品福利视频导航 | 欧美野外疯狂做受xxxx高潮 | 国产av人人夜夜澡人人爽麻豆 | 欧美xxxx黑人又粗又长 | 国产精品久久久久久久影院 | 久久无码专区国产精品s | 国内精品人妻无码久久久影院蜜桃 | 婷婷五月综合激情中文字幕 | 一本加勒比波多野结衣 | 亚洲精品国产第一综合99久久 | 97精品国产97久久久久久免费 | 99视频精品全部免费免费观看 | 无码人妻丰满熟妇区五十路百度 | 国产真人无遮挡作爱免费视频 | 亚洲精品综合五月久久小说 | 亚洲中文字幕无码中字 | 妺妺窝人体色www婷婷 | 色欲久久久天天天综合网精品 | 亚洲理论电影在线观看 | 东京热一精品无码av | 久久精品中文闷骚内射 | 全球成人中文在线 | 内射爽无广熟女亚洲 | 大胆欧美熟妇xx | 色综合久久久无码网中文 | 日本一卡二卡不卡视频查询 | 国产av剧情md精品麻豆 | 少妇性荡欲午夜性开放视频剧场 | 大乳丰满人妻中文字幕日本 | 婷婷丁香六月激情综合啪 | av无码久久久久不卡免费网站 | 免费人成网站视频在线观看 | 丰满少妇高潮惨叫视频 | 欧美 日韩 人妻 高清 中文 | 久久综合给合久久狠狠狠97色 | 麻豆国产人妻欲求不满谁演的 | 成人无码视频在线观看网站 | 日本欧美一区二区三区乱码 | 国产乱人伦偷精品视频 | 两性色午夜免费视频 | 少女韩国电视剧在线观看完整 | 成人亚洲精品久久久久软件 | 动漫av一区二区在线观看 | 成人aaa片一区国产精品 | 波多野结衣高清一区二区三区 | 丰满妇女强制高潮18xxxx | 精品夜夜澡人妻无码av蜜桃 | 国产亚洲精品久久久久久国模美 | 久久精品无码一区二区三区 | 无码午夜成人1000部免费视频 | 国产精品美女久久久久av爽李琼 | 又紧又大又爽精品一区二区 | 欧美丰满熟妇xxxx性ppx人交 | 999久久久国产精品消防器材 | 人妻aⅴ无码一区二区三区 | 精品国产一区二区三区av 性色 | 亚洲中文字幕av在天堂 | 纯爱无遮挡h肉动漫在线播放 | 成人欧美一区二区三区黑人免费 | 亚洲一区二区三区 | 无码人妻少妇伦在线电影 | 日日噜噜噜噜夜夜爽亚洲精品 | 人妻少妇精品无码专区动漫 | 狂野欧美性猛交免费视频 | 国产手机在线αⅴ片无码观看 | 亚洲成av人片天堂网无码】 | 欧美熟妇另类久久久久久多毛 | 国产麻豆精品一区二区三区v视界 | 日韩无码专区 | 国产成人无码午夜视频在线观看 | 又色又爽又黄的美女裸体网站 | 国产亚洲精品精品国产亚洲综合 | 日韩欧美中文字幕公布 | 久久久久久九九精品久 | 一个人看的视频www在线 | 亚洲国精产品一二二线 | 在线观看欧美一区二区三区 | 精品人妻av区 | 久久久国产精品无码免费专区 | 欧美第一黄网免费网站 | 国内精品人妻无码久久久影院 | 成年美女黄网站色大免费全看 | 白嫩日本少妇做爰 | 无码人妻少妇伦在线电影 | 未满小14洗澡无码视频网站 | a片免费视频在线观看 | 高清不卡一区二区三区 | 精品少妇爆乳无码av无码专区 | 图片区 小说区 区 亚洲五月 | 午夜精品一区二区三区在线观看 | 国产午夜精品一区二区三区嫩草 | 精品水蜜桃久久久久久久 | 99久久精品午夜一区二区 | 荫蒂被男人添的好舒服爽免费视频 | 国产精品人妻一区二区三区四 | 久久国产精品_国产精品 | 奇米影视7777久久精品 | 日本成熟视频免费视频 | 精品少妇爆乳无码av无码专区 | 成在人线av无码免观看麻豆 | 亚洲熟悉妇女xxx妇女av | 性欧美牲交xxxxx视频 | 日产精品99久久久久久 | 国产乡下妇女做爰 | 狠狠色噜噜狠狠狠7777奇米 | 熟女少妇人妻中文字幕 | 青草青草久热国产精品 | 强伦人妻一区二区三区视频18 | 无遮挡国产高潮视频免费观看 | 妺妺窝人体色www在线小说 | 欧美黑人巨大xxxxx | 久9re热视频这里只有精品 | 欧美国产亚洲日韩在线二区 | 亚洲热妇无码av在线播放 | 撕开奶罩揉吮奶头视频 | 98国产精品综合一区二区三区 | 久久精品人人做人人综合试看 | 婷婷丁香五月天综合东京热 | 国产人妻久久精品二区三区老狼 | 国产9 9在线 | 中文 | 无码精品人妻一区二区三区av | 天堂无码人妻精品一区二区三区 | 日韩 欧美 动漫 国产 制服 | 午夜免费福利小电影 | 亚洲成av人片在线观看无码不卡 | 99精品久久毛片a片 | 国产真人无遮挡作爱免费视频 | 午夜丰满少妇性开放视频 | 美女黄网站人色视频免费国产 | 麻豆果冻传媒2021精品传媒一区下载 | 久久久久久亚洲精品a片成人 | 久久亚洲a片com人成 | 狠狠色噜噜狠狠狠狠7777米奇 | 日日摸日日碰夜夜爽av | 日本精品高清一区二区 | 亚洲人成网站色7799 | 国产精品va在线播放 | 毛片内射-百度 | 3d动漫精品啪啪一区二区中 | 内射后入在线观看一区 | 国产欧美精品一区二区三区 | 日本在线高清不卡免费播放 | 无遮无挡爽爽免费视频 | 国产精品国产三级国产专播 | 成人精品视频一区二区三区尤物 | 亚洲精品一区国产 | 国产极品美女高潮无套在线观看 | 欧美老人巨大xxxx做受 | 国产精品美女久久久 | 国产福利视频一区二区 | 成人免费视频视频在线观看 免费 | 67194成是人免费无码 | 天海翼激烈高潮到腰振不止 | 国产激情精品一区二区三区 | 久久久精品欧美一区二区免费 | 亚洲日本va午夜在线电影 | 西西人体www44rt大胆高清 | 人妻熟女一区 | 国产精品人人爽人人做我的可爱 | 亚洲无人区午夜福利码高清完整版 | 国产热a欧美热a在线视频 | www国产精品内射老师 | 99久久人妻精品免费二区 | 久久久久99精品成人片 | 亚洲精品一区二区三区在线观看 | 欧美变态另类xxxx | 亚洲国产精品久久人人爱 | 国产suv精品一区二区五 | 中文字幕av无码一区二区三区电影 | 人妻有码中文字幕在线 | 亚洲国产成人av在线观看 | 99麻豆久久久国产精品免费 | 国产成人一区二区三区在线观看 | 国内精品久久久久久中文字幕 | 熟女少妇人妻中文字幕 | 在线观看欧美一区二区三区 | 中文精品久久久久人妻不卡 | 亚洲人亚洲人成电影网站色 | 久久久久av无码免费网 | 少妇性俱乐部纵欲狂欢电影 | 色综合久久久无码中文字幕 | 久久精品国产99久久6动漫 | 欧美成人午夜精品久久久 | 免费人成网站视频在线观看 | 天天av天天av天天透 | 国产绳艺sm调教室论坛 | 97夜夜澡人人双人人人喊 | 欧美精品无码一区二区三区 | 亚洲中文字幕无码一久久区 | 成人无码视频在线观看网站 | 狠狠综合久久久久综合网 | 在线播放亚洲第一字幕 | 樱花草在线播放免费中文 | 日本在线高清不卡免费播放 | 2020最新国产自产精品 | 理论片87福利理论电影 | 亚洲乱亚洲乱妇50p | 精品国偷自产在线视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 偷窥日本少妇撒尿chinese | 国产精品久免费的黄网站 | 欧美丰满熟妇xxxx | 精品国产乱码久久久久乱码 | 色综合久久久无码中文字幕 | 国产成人av免费观看 | 国产成人综合美国十次 | 97久久超碰中文字幕 | 黑人大群体交免费视频 | 激情五月综合色婷婷一区二区 | 三上悠亚人妻中文字幕在线 | 秋霞特色aa大片 | 俄罗斯老熟妇色xxxx | 亚洲一区二区三区在线观看网站 | 成人欧美一区二区三区黑人 | aa片在线观看视频在线播放 | 久久综合香蕉国产蜜臀av | 天堂久久天堂av色综合 | 久久伊人色av天堂九九小黄鸭 | 中文字幕无码日韩专区 | 国产在线一区二区三区四区五区 | 自拍偷自拍亚洲精品被多人伦好爽 | 午夜无码区在线观看 | 两性色午夜视频免费播放 | 国产精品国产三级国产专播 | 欧美一区二区三区视频在线观看 | 国产精品第一国产精品 | 日本熟妇人妻xxxxx人hd | 男人扒开女人内裤强吻桶进去 | 日韩av无码一区二区三区 | 国内精品一区二区三区不卡 | 国内精品人妻无码久久久影院蜜桃 | 亚洲国产一区二区三区在线观看 | 性色av无码免费一区二区三区 | 夜夜躁日日躁狠狠久久av | 久激情内射婷内射蜜桃人妖 | 一本久道久久综合婷婷五月 | 欧美日韩视频无码一区二区三 | 无码播放一区二区三区 | 亚洲综合久久一区二区 | 国产人妻人伦精品1国产丝袜 | 成人影院yy111111在线观看 | 麻豆精产国品 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲色www成人永久网址 | 少妇性荡欲午夜性开放视频剧场 | 中文字幕av伊人av无码av | 国产亚洲精品久久久ai换 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲精品中文字幕 | 999久久久国产精品消防器材 | 国产真实伦对白全集 | 又紧又大又爽精品一区二区 | 亚洲gv猛男gv无码男同 | 欧美喷潮久久久xxxxx | 扒开双腿疯狂进出爽爽爽视频 | 欧洲极品少妇 | 我要看www免费看插插视频 | 日韩亚洲欧美中文高清在线 | 欧美日韩一区二区免费视频 | 成人av无码一区二区三区 | aⅴ亚洲 日韩 色 图网站 播放 | 99久久婷婷国产综合精品青草免费 | 老头边吃奶边弄进去呻吟 | 欧美兽交xxxx×视频 | 大乳丰满人妻中文字幕日本 | 亚洲精品一区二区三区四区五区 | 人妻无码αv中文字幕久久琪琪布 | 色老头在线一区二区三区 | 性欧美熟妇videofreesex | 精品厕所偷拍各类美女tp嘘嘘 | 亚洲精品成人av在线 | 日韩成人一区二区三区在线观看 | 亚洲日本va中文字幕 | 精品无码国产自产拍在线观看蜜 | 日本精品少妇一区二区三区 | 少妇久久久久久人妻无码 | 少妇无套内谢久久久久 | 国产成人无码av片在线观看不卡 | 成熟人妻av无码专区 | 中国女人内谢69xxxxxa片 | 亚洲中文字幕无码中文字在线 | 亚洲欧美日韩成人高清在线一区 | 牲交欧美兽交欧美 | 国产av一区二区精品久久凹凸 | 国产午夜视频在线观看 | 一个人免费观看的www视频 | 色五月五月丁香亚洲综合网 | 无码人妻精品一区二区三区下载 | 少妇太爽了在线观看 | 精品国产成人一区二区三区 | 国产三级精品三级男人的天堂 | 爆乳一区二区三区无码 | 国产无遮挡又黄又爽又色 | 亚洲成av人影院在线观看 | 无套内射视频囯产 | 午夜福利一区二区三区在线观看 | 久久精品中文闷骚内射 | 国产精品人妻一区二区三区四 | 任你躁国产自任一区二区三区 | 中文字幕无码热在线视频 | 国产精品久免费的黄网站 | 在线欧美精品一区二区三区 | 日韩在线不卡免费视频一区 | 国产无套粉嫩白浆在线 | 日韩人妻无码中文字幕视频 | 国产精品视频免费播放 | 乱人伦中文视频在线观看 | 六月丁香婷婷色狠狠久久 | 呦交小u女精品视频 | 国产 精品 自在自线 | 国产一区二区三区四区五区加勒比 | 荫蒂被男人添的好舒服爽免费视频 | 丁香啪啪综合成人亚洲 | 风流少妇按摩来高潮 | 欧美国产日产一区二区 | 国产九九九九九九九a片 | 人人妻人人澡人人爽人人精品浪潮 | 红桃av一区二区三区在线无码av | 国产办公室秘书无码精品99 | 国内综合精品午夜久久资源 | 国产精品视频免费播放 | 国产精品久久久久7777 | 国精产品一区二区三区 | 亚洲综合无码一区二区三区 | 少妇人妻av毛片在线看 | 99国产精品白浆在线观看免费 | 高潮毛片无遮挡高清免费视频 | 亚洲精品国产精品乱码不卡 | 久久久久人妻一区精品色欧美 | 大乳丰满人妻中文字幕日本 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 亚洲日韩精品欧美一区二区 | 日韩欧美中文字幕在线三区 | 男女爱爱好爽视频免费看 | 中文字幕人成乱码熟女app | 乌克兰少妇xxxx做受 | 欧美 亚洲 国产 另类 | 精品亚洲韩国一区二区三区 | 午夜理论片yy44880影院 | 呦交小u女精品视频 | 乱码av麻豆丝袜熟女系列 | 黑人玩弄人妻中文在线 | 国产精品第一区揄拍无码 | 又大又硬又爽免费视频 | 色一情一乱一伦一区二区三欧美 | 性史性农村dvd毛片 | 黑人玩弄人妻中文在线 | 蜜臀aⅴ国产精品久久久国产老师 | 黄网在线观看免费网站 | 999久久久国产精品消防器材 | 中文字幕 人妻熟女 | 日本xxxx色视频在线观看免费 | 一本一道久久综合久久 | 久久人人爽人人爽人人片av高清 | 97精品人妻一区二区三区香蕉 | 99久久精品无码一区二区毛片 | 婷婷五月综合缴情在线视频 | 成人欧美一区二区三区 | 欧美精品无码一区二区三区 | 亚洲s码欧洲m码国产av | 曰本女人与公拘交酡免费视频 | 蜜桃视频韩日免费播放 | 国产免费久久精品国产传媒 | 高潮喷水的毛片 | 中文字幕人妻无码一区二区三区 | 精品国产麻豆免费人成网站 | 免费无码的av片在线观看 | 国产另类ts人妖一区二区 | 国产精品a成v人在线播放 | 天天拍夜夜添久久精品 | 中文字幕无码av波多野吉衣 | 日本肉体xxxx裸交 | 国产精品99爱免费视频 | 久久精品中文字幕大胸 | 久久亚洲中文字幕无码 | 亚洲人成网站免费播放 | 国产精品久久国产三级国 | 精品aⅴ一区二区三区 | 国产两女互慰高潮视频在线观看 | 久久精品一区二区三区四区 | 国产麻豆精品精东影业av网站 | 国产特级毛片aaaaaa高潮流水 | 久久久久免费看成人影片 | 波多野结衣乳巨码无在线观看 | 国产精品久久久久久久影院 | 人妻互换免费中文字幕 | 午夜免费福利小电影 | 理论片87福利理论电影 | 内射欧美老妇wbb | 性欧美牲交xxxxx视频 | 国产特级毛片aaaaaaa高清 | 亚洲娇小与黑人巨大交 | 亚洲国产欧美日韩精品一区二区三区 | 超碰97人人射妻 | 国产福利视频一区二区 | 免费观看又污又黄的网站 | 曰韩少妇内射免费播放 | 无码人妻久久一区二区三区不卡 | 国产亚洲视频中文字幕97精品 | 中文亚洲成a人片在线观看 | 久精品国产欧美亚洲色aⅴ大片 | 99久久久国产精品无码免费 | 国产亚洲美女精品久久久2020 | 亚洲国产av美女网站 | av小次郎收藏 | 日韩在线不卡免费视频一区 | 人人超人人超碰超国产 | 精品国产乱码久久久久乱码 | 丝袜 中出 制服 人妻 美腿 | 少妇无码一区二区二三区 | 久久久av男人的天堂 | 无码av中文字幕免费放 | 亚洲日韩乱码中文无码蜜桃臀网站 | 中文无码精品a∨在线观看不卡 | 中文字幕人妻无码一夲道 | 99久久久无码国产精品免费 | 欧美激情一区二区三区成人 | 成年美女黄网站色大免费视频 | 亚洲中文无码av永久不收费 | 嫩b人妻精品一区二区三区 | aa片在线观看视频在线播放 | 亚洲国产精品一区二区美利坚 | 精品国产青草久久久久福利 | 亚洲の无码国产の无码影院 | 久久综合久久自在自线精品自 | 动漫av网站免费观看 | 色噜噜亚洲男人的天堂 | 免费国产成人高清在线观看网站 | 亚洲人亚洲人成电影网站色 | 国产欧美精品一区二区三区 | 日韩无码专区 | 色综合久久88色综合天天 | 丰满少妇人妻久久久久久 | 国产精品鲁鲁鲁 | 啦啦啦www在线观看免费视频 | 青青久在线视频免费观看 | 伊人久久大香线蕉午夜 | 精品一区二区三区无码免费视频 | 国产熟妇另类久久久久 | 国产激情艳情在线看视频 | 色一情一乱一伦一视频免费看 | 欧美国产日韩亚洲中文 | 久久国产精品_国产精品 | 国产精品毛片一区二区 | 亚洲大尺度无码无码专区 | 国产午夜手机精彩视频 | 欧美阿v高清资源不卡在线播放 | 麻豆果冻传媒2021精品传媒一区下载 | 一本大道伊人av久久综合 | 特级做a爰片毛片免费69 | 成年女人永久免费看片 | 无码国产乱人伦偷精品视频 | 久久无码中文字幕免费影院蜜桃 | 麻豆精品国产精华精华液好用吗 | 中国女人内谢69xxxx | 天天av天天av天天透 | 无码人妻精品一区二区三区不卡 | 成在人线av无码免费 | 亚洲日本一区二区三区在线 | 无码人中文字幕 | 窝窝午夜理论片影院 | 中文精品久久久久人妻不卡 | 国产人妻精品一区二区三区不卡 | 欧美变态另类xxxx | 亚洲区欧美区综合区自拍区 | 国产亚洲精品久久久闺蜜 | 亚洲色欲色欲天天天www | 丰满岳乱妇在线观看中字无码 | 日韩精品a片一区二区三区妖精 | 国产真实伦对白全集 | 国产亚洲精品久久久久久国模美 | 全黄性性激高免费视频 | 国产亚洲精品久久久久久大师 | 日韩精品一区二区av在线 | 久久人人97超碰a片精品 | 性啪啪chinese东北女人 | 亚洲国产av美女网站 | 人妻体内射精一区二区三四 | 国内精品人妻无码久久久影院蜜桃 | 强伦人妻一区二区三区视频18 | 2020久久超碰国产精品最新 | 国内精品久久久久久中文字幕 | 好爽又高潮了毛片免费下载 | 高潮喷水的毛片 | 任你躁国产自任一区二区三区 | 特级做a爰片毛片免费69 | 内射巨臀欧美在线视频 | 性色av无码免费一区二区三区 | 亚洲国产精品一区二区美利坚 | 亚洲一区二区三区偷拍女厕 | 日韩精品一区二区av在线 | 在线 国产 欧美 亚洲 天堂 | 99久久婷婷国产综合精品青草免费 | 动漫av网站免费观看 | 九九久久精品国产免费看小说 | 无码帝国www无码专区色综合 | 夜夜影院未满十八勿进 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲成色在线综合网站 | aⅴ在线视频男人的天堂 | 国产精品亚洲а∨无码播放麻豆 | 成人aaa片一区国产精品 | 国产肉丝袜在线观看 | 免费人成在线观看网站 | 午夜精品久久久久久久久 | 99久久人妻精品免费一区 | 亚洲成av人在线观看网址 | 日本va欧美va欧美va精品 | 日韩欧美中文字幕在线三区 | 精品人妻中文字幕有码在线 | 伊人色综合久久天天小片 | 97久久国产亚洲精品超碰热 | 色综合久久网 | 亚洲春色在线视频 | 激情国产av做激情国产爱 | 日本爽爽爽爽爽爽在线观看免 | 欧美zoozzooz性欧美 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲s色大片在线观看 | √8天堂资源地址中文在线 | 国产特级毛片aaaaaaa高清 | 亚洲精品无码国产 | 国产精品无码久久av | 午夜丰满少妇性开放视频 | 亚洲爆乳大丰满无码专区 | 色婷婷欧美在线播放内射 | 夜先锋av资源网站 | 国产精品亚洲五月天高清 | 九九热爱视频精品 | 人人澡人人透人人爽 | 色欲人妻aaaaaaa无码 | 久久人人97超碰a片精品 | 丰满妇女强制高潮18xxxx | 麻豆成人精品国产免费 | 久久久久国色av免费观看性色 | 国产精品久久久久久亚洲影视内衣 | 女人被男人爽到呻吟的视频 | 沈阳熟女露脸对白视频 | 人妻人人添人妻人人爱 | 无码国产色欲xxxxx视频 | 午夜精品久久久内射近拍高清 | 中文字幕无码日韩欧毛 | 国产精品99久久精品爆乳 | 久久国产精品_国产精品 | 国产亚洲精品久久久闺蜜 | 国产一区二区三区精品视频 | 奇米影视7777久久精品人人爽 | 免费观看又污又黄的网站 | 日日摸天天摸爽爽狠狠97 | 伊在人天堂亚洲香蕉精品区 | 自拍偷自拍亚洲精品被多人伦好爽 | av无码电影一区二区三区 | 强开小婷嫩苞又嫩又紧视频 | 无码精品人妻一区二区三区av | 中文字幕无码免费久久9一区9 | 久久99精品国产麻豆蜜芽 | 色狠狠av一区二区三区 | 亚洲色大成网站www | 国产精品手机免费 | 国产av久久久久精东av | 亚洲s码欧洲m码国产av | 天天拍夜夜添久久精品 | 亚洲成av人片在线观看无码不卡 | 国产精品福利视频导航 | 国产黄在线观看免费观看不卡 | 无码国产乱人伦偷精品视频 | 亚洲 另类 在线 欧美 制服 | 亚洲人成影院在线观看 | 午夜精品一区二区三区的区别 | 国产精品人妻一区二区三区四 | 蜜桃臀无码内射一区二区三区 | 毛片内射-百度 | 亚洲精品一区二区三区在线观看 | 亚洲色www成人永久网址 | 在教室伦流澡到高潮hnp视频 | 中文字幕av无码一区二区三区电影 | 久久99精品久久久久久动态图 | 精品久久久无码人妻字幂 | 亚洲欧美中文字幕5发布 | 无遮挡国产高潮视频免费观看 | 亚洲精品国产a久久久久久 | 无码人妻久久一区二区三区不卡 | 亚洲精品无码国产 | 中文字幕无码热在线视频 | 亚洲无人区午夜福利码高清完整版 | 天天摸天天碰天天添 | 亚洲综合无码一区二区三区 | 激情人妻另类人妻伦 | 99久久婷婷国产综合精品青草免费 | 亚洲国产一区二区三区在线观看 | 丰满妇女强制高潮18xxxx | 亚洲第一无码av无码专区 | 国产精品久久福利网站 | 野外少妇愉情中文字幕 | 国产精品久久久久久亚洲毛片 | 狠狠噜狠狠狠狠丁香五月 | 日日干夜夜干 | 曰本女人与公拘交酡免费视频 | 精品熟女少妇av免费观看 | 国产情侣作爱视频免费观看 | 久久午夜夜伦鲁鲁片无码免费 | 国产精品爱久久久久久久 | 日本乱人伦片中文三区 | aa片在线观看视频在线播放 | 日韩人妻系列无码专区 | 真人与拘做受免费视频 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 欧美35页视频在线观看 | 色一情一乱一伦一区二区三欧美 | 好男人社区资源 | 国产精品视频免费播放 | 久久午夜夜伦鲁鲁片无码免费 | 综合人妻久久一区二区精品 | 免费网站看v片在线18禁无码 | 亚洲成av人在线观看网址 | 日本丰满熟妇videos | 国产在线无码精品电影网 | 熟妇女人妻丰满少妇中文字幕 | 福利一区二区三区视频在线观看 | 中文字幕av无码一区二区三区电影 | 成人毛片一区二区 | 婷婷丁香五月天综合东京热 | 双乳奶水饱满少妇呻吟 | 国产一区二区三区日韩精品 | 99久久精品国产一区二区蜜芽 | 免费无码午夜福利片69 | 欧美性猛交xxxx富婆 | 亚洲精品一区三区三区在线观看 | www一区二区www免费 | 成人无码影片精品久久久 | 亚洲中文字幕久久无码 | 亚洲国产午夜精品理论片 | av无码久久久久不卡免费网站 | 天堂在线观看www | 又大又硬又黄的免费视频 | 久久国产精品精品国产色婷婷 | 中文字幕人妻无码一夲道 | 久久久久亚洲精品中文字幕 | 国产精品无套呻吟在线 | 十八禁视频网站在线观看 | 人人妻人人澡人人爽人人精品浪潮 | 国内揄拍国内精品少妇国语 | 色偷偷人人澡人人爽人人模 | 久9re热视频这里只有精品 | 无码福利日韩神码福利片 | 亚洲精品午夜国产va久久成人 | 国产97在线 | 亚洲 | 亚洲乱亚洲乱妇50p | 亚洲一区二区三区偷拍女厕 | 成人精品天堂一区二区三区 | 中文字幕无码日韩专区 | 欧美成人午夜精品久久久 | 无码午夜成人1000部免费视频 | 中文无码伦av中文字幕 | 99久久99久久免费精品蜜桃 | 欧美 日韩 亚洲 在线 | 国产精品久久久久久久9999 | 久久精品人人做人人综合 | 免费看男女做好爽好硬视频 | 中文字幕无码免费久久99 | 亚洲日韩av一区二区三区中文 | 国产色在线 | 国产 | 国产精品多人p群无码 | 亚洲 另类 在线 欧美 制服 | 国产成人无码专区 | 欧美成人家庭影院 | 啦啦啦www在线观看免费视频 | 亚洲 日韩 欧美 成人 在线观看 | 国产绳艺sm调教室论坛 | 国产成人综合色在线观看网站 | 一本大道伊人av久久综合 | 在线精品国产一区二区三区 | 欧美人与物videos另类 | 色综合久久久无码中文字幕 | 国产精品人妻一区二区三区四 | 激情综合激情五月俺也去 | 色偷偷人人澡人人爽人人模 | 蜜桃视频韩日免费播放 | 亚洲精品国偷拍自产在线观看蜜桃 | 欧美35页视频在线观看 | 99精品无人区乱码1区2区3区 | 内射后入在线观看一区 | 久久久精品国产sm最大网站 | 日本精品久久久久中文字幕 | 老子影院午夜伦不卡 | 国产成人精品久久亚洲高清不卡 | 欧美怡红院免费全部视频 | 日本精品高清一区二区 | 欧美熟妇另类久久久久久多毛 | 波多野结衣高清一区二区三区 | 呦交小u女精品视频 | 欧美成人家庭影院 | 日本熟妇人妻xxxxx人hd | 国产猛烈高潮尖叫视频免费 | 国産精品久久久久久久 | 亚洲色无码一区二区三区 | 午夜熟女插插xx免费视频 | 国产亚洲精品精品国产亚洲综合 | 亚洲欧美日韩国产精品一区二区 | 无码国产乱人伦偷精品视频 | 日韩少妇内射免费播放 | 在线 国产 欧美 亚洲 天堂 | 中文字幕乱码亚洲无线三区 | 亚洲国产一区二区三区在线观看 | 国产成人无码午夜视频在线观看 | 国产麻豆精品精东影业av网站 | 亚洲日韩中文字幕在线播放 | 亚洲精品一区二区三区四区五区 | 毛片内射-百度 | a在线观看免费网站大全 | 亚洲人成人无码网www国产 | 欧美人与牲动交xxxx | 精品乱码久久久久久久 | 四虎永久在线精品免费网址 | 国产精品无码mv在线观看 | 精品偷拍一区二区三区在线看 | 亚洲综合伊人久久大杳蕉 | 欧美人与善在线com | 国产偷国产偷精品高清尤物 | 在线观看欧美一区二区三区 | 夜夜夜高潮夜夜爽夜夜爰爰 | 午夜免费福利小电影 | 欧美 日韩 人妻 高清 中文 | 久久精品国产大片免费观看 | 成熟女人特级毛片www免费 | 亚洲综合另类小说色区 | 国产精品无码永久免费888 | 国产三级精品三级男人的天堂 | 亚洲精品成a人在线观看 | 成人av无码一区二区三区 | 亚洲一区二区三区含羞草 | 国产精品va在线播放 | 久久无码专区国产精品s | 亚洲一区二区三区国产精华液 | 国产成人无码av片在线观看不卡 | 日日碰狠狠躁久久躁蜜桃 | 亚洲精品成人福利网站 | 色综合久久久无码中文字幕 | 又色又爽又黄的美女裸体网站 | 国产精品手机免费 | 国产日产欧产精品精品app | 熟女俱乐部五十路六十路av | 日韩人妻无码中文字幕视频 | 精品久久久久久亚洲精品 | 99久久久国产精品无码免费 | 精品国产麻豆免费人成网站 | 国产高清不卡无码视频 | 无码av最新清无码专区吞精 | 国产精品嫩草久久久久 | 国产9 9在线 | 中文 | a片免费视频在线观看 | 欧美一区二区三区 | 国产一区二区三区日韩精品 | 亚洲熟妇色xxxxx欧美老妇 | 成人av无码一区二区三区 | 又大又硬又黄的免费视频 | 日韩无套无码精品 | 午夜免费福利小电影 | 国产激情无码一区二区app | 国产美女精品一区二区三区 | 无码福利日韩神码福利片 | 亚拍精品一区二区三区探花 | 又色又爽又黄的美女裸体网站 | 97夜夜澡人人双人人人喊 | 在线亚洲高清揄拍自拍一品区 | 美女黄网站人色视频免费国产 | 亚洲一区av无码专区在线观看 | 中文字幕av无码一区二区三区电影 | 国产色视频一区二区三区 | 亚洲男人av天堂午夜在 | 亚洲第一无码av无码专区 | 久久99国产综合精品 | 伊在人天堂亚洲香蕉精品区 | 日日碰狠狠丁香久燥 | 中文毛片无遮挡高清免费 | 天天综合网天天综合色 | 99国产欧美久久久精品 | 人人妻人人澡人人爽精品欧美 | 国产色xx群视频射精 | 澳门永久av免费网站 | 精品久久久久久人妻无码中文字幕 | 婷婷色婷婷开心五月四房播播 | 国产香蕉97碰碰久久人人 | 狠狠色欧美亚洲狠狠色www | 久久久婷婷五月亚洲97号色 | 一本无码人妻在中文字幕免费 | 成人片黄网站色大片免费观看 | 久久综合给合久久狠狠狠97色 | 精品一二三区久久aaa片 | 一二三四在线观看免费视频 | 日日麻批免费40分钟无码 | 亚洲va中文字幕无码久久不卡 | 色婷婷av一区二区三区之红樱桃 | 午夜免费福利小电影 | 国产精品99久久精品爆乳 | 在线 国产 欧美 亚洲 天堂 | 国产后入清纯学生妹 | 日韩少妇白浆无码系列 | 伊人久久婷婷五月综合97色 | 婷婷色婷婷开心五月四房播播 | 色妞www精品免费视频 | 国产精品久久国产三级国 | 高清国产亚洲精品自在久久 | 一本无码人妻在中文字幕免费 | 国产成人无码av在线影院 | 国产绳艺sm调教室论坛 | 亚洲精品一区二区三区在线 | 国产精品手机免费 | 夜精品a片一区二区三区无码白浆 | 亚洲一区二区三区 | 国产精品免费大片 | 高潮毛片无遮挡高清免费视频 | 又粗又大又硬毛片免费看 | 国产亚洲tv在线观看 | 又大又硬又黄的免费视频 | 亚洲人成人无码网www国产 | 51国偷自产一区二区三区 | aⅴ在线视频男人的天堂 | 性啪啪chinese东北女人 | 亚洲熟妇色xxxxx欧美老妇y | 狠狠色丁香久久婷婷综合五月 | 在线亚洲高清揄拍自拍一品区 | 欧美刺激性大交 | 成人免费视频一区二区 | 国产特级毛片aaaaaa高潮流水 | 国产精品爱久久久久久久 | 国产超级va在线观看视频 | 亚洲国产一区二区三区在线观看 | 丁香花在线影院观看在线播放 | 欧美老妇与禽交 | 丁香花在线影院观看在线播放 | 红桃av一区二区三区在线无码av | 欧美性猛交xxxx富婆 | 国产午夜精品一区二区三区嫩草 | 国产三级精品三级男人的天堂 | 亚洲国产午夜精品理论片 | 国产一区二区不卡老阿姨 | 精品人人妻人人澡人人爽人人 | 乱码午夜-极国产极内射 | 对白脏话肉麻粗话av | 久久久婷婷五月亚洲97号色 | 青春草在线视频免费观看 | 东京无码熟妇人妻av在线网址 | 兔费看少妇性l交大片免费 | 蜜桃av抽搐高潮一区二区 | 成人aaa片一区国产精品 | 色综合视频一区二区三区 | 精品人人妻人人澡人人爽人人 | 国产精品二区一区二区aⅴ污介绍 | 成熟女人特级毛片www免费 | 欧美xxxx黑人又粗又长 | 日韩少妇内射免费播放 | 欧美丰满少妇xxxx性 | 亚洲中文字幕乱码av波多ji | 窝窝午夜理论片影院 | 久久无码专区国产精品s | 欧美高清在线精品一区 | 欧美丰满少妇xxxx性 | 亚洲国产成人av在线观看 | 午夜肉伦伦影院 | 欧美乱妇无乱码大黄a片 | 国产激情精品一区二区三区 | 麻豆国产丝袜白领秘书在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 成人免费视频一区二区 | 999久久久国产精品消防器材 | 装睡被陌生人摸出水好爽 | 久久久久久九九精品久 | 欧美xxxx黑人又粗又长 | 18禁止看的免费污网站 | 亚洲人成人无码网www国产 | 国产高清av在线播放 | 日韩精品a片一区二区三区妖精 | 久久综合九色综合97网 | 久久亚洲中文字幕精品一区 | 一本久久a久久精品vr综合 | 亚洲精品美女久久久久久久 | 色窝窝无码一区二区三区色欲 | 亚洲 欧美 激情 小说 另类 | 人妻尝试又大又粗久久 | 撕开奶罩揉吮奶头视频 | 亚洲国产精品无码久久久久高潮 | 美女黄网站人色视频免费国产 | 久久国产自偷自偷免费一区调 | 人人妻在人人 | 波多野结衣一区二区三区av免费 | 成年女人永久免费看片 | 亚洲午夜福利在线观看 | 色综合久久88色综合天天 | 中文无码成人免费视频在线观看 | 一本色道婷婷久久欧美 | 国产免费观看黄av片 | 中文字幕人妻丝袜二区 | 久久成人a毛片免费观看网站 | 4hu四虎永久在线观看 | 亚洲综合精品香蕉久久网 | 成熟人妻av无码专区 | 日韩少妇白浆无码系列 | 少妇高潮一区二区三区99 | 国产精品无码久久av | 人妻插b视频一区二区三区 | 午夜免费福利小电影 | 婷婷五月综合缴情在线视频 | 欧美人与物videos另类 | 国产内射老熟女aaaa | 18禁黄网站男男禁片免费观看 | 久久精品国产一区二区三区 | 免费网站看v片在线18禁无码 | 未满小14洗澡无码视频网站 | 久久久av男人的天堂 | 国产手机在线αⅴ片无码观看 | 欧美人与牲动交xxxx | 欧美日韩综合一区二区三区 | 亚洲国产综合无码一区 | 免费无码午夜福利片69 | 伊人色综合久久天天小片 | 亚洲自偷自偷在线制服 | 午夜免费福利小电影 | 亚洲国产综合无码一区 | 亚洲s色大片在线观看 | 亚洲精品久久久久avwww潮水 | 强奷人妻日本中文字幕 | 亚洲阿v天堂在线 | 好男人www社区 | 成人av无码一区二区三区 | 樱花草在线播放免费中文 | 久久人人爽人人人人片 | 精品乱子伦一区二区三区 | 亚洲精品美女久久久久久久 | 精品一区二区不卡无码av | 国产亚洲人成在线播放 | 欧美激情内射喷水高潮 | 狠狠综合久久久久综合网 | 男女下面进入的视频免费午夜 | 一个人看的视频www在线 | 99久久久无码国产aaa精品 | 免费中文字幕日韩欧美 | 7777奇米四色成人眼影 | 中文字幕无码免费久久99 | 久久精品国产日本波多野结衣 | 亚洲最大成人网站 | 国产人妻精品一区二区三区不卡 | 四虎国产精品一区二区 | 日本乱人伦片中文三区 | 国产精品理论片在线观看 | 久久久久成人片免费观看蜜芽 | 婷婷五月综合激情中文字幕 | 强开小婷嫩苞又嫩又紧视频 | 亚洲国产日韩a在线播放 | 亚洲精品久久久久久一区二区 | 疯狂三人交性欧美 | 久久99久久99精品中文字幕 | 亚洲国产精品一区二区美利坚 | 欧美 丝袜 自拍 制服 另类 | 亚洲精品一区三区三区在线观看 | 国产精品99爱免费视频 | av人摸人人人澡人人超碰下载 | 免费乱码人妻系列无码专区 | 亚洲国产精品无码一区二区三区 | 欧美人与牲动交xxxx | 国产做国产爱免费视频 | 国产精品久久久 | www国产精品内射老师 | 麻豆精产国品 | 久久综合九色综合欧美狠狠 | 一本一道久久综合久久 | 狠狠cao日日穞夜夜穞av | 国产精品va在线播放 | 秋霞成人午夜鲁丝一区二区三区 | 久久精品国产日本波多野结衣 | 久久久久久a亚洲欧洲av冫 | 天堂亚洲免费视频 | 成熟妇人a片免费看网站 | 综合网日日天干夜夜久久 | 国产一区二区不卡老阿姨 | 兔费看少妇性l交大片免费 | 又粗又大又硬毛片免费看 | 无码一区二区三区在线观看 | 性生交大片免费看l | 中文字幕日产无线码一区 | 在线观看国产一区二区三区 | 六月丁香婷婷色狠狠久久 | 日本丰满熟妇videos | 久久久成人毛片无码 | 亚洲色偷偷男人的天堂 | 水蜜桃亚洲一二三四在线 | 牲欲强的熟妇农村老妇女视频 | 国产特级毛片aaaaaaa高清 | 中文字幕亚洲情99在线 | 黑人粗大猛烈进出高潮视频 | 麻豆国产人妻欲求不满 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚拍精品一区二区三区探花 | 久久伊人色av天堂九九小黄鸭 | 国产色精品久久人妻 | 国产激情精品一区二区三区 | 精品国产av色一区二区深夜久久 | 色综合久久久无码中文字幕 | 乱人伦人妻中文字幕无码 | 国产精品亚洲а∨无码播放麻豆 | 97精品国产97久久久久久免费 | 国产97人人超碰caoprom | 精品少妇爆乳无码av无码专区 | 日韩成人一区二区三区在线观看 | 亚洲精品久久久久久久久久久 | 双乳奶水饱满少妇呻吟 | 国产人妖乱国产精品人妖 | 国产激情无码一区二区app | 免费人成网站视频在线观看 | 最新版天堂资源中文官网 | 日日天日日夜日日摸 | 思思久久99热只有频精品66 | 成人亚洲精品久久久久软件 | 中文字幕av无码一区二区三区电影 | 色一情一乱一伦 | 成人免费视频视频在线观看 免费 | 国内少妇偷人精品视频 | 亚洲综合色区中文字幕 | 国产偷抇久久精品a片69 | 巨爆乳无码视频在线观看 | 亚洲小说春色综合另类 | 久久午夜无码鲁丝片午夜精品 | 无码吃奶揉捏奶头高潮视频 | 大肉大捧一进一出好爽视频 | 中文字幕乱码中文乱码51精品 | 人人妻人人澡人人爽人人精品 | 无码人妻av免费一区二区三区 | 鲁鲁鲁爽爽爽在线视频观看 | 国产在线精品一区二区高清不卡 | 欧美阿v高清资源不卡在线播放 | 亚洲另类伦春色综合小说 | 国产精品99久久精品爆乳 | 青青青爽视频在线观看 | 美女黄网站人色视频免费国产 | 日日天干夜夜狠狠爱 | 大肉大捧一进一出好爽视频 | 久久久精品456亚洲影院 |