B-tree中,每個(gè)結(jié)點(diǎn)包含:

1、本結(jié)點(diǎn)所含關(guān)鍵字的個(gè)數(shù);

2、指向父結(jié)點(diǎn)的指針;

3、關(guān)鍵字;

4、指向子結(jié)點(diǎn)的指針;

對(duì)于一棵m階B-tree,每個(gè)結(jié)點(diǎn)至多可以擁有m個(gè)子結(jié)點(diǎn)。各結(jié)點(diǎn)的關(guān)鍵字和可以擁有的子結(jié)點(diǎn)數(shù)都有限制,規(guī)定m階B-tree中,根結(jié)點(diǎn)至少有2個(gè)子結(jié)點(diǎn),除非根結(jié)點(diǎn)為葉子節(jié)點(diǎn),相應(yīng)的,根結(jié)點(diǎn)中關(guān)鍵字的個(gè)數(shù)為1~m-1;非根結(jié)點(diǎn)至少有[m/2]([],向上取整)個(gè)子結(jié)點(diǎn),相應(yīng)的,關(guān)鍵字個(gè)數(shù)為[m/2]-1~m-1。

B-tree造價(jià)信息

市場(chǎng)價(jià) 信息價(jià) 詢(xún)價(jià)
材料名稱(chēng) 規(guī)格/型號(hào) 市場(chǎng)價(jià)
(除稅)
工程建議價(jià)
(除稅)
行情 品牌 單位 稅率 供應(yīng)商 報(bào)價(jià)日期
結(jié)點(diǎn)壓力表 恒壓值1.08MPa 查看價(jià)格 查看價(jià)格

朱閥

個(gè) 13% 廣州市榕業(yè)閥門(mén)有限公司
結(jié)點(diǎn)壓力表 恒壓值0.77MPa 查看價(jià)格 查看價(jià)格

朱閥

個(gè) 13% 廣州市榕業(yè)閥門(mén)有限公司
結(jié)點(diǎn)壓力表 恒壓值0.92MPa 查看價(jià)格 查看價(jià)格

朱閥

個(gè) 13% 廣州市榕業(yè)閥門(mén)有限公司
結(jié)點(diǎn)壓力表 恒壓值0.46MPa 查看價(jià)格 查看價(jià)格

朱閥

個(gè) 13% 廣州市榕業(yè)閥門(mén)有限公司
結(jié)點(diǎn)壓力表 恒壓值0.40MPa 查看價(jià)格 查看價(jià)格

朱閥

個(gè) 13% 廣州市榕業(yè)閥門(mén)有限公司
結(jié)點(diǎn)壓力表 恒壓值1.39MPa 查看價(jià)格 查看價(jià)格

朱閥

個(gè) 13% 廣州市榕業(yè)閥門(mén)有限公司
結(jié)點(diǎn)壓力表 恒壓值1.00MPa 查看價(jià)格 查看價(jià)格

朱閥

個(gè) 13% 廣州市榕業(yè)閥門(mén)有限公司
鋼塑凸結(jié)點(diǎn)土工格柵 品種:鋼塑土工格柵;材質(zhì):鋼塑;格柵規(guī)格:6×50;網(wǎng)孔規(guī)格(mm):100×100; 查看價(jià)格 查看價(jià)格

華隆

m2 13% 肥東縣華隆篩網(wǎng)公司
材料名稱(chēng) 規(guī)格/型號(hào) 除稅
信息價(jià)
含稅
信息價(jià)
行情 品牌 單位 稅率 地區(qū)/時(shí)間
鋼塑土工格柵 1、規(guī)格:GSZ80-80 2、縱/橫向極限抗拉力:≥80kN/m 3、結(jié)點(diǎn)極限剝離力:≥800N 查看價(jià)格 查看價(jià)格

m2 珠海市2022年10月信息價(jià)
鋼塑土工格柵 1、規(guī)格:GSZ80-80 2、縱/橫向極限抗拉力:≥80kN/m 3、結(jié)點(diǎn)極限剝離力:≥800N 查看價(jià)格 查看價(jià)格

m2 珠海市2022年9月信息價(jià)
鋼塑土工格柵 1、規(guī)格:GSZ50-50 2、縱/橫向極限抗拉力:≥50kN/m 3、結(jié)點(diǎn)極限剝離力:≥800N 查看價(jià)格 查看價(jià)格

m2 珠海市2022年7月信息價(jià)
鋼塑土工格柵 1、規(guī)格:GSZ50-50 2、縱/橫向極限抗拉力:≥50kN/m 3、結(jié)點(diǎn)極限剝離力:≥800N 查看價(jià)格 查看價(jià)格

m2 珠海市2022年6月信息價(jià)
鋼塑土工格柵 1、規(guī)格:GSZ80-80 2、縱/橫向極限抗拉力:≥80kN/m 3、結(jié)點(diǎn)極限剝離力:≥800N 查看價(jià)格 查看價(jià)格

m2 珠海市2022年6月信息價(jià)
鋼塑土工格柵 1、規(guī)格:GSZ80-80 2、縱/橫向極限抗拉力:≥80kN/m 3、結(jié)點(diǎn)極限剝離力:≥800N 查看價(jià)格 查看價(jià)格

m2 珠海市2022年2月信息價(jià)
鋼塑土工格柵 1、規(guī)格:GSZ50-50 2、縱/橫向極限抗拉力:≥50kN/m 3、結(jié)點(diǎn)極限剝離力:≥800N 查看價(jià)格 查看價(jià)格

m2 珠海市2021年7月信息價(jià)
鋼塑土工格柵 1、規(guī)格:GSZ50-50 2、縱/橫向極限抗拉力:≥50kN/m 3、結(jié)點(diǎn)極限剝離力:≥800N 查看價(jià)格 查看價(jià)格

m2 珠海市2021年6月信息價(jià)
材料名稱(chēng) 規(guī)格/需求量 報(bào)價(jià)數(shù) 最新報(bào)價(jià)
(元)
供應(yīng)商 報(bào)價(jià)地區(qū) 最新報(bào)價(jià)時(shí)間
鋼塑雙向土工格柵(凸結(jié)點(diǎn))縱橫向抗拉強(qiáng)度≥80KN,結(jié)點(diǎn)剝離力≥350KN,凸結(jié)點(diǎn)高度≥5mm) 鋼塑雙向土工格柵(凸結(jié)點(diǎn))縱橫向抗拉強(qiáng)度≥80KN,結(jié)點(diǎn)剝離力≥350KN,凸結(jié)點(diǎn)高度≥5mm)|37000m2 1 查看價(jià)格 天津市津?yàn)I中鐵商貿(mào)有限公司 天津  天津市 2012-05-22
HFC系統(tǒng)光結(jié)點(diǎn) 詳見(jiàn)原檔|1個(gè) 1 查看價(jià)格 深圳市鑫邁威有線(xiàn)電視器材有限公司    2016-07-21
HFC系統(tǒng)光結(jié)點(diǎn) 主流考慮|3個(gè) 3 查看價(jià)格 成都泛亞視訊科技有限公司 廣東   2020-06-15
樹(shù)形秋千TREE-SHAPEDSWING 1、尺寸:大約5000長(zhǎng)Size2、材質(zhì):工程塑料 PEMaterial|1套 3 查看價(jià)格 廣州奇樂(lè)游樂(lè)設(shè)備有限公司 廣東   2020-07-09
結(jié)點(diǎn)壓力表 恒壓值0.92MPa|1.0套 3 查看價(jià)格 廣州市榕業(yè)閥門(mén)有限公司    2015-07-02
結(jié)點(diǎn)壓力表 恒壓值1.00MPa|1.0套 3 查看價(jià)格 廣州市榕業(yè)閥門(mén)有限公司    2015-07-02
結(jié)點(diǎn)壓力表 恒壓值0.77MPa|1.0套 3 查看價(jià)格 廣州市榕業(yè)閥門(mén)有限公司    2015-07-02
結(jié)點(diǎn)壓力表 恒壓值0.40MPa|1.0套 3 查看價(jià)格 廣州市榕業(yè)閥門(mén)有限公司    2015-07-02

B-tree性能

B-tree有以下特性:

1、關(guān)鍵字集合分布在整棵樹(shù)中;

2、任何一個(gè)關(guān)鍵字出現(xiàn)且只出現(xiàn)在一個(gè)結(jié)點(diǎn)中;

3、搜索有可能在非葉子結(jié)點(diǎn)結(jié)束;

4、其搜索性能等價(jià)于在關(guān)鍵字全集內(nèi)做一次二分查找;

5、自動(dòng)層次控制;

由于限制了除根結(jié)點(diǎn)以外的非葉子結(jié)點(diǎn),至少含有M/2個(gè)兒子,確保了結(jié)點(diǎn)的至少利用率,其最低搜索性能為:

其中,M為設(shè)定的非葉子結(jié)點(diǎn)最多子樹(shù)個(gè)數(shù),N為關(guān)鍵字總數(shù);

所以B-樹(shù)的性能總是等價(jià)于二分查找(與M值無(wú)關(guān)),也就沒(méi)有B樹(shù)平衡的問(wèn)題;

由于M/2的限制,在插入結(jié)點(diǎn)時(shí),如果結(jié)點(diǎn)已滿(mǎn),需要將結(jié)點(diǎn)分裂為兩個(gè)各占M/2的結(jié)點(diǎn);刪除結(jié)點(diǎn)時(shí),需將兩個(gè)不足M/2的兄弟結(jié)點(diǎn)合并。

鑒于B-tree具有良好的定位特性,其常被用于對(duì)檢索時(shí)間要求苛刻的場(chǎng)合,例如:

1、B-tree索引是數(shù)據(jù)庫(kù)中存取和查找文件(稱(chēng)為記錄或鍵值)的一種方法。

2、硬盤(pán)中的結(jié)點(diǎn)也是B-tree結(jié)構(gòu)的。與內(nèi)存相比,硬盤(pán)必須花成倍的時(shí)間來(lái)存取一個(gè)數(shù)據(jù)元素,這是因?yàn)橛脖P(pán)的機(jī)械部件讀寫(xiě)數(shù)據(jù)的速度遠(yuǎn)遠(yuǎn)趕不上純電子媒體的內(nèi)存。與一個(gè)結(jié)點(diǎn)兩個(gè)分支的二元樹(shù)相比,B-tree利用多個(gè)分支(稱(chēng)為子樹(shù))的結(jié)點(diǎn),減少獲取記錄時(shí)所經(jīng)歷的結(jié)點(diǎn)數(shù),從而達(dá)到節(jié)省存取時(shí)間的目的。

B-tree結(jié)點(diǎn)常見(jiàn)問(wèn)題

  • 關(guān)于結(jié)點(diǎn)的問(wèn)題

    節(jié)點(diǎn)可以歸納為板,欄板,挑檐、剪力墻等構(gòu)件相互組合。

  • 結(jié)點(diǎn)的問(wèn)題

    1 這要看你的這根梁起的作用。從你上傳的圖來(lái)看應(yīng)該是框架梁(旁邊是現(xiàn)澆板),框架梁的受力鋼筋是凈長(zhǎng)+(左右錨固、左右支座-保護(hù)層+彎折兩者取大值),而圈梁的受力筋是凈長(zhǎng)+15D*2。兩個(gè)平挑出去的可以...

  • 結(jié)點(diǎn)圈梁?jiǎn)栴}

    這可你最好不要分開(kāi)繪圖,直接用異形梁定義就行,在網(wǎng)格中畫(huà)出截面圖形后直接劃到圖上,一次性到位。 你那樣畫(huà)四相當(dāng)麻煩的呀。 別折騰了,在表格輸入中自己列式計(jì)算,一次性整樓計(jì)算完。

/* btrees.h */

/*

* 平衡多路樹(shù)的一種重要方案。

* 在 1970 年由 R. Bayer 和 E. McCreight 發(fā)明。

*/

#define M 1

/* B 樹(shù)的階,即非根節(jié)點(diǎn)中鍵的最小數(shù)目。

* 有些人把階定義為非根節(jié)點(diǎn)中子樹(shù)的最大數(shù)目。

*/

typedef int typekey;

typedef struct btnode { /* B-Tree 節(jié)點(diǎn) */

int d; /* 節(jié)點(diǎn)中鍵的數(shù)目 */

typekey k[2*M]; /* 鍵 */

char *v[2*M]; /* 值 */

struct btnode *p[2*M+1]; /* 指向子樹(shù)的指針 */

} node, *btree;

/*

* 每個(gè)鍵的左子樹(shù)中的所有的鍵都小于這個(gè)鍵,

* 每個(gè)鍵的右子樹(shù)中的所有的鍵都大于等于這個(gè)鍵。

* 葉子節(jié)點(diǎn)中的每個(gè)鍵都沒(méi)有子樹(shù)。

*/

/* 當(dāng) M 等于 1 時(shí)也稱(chēng)為 2-3 樹(shù)

* +----+----+

* | k0 | k1 |

* +-+----+----+---

* | p0 | p1 | p2 |

* +----+----+----+

*/

extern int btree_disp; /* 查找時(shí)找到的鍵在節(jié)點(diǎn)中的位置 */

extern char * InsValue; /* 與要插的鍵相對(duì)應(yīng)的值 */

extern btree search(typekey, btree);

extern btree insert(typekey,btree);

extern btree delete(typekey,btree);

extern int height(btree);

extern int count(btree);

extern double payload(btree);

extern btree deltree(btree);

/* end of btrees.h */

/*******************************************************/

/* btrees.c */

#include <stdlib.h>

#include <stdio.h>

#include "btrees.h"

btree search(typekey, btree);

btree insert(typekey,btree);

btree delete(typekey,btree);

int height(btree);

int count(btree);

double payload(btree);

btree deltree(btree);

static void InternalInsert(typekey, btree);

static void InsInNode(btree, int);

static void SplitNode(btree, int);

static btree NewRoot(btree);

static void InternalDelete(typekey, btree);

static void JoinNode(btree, int);

static void MoveLeftNode(btree t, int);

static void MoveRightNode(btree t, int);

static void DelFromNode(btree t, int);

static btree FreeRoot(btree);

static btree delall(btree);

static void Error(int,typekey);

int btree_disp; /* 查找時(shí)找到的鍵在節(jié)點(diǎn)中的位置 */

char * InsValue = NULL; /* 與要插的鍵相對(duì)應(yīng)的值 */

static int flag; /* 節(jié)點(diǎn)增減標(biāo)志 */

static int btree_level = 0; /* 多路樹(shù)的高度 */

static int btree_count = 0; /* 多路樹(shù)的鍵總數(shù) */

static int node_sum = 0; /* 多路樹(shù)的節(jié)點(diǎn)總數(shù) */

static int level; /* 當(dāng)前訪(fǎng)問(wèn)的節(jié)點(diǎn)所處的高度 */

static btree NewTree; /* 在節(jié)點(diǎn)分割的時(shí)候指向新建的節(jié)點(diǎn) */

static typekey InsKey; /* 要插入的鍵 */

btree search(typekey key, btree t)

{

int i,j,m;

level=btree_level-1;

while (level >= 0)

{

for(i=0, j=t->d-1; i<j; m=(j+i)/2, (key > t->k[m])?(i=m+1):(j=m));

if (key == t->k [ i ])

{

btree_disp = i;

return t;

}

if (key > t->k [ i ]) /* i == t->d-1 時(shí)有可能出現(xiàn) */

i++;

t = t->p[ i ];

level--;

}

return NULL;

}

btree insert(typekey key, btree t)

{

level=btree_level;

InternalInsert(key, t);

if (flag == 1) /* 根節(jié)點(diǎn)滿(mǎn)之后,它被分割成兩個(gè)半滿(mǎn)節(jié)點(diǎn) */

t=NewRoot(t); /* 樹(shù)的高度增加 */

return t;

}

void InternalInsert(typekey key, btree t)

{

int i,j,m;

level--;

if (level < 0) /* 到達(dá)了樹(shù)的底部: 指出要做的插入 */

{

NewTree = NULL; /* 這個(gè)鍵沒(méi)有對(duì)應(yīng)的子樹(shù) */

InsKey = key; /* 導(dǎo)致底層的葉子節(jié)點(diǎn)增加鍵值+空子樹(shù)對(duì) */

btree_count++;

flag = 1; /* 指示上層節(jié)點(diǎn)把返回的鍵插入其中 */

return;

}

for(i=0, j=t->d-1; i<j; m=(j+i)/2, (key > t->k[m])?(i=m+1):(j=m));

if (key == t->k[ i ])

{

Error(1,key); /* 鍵已經(jīng)在樹(shù)中 */

flag = 0;

return;

}

if (key > t->k[ i ]) /* i == t->d-1 時(shí)有可能出現(xiàn) */

i++;

InternalInsert(key, t->p[ i ]);

if (flag == 0)

return;

/* 有新鍵要插入到當(dāng)前節(jié)點(diǎn)中 */

if (t->d < 2*M) /* 當(dāng)前節(jié)點(diǎn)未滿(mǎn) */

{

InsInNode(t, i); /* 把鍵值+子樹(shù)對(duì)插入當(dāng)前節(jié)點(diǎn)中 */

flag = 0; /* 指示上層節(jié)點(diǎn)沒(méi)有需要插入的鍵值+子樹(shù),插入過(guò)程結(jié)束 */

}

else /* 當(dāng)前節(jié)點(diǎn)已滿(mǎn),則分割這個(gè)頁(yè)面并把鍵值+子樹(shù)對(duì)插入當(dāng)前節(jié)點(diǎn)中 */

SplitNode(t, i); /* 繼續(xù)指示上層節(jié)點(diǎn)把返回的鍵值+子樹(shù)插入其中 */

}

/*

* 把一個(gè)鍵和對(duì)應(yīng)的右子樹(shù)插入一個(gè)節(jié)點(diǎn)中

*/

void InsInNode(btree t, int d)

{

int i;

/* 把所有大于要插入的鍵值的鍵和對(duì)應(yīng)的右子樹(shù)右移 */

for(i = t->d; i > d; i--)

{

t->k[ i ] = t->k[i-1];

t->v[ i ] = t->v[i-1];

t->p[i+1] = t->p[ i ];

}

/* 插入鍵和右子樹(shù) */

t->k[ i ] = InsKey;

t->p[i+1] = NewTree;

t->v[ i ] = InsValue;

t->d++;

}

/*

* 前件是要插入一個(gè)鍵和對(duì)應(yīng)的右子樹(shù),并且本節(jié)點(diǎn)已經(jīng)滿(mǎn)

* 導(dǎo)致分割這個(gè)節(jié)點(diǎn),插入鍵和對(duì)應(yīng)的右子樹(shù),

* 并向上層返回一個(gè)要插入鍵和對(duì)應(yīng)的右子樹(shù)

*/

void SplitNode(btree t, int d)

{

int i,j;

btree temp;

typekey temp_k;

char *temp_v;

/* 建立新節(jié)點(diǎn) */

temp = (btree)malloc(sizeof(node));

/*

* +---+--------+-----+-----+--------+-----+

* | 0 | ...... | M | M+1 | ...... |2*M-1|

* +---+--------+-----+-----+--------+-----+

* |<- M+1 ->|<- M-1 ->|

*/

if (d > M) /* 要插入當(dāng)前節(jié)點(diǎn)的右半部分 */

{

/* 把從 2*M-1 到 M+1 的 M-1 個(gè)鍵值+子樹(shù)對(duì)轉(zhuǎn)移到新節(jié)點(diǎn)中,

* 并且為要插入的鍵值+子樹(shù)空出位置 */

for(i=2*M-1,j=M-1; i>=d; i--,j--)

{

temp->k[j] = t->k[ i ];

temp->v[j] = t->v[ i ];

temp->p[j+1] = t->p[i+1];

}

for(i=d-1,j=d-M-2; j>=0; i--,j--)

{

temp->k[j] = t->k[ i ];

temp->v[j] = t->v[ i ];

temp->p[j+1] = t->p[i+1];

}

/* 把節(jié)點(diǎn)的最右子樹(shù)轉(zhuǎn)移成新節(jié)點(diǎn)的最左子樹(shù) */

temp->p[0] = t->p[M+1];

/* 在新節(jié)點(diǎn)中插入鍵和右子樹(shù) */

temp->k[d-M-1] = InsKey;

temp->p[d-M] = NewTree;

temp->v[d-M-1] = InsValue;

/* 設(shè)置要插入上層節(jié)點(diǎn)的鍵和值 */

InsKey = t->k[M];

InsValue = t->v[M];

}

else /* d <= M */

{

/* 把從 2*M-1 到 M 的 M 個(gè)鍵值+子樹(shù)對(duì)轉(zhuǎn)移到新節(jié)點(diǎn)中 */

for(i=2*M-1,j=M-1; j>=0; i--,j--)

{

temp->k[j] = t->k[ i ];

temp->v[j] = t->v[ i ];

temp->p[j+1] = t->p[i+1];

}

if (d == M) /* 要插入當(dāng)前節(jié)點(diǎn)的正中間 */

/* 把要插入的子樹(shù)作為新節(jié)點(diǎn)的最左子樹(shù) */

temp->p[0] = NewTree;

/* 直接把要插入的鍵和值返回給上層節(jié)點(diǎn) */

else /* (d<M) 要插入當(dāng)前節(jié)點(diǎn)的左半部分 */

{

/* 把節(jié)點(diǎn)當(dāng)前的最右子樹(shù)轉(zhuǎn)移成新節(jié)點(diǎn)的最左子樹(shù) */

temp->p[0] = t->p[M];

/* 保存要插入上層節(jié)點(diǎn)的鍵和值 */

temp_k = t->k[M-1];

temp_v = t->v[M-1];

/* 把所有大于要插入的鍵值的鍵和對(duì)應(yīng)的右子樹(shù)右移 */

for(i=M-1; i>d; i--)

{

t->k[ i ] = t->k[i-1];

t->v[ i ] = t->v[i-1];

t->p[i+1] = t->p[ i ];

}

/* 在節(jié)點(diǎn)中插入鍵和右子樹(shù) */

t->k[d] = InsKey;

t->p[d+1] = NewTree;

t->v[d] = InsValue;

/* 設(shè)置要插入上層節(jié)點(diǎn)的鍵和值 */

InsKey = temp_k;

InsValue = temp_v;

}

}

t->d =M;

temp->d = M;

NewTree = temp;

node_sum++;

}

btree delete(typekey key, btree t)

{

level=btree_level;

InternalDelete(key, t);

if (t->d == 0)

/* 根節(jié)點(diǎn)的子節(jié)點(diǎn)合并導(dǎo)致根節(jié)點(diǎn)鍵的數(shù)目隨之減少,

* 當(dāng)根節(jié)點(diǎn)中沒(méi)有鍵的時(shí)候,只有它的最左子樹(shù)可能非空 */

t=FreeRoot(t);

return t;

}

void InternalDelete(typekey key, btree t)

{

int i,j,m;

btree l,r;

int lvl;

level--;

if (level < 0)

{

Error(0,key); /* 在整個(gè)樹(shù)中未找到要?jiǎng)h除的鍵 */

flag = 0;

return;

}

for(i=0, j=t->d-1; i<j; m=(j+i)/2, (key > t->k[m])?(i=m+1):(j=m));

if (key == t->k[ i ]) /* 找到要?jiǎng)h除的鍵 */

{

if (t->v[ i ] != NULL)

free(t->v[ i ]); /* 釋放這個(gè)節(jié)點(diǎn)包含的值 */

if (level == 0) /* 有子樹(shù)為空則這個(gè)鍵位于葉子節(jié)點(diǎn) */

{

DelFromNode(t,i);

btree_count--;

flag = 1;

/* 指示上層節(jié)點(diǎn)本子樹(shù)的鍵數(shù)量減少 */

return;

}

else /* 這個(gè)鍵位于非葉節(jié)點(diǎn) */

{

lvl = level-1;

/* 找到前驅(qū)節(jié)點(diǎn) */

r = t->p[ i ];

while (lvl > 0)

{

r = r->p[r->d];

lvl--;

}

t->k[ i ]=r->k[r->d-1];

t->v[ i ]=r->v[r->d-1];

r->v[r->d-1]=NULL;

key = r->k[r->d-1];

}

}

else if (key > t->k[ i ]) /* i == t->d-1 時(shí)有可能出現(xiàn) */

i++;

InternalDelete(key,t->p[ i ]);

/* 調(diào)整平衡 */

if (flag == 0)

return;

if (t->p[ i ]->d < M)

{

if (i == t->d) /* 在最右子樹(shù)中發(fā)生了刪除 */

i--; /* 調(diào)整最右鍵的左右子樹(shù)平衡 */

l = t->p [ i ];

r = t->p[i+1];

if (r->d > M)

MoveLeftNode(t,i);

else if(l->d > M)

MoveRightNode(t,i);

else

{

JoinNode(t,i);

/* 繼續(xù)指示上層節(jié)點(diǎn)本子樹(shù)的鍵數(shù)量減少 */

return;

}

flag = 0;

/* 指示上層節(jié)點(diǎn)本子樹(shù)的鍵數(shù)量沒(méi)有減少,刪除過(guò)程結(jié)束 */

}

}

/*

* 合并一個(gè)節(jié)點(diǎn)的某個(gè)鍵對(duì)應(yīng)的兩個(gè)子樹(shù)

*/

void JoinNode(btree t, int d)

{

btree l,r;

int i,j;

l = t->p[d];

r = t->p[d+1];

/* 把這個(gè)鍵下移到它的左子樹(shù) */

l->k[l->d] = t->k[d];

l->v[l->d] = t->v[d];

/* 把右子樹(shù)中的所有鍵值和子樹(shù)轉(zhuǎn)移到左子樹(shù) */

for (j=r->d-1,i=l->d+r->d; j >= 0 ; j--,i--)

{

l->k[ i ] = r->k[j];

l->v[ i ] = r->v[j];

l->p[ i ] = r->p[j];

}

l->p[l->d+r->d+1] = r->p[r->d];

l->d += r->d+1;

/* 釋放右子樹(shù)的節(jié)點(diǎn) */

free(r);

/* 把這個(gè)鍵右邊的鍵和對(duì)應(yīng)的右子樹(shù)左移 */

for (i=d; i < t->d-1; i++)

{

t->k[ i ] = t->k[i+1];

t->v[ i ] = t->v[i+1];

t->p[i+1] = t->p[i+2];

}

t->d--;

node_sum--;

}

/*

* 從一個(gè)鍵的右子樹(shù)向左子樹(shù)轉(zhuǎn)移一些鍵,使兩個(gè)子樹(shù)平衡

*/

void MoveLeftNode(btree t, int d)

{

btree l,r;

int m; /* 應(yīng)轉(zhuǎn)移的鍵的數(shù)目 */

int i,j;

l = t->p[d];

r = t->p[d+1];

m = (r->d - l->d)/2;

/* 把這個(gè)鍵下移到它的左子樹(shù) */

l->k[l->d] = t->k[d];

l->v[l->d] = t->v[d];

/* 把右子樹(shù)的最左子樹(shù)轉(zhuǎn)移成左子樹(shù)的最右子樹(shù)

* 從右子樹(shù)向左子樹(shù)移動(dòng) m-1 個(gè)鍵+子樹(shù)對(duì) */

for (j=m-2,i=l->d+m-1; j >= 0; j--,i--)

{

l->k[ i ] = r->k[j];

l->v[ i ] = r->v[j];

l->p[ i ] = r->p[j];

}

l->p[l->d+m] = r->p[m-1];

/* 把右子樹(shù)的最左鍵提升到這個(gè)鍵的位置上 */

t->k[d] = r->k[m-1];

t->v[d] = r->v[m-1];

/* 把右子樹(shù)中的所有鍵值和子樹(shù)左移 m 個(gè)位置 */

r->p[0] = r->p[m];

for (i=0; i<r->d-m; i++)

{

r->k[ i ] = r->k[i+m];

r->v[ i ] = r->v[i+m];

r->p[ i ] = r->p[i+m];

}

r->p[r->d-m] = r->p[r->d];

l->d+=m;

r->d-=m;

}

/*

* 從一個(gè)鍵的左子樹(shù)向右子樹(shù)轉(zhuǎn)移一些鍵,使兩個(gè)子樹(shù)平衡

*/

void MoveRightNode(btree t, int d)

{

btree l,r;

int m; /* 應(yīng)轉(zhuǎn)移的鍵的數(shù)目 */

int i,j;

l = t->p[d];

r = t->p[d+1];

m = (l->d - r->d)/2;

/* 把右子樹(shù)中的所有鍵值和子樹(shù)右移 m 個(gè)位置 */

r->p[r->d+m]=r->p[r->d];

for (i=r->d-1; i>=0; i--)

{

r->k[i+m] = r->k[ i ];

r->v[i+m] = r->v[ i ];

r->p[i+m] = r->p[ i ];

}

/* 把這個(gè)鍵下移到它的右子樹(shù) */

r->k[m-1] = t->k[d];

r->v[m-1] = t->v[d];

/* 把左子樹(shù)的最右子樹(shù)轉(zhuǎn)移成右子樹(shù)的最左子樹(shù) */

r->p[m-1] = l->p[l->d];

/* 從左子樹(shù)向右子樹(shù)移動(dòng) m-1 個(gè)鍵+子樹(shù)對(duì) */

for (i=l->d-1,j=m-2; j>=0; j--,i--)

{

r->k[j] = l->k[ i ];

r->v[j] = l->v[ i ];

r->p[j] = l->p[ i ];

}

/* 把左子樹(shù)的最右鍵提升到這個(gè)鍵的位置上 */

t->k[d] = l->k[ i ];

t->v[d] = l->v[ i ];

l->d-=m;

r->d+=m;

}

/*

* 把一個(gè)鍵和對(duì)應(yīng)的右子樹(shù)從一個(gè)節(jié)點(diǎn)中刪除

*/

void DelFromNode(btree t, int d)

{

int i;

/* 把所有大于要?jiǎng)h除的鍵值的鍵左移 */

for(i=d; i < t->d-1; i++)

{

t->k[ i ] = t->k[i+1];

t->v[ i ] = t->v[i+1];

}

t->d--;

}

/*

* 建立有兩個(gè)子樹(shù)和一個(gè)鍵的根節(jié)點(diǎn)

*/

btree NewRoot(btree t)

{

btree temp;

temp = (btree)malloc(sizeof(node));

temp->d = 1;

temp->p[0] = t;

temp->p[1] = NewTree;

temp->k[0] = InsKey;

temp->v[0] = InsValue;

btree_level++;

node_sum++;

return(temp);

}

/*

* 釋放根節(jié)點(diǎn),并返回它的最左子樹(shù)

*/

btree FreeRoot(btree t)

{

btree temp;

temp = t->p[0];

free(t);

btree_level--;

node_sum--;

return temp;

}

void Error(int f,typekey key)

{

if (f)

printf("Btrees error: Insert %d!\n",key);

else

printf("Btrees error: delete %d!\n",key);

}

int height(btree t)

{

return btree_level;

}

int count(btree t)

{

return btree_count;

}

double payload(btree t)

{

if (node_sum==0)

return 1;

return (double)btree_count/(node_sum*(2*M));

}

btree deltree (btree t)

{

level=btree_level;

btree_level = 0;

return delall(t);

}

btree delall(btree t)

{

int i;

level--;

if (level >= 0)

{

for (i=0; i < t->d; i++)

if (t->v[ i ] != NULL)

free(t->v[ i ]);

if (level > 0)

for (i=0; i<= t->d ; i++)

t->p[ i ]=delall(t->p[ i ]);

free(t);

}

return NULL;

}

/* end of btrees.c */

另外還有一種與此類(lèi)似的樹(shù)結(jié)構(gòu)叫B+樹(shù),像 Berkerly DB , sqlite , mysql 數(shù)據(jù)庫(kù)都使用了B+樹(shù)算法處理索引。

B+和B-(即B)是因?yàn)槊總€(gè)結(jié)點(diǎn)上的關(guān)鍵字不同。一個(gè)多一個(gè),一個(gè)少一個(gè)。

對(duì)于B+樹(shù),其結(jié)點(diǎn)結(jié)構(gòu)與B-tree相同,不同的是各結(jié)點(diǎn)的關(guān)鍵字和可以擁有的子結(jié)點(diǎn)數(shù)。如m階B+樹(shù)中,每個(gè)結(jié)點(diǎn)至多可以擁有m個(gè)子結(jié)點(diǎn)。非根結(jié)點(diǎn)至少有[m/2]個(gè)子結(jié)點(diǎn),而關(guān)鍵字個(gè)數(shù)比B-tree多一個(gè),為[m/2]~m。

這兩種處理索引的數(shù)據(jù)結(jié)構(gòu)的不同之處:

1。B樹(shù)中同一鍵值不會(huì)出現(xiàn)多次,并且它有可能出現(xiàn)在葉結(jié)點(diǎn),也有可能出現(xiàn)在非葉結(jié)點(diǎn)中。而B(niǎo)+樹(shù)的鍵一定會(huì)出現(xiàn)在葉結(jié)點(diǎn)中,并且有可能在非葉結(jié)點(diǎn)中也有可能重復(fù)出現(xiàn),以維持B+樹(shù)的平衡。

2。因?yàn)锽樹(shù)鍵位置不定,且在整個(gè)樹(shù)結(jié)構(gòu)中只出現(xiàn)一次,雖然可以節(jié)省存儲(chǔ)空間,但使得在插入、刪除操作復(fù)雜度明顯增加。B+樹(shù)相比來(lái)說(shuō)是一種較好的折中。

3。B樹(shù)的查詢(xún)效率與鍵在樹(shù)中的位置有關(guān),最大時(shí)間復(fù)雜度與B+樹(shù)相同(在葉結(jié)點(diǎn)的時(shí)候),最小時(shí)間復(fù)雜度為1(在根結(jié)點(diǎn)的時(shí)候)。而B(niǎo)+樹(shù)的時(shí)間復(fù)雜度對(duì)某建成的樹(shù)是固定的。

B-tree結(jié)點(diǎn)文獻(xiàn)

結(jié)點(diǎn)平差在工程測(cè)量中的具體應(yīng)用 結(jié)點(diǎn)平差在工程測(cè)量中的具體應(yīng)用

格式:pdf

大?。?span id="jx7phmi" class="single-tag-height">187KB

頁(yè)數(shù): 10頁(yè)

評(píng)分: 4.3

拉結(jié)點(diǎn)預(yù)埋技術(shù)交底 拉結(jié)點(diǎn)預(yù)埋技術(shù)交底

格式:pdf

大小:187KB

頁(yè)數(shù): 3頁(yè)

評(píng)分: 4.4

第 1 頁(yè) 共 3 頁(yè) 1、本表由施工單位填寫(xiě),交底單位和接受單位各存一份。 2、當(dāng)做分項(xiàng)工程施工技術(shù)交底時(shí),應(yīng)填寫(xiě)“分項(xiàng)工程名稱(chēng)”欄,其他技術(shù)交底可不填寫(xiě)。 技 術(shù) 交 底 記 錄 表 C2-1 編 號(hào) 工程名稱(chēng) 鷹潭恒大綠洲( 4~14#棟)主體 及配套工程 -10#樓 交底日期 2011年 9月 施工單位 中鐵建設(shè)集團(tuán)武漢分公司第五項(xiàng)目部 分項(xiàng)工程名稱(chēng) / 交底提要 腳手架預(yù)埋技術(shù)交底 交底內(nèi)容: 一、施工準(zhǔn)備 600mm長(zhǎng)鋼管(數(shù)量根據(jù)現(xiàn)場(chǎng)需要確定) 、拉結(jié)點(diǎn)預(yù)埋位置布置圖(如圖 1-1 和圖 1-2 所示) 二、施工方法 根據(jù)圖 1-1 中的拉結(jié)點(diǎn)預(yù)埋位置, 混凝土澆筑施工前, 在相應(yīng)樓層的相應(yīng)位置預(yù)埋 600mm 長(zhǎng)鋼管作為連墻件與結(jié)構(gòu)的拉結(jié)點(diǎn)。 三、拉結(jié)點(diǎn)構(gòu)造要求及注意事項(xiàng) 1、不大于 30m2 設(shè)置一個(gè)拉結(jié)點(diǎn)。 2、連墻件采用剛性拉接,層層設(shè)置,以承受水平方向的壓力作用,加

立即下載
B-tree相關(guān)推薦
  • 相關(guān)百科
  • 相關(guān)知識(shí)
  • 相關(guān)專(zhuān)欄

最新詞條

安徽省政采項(xiàng)目管理咨詢(xún)有限公司 數(shù)字景楓科技發(fā)展(南京)有限公司 懷化市人民政府電子政務(wù)管理辦公室 河北省高速公路京德臨時(shí)籌建處 中石化華東石油工程有限公司工程技術(shù)分公司 手持無(wú)線(xiàn)POS機(jī) 廣東合正采購(gòu)招標(biāo)有限公司 上海城建信息科技有限公司 甘肅鑫禾國(guó)際招標(biāo)有限公司 燒結(jié)金屬材料 齒輪計(jì)量泵 廣州采陽(yáng)招標(biāo)代理有限公司河源分公司 高鋁碳化硅磚 博洛尼智能科技(青島)有限公司 燒結(jié)剛玉磚 深圳市東海國(guó)際招標(biāo)有限公司 搭建香蕉育苗大棚 SF計(jì)量單位 福建省中億通招標(biāo)咨詢(xún)有限公司 泛海三江 威海鼠尾草 Excel 數(shù)據(jù)處理與分析應(yīng)用大全 廣東國(guó)咨招標(biāo)有限公司 甘肅中泰博瑞工程項(xiàng)目管理咨詢(xún)有限公司 山東創(chuàng)盈項(xiàng)目管理有限公司 當(dāng)代建筑大師 廣西北纜電纜有限公司 拆邊機(jī) 大山檳榔 上海地鐵維護(hù)保障有限公司通號(hào)分公司 甘肅中維國(guó)際招標(biāo)有限公司 舌花雛菊 華潤(rùn)燃?xì)猓ㄉ虾#┯邢薰? 湖北鑫宇陽(yáng)光工程咨詢(xún)有限公司 GB8163標(biāo)準(zhǔn)無(wú)縫鋼管 中國(guó)石油煉化工程建設(shè)項(xiàng)目部 韶關(guān)市優(yōu)采招標(biāo)代理有限公司 莎草目 建設(shè)部關(guān)于開(kāi)展城市規(guī)劃動(dòng)態(tài)監(jiān)測(cè)工作的通知 電梯平層準(zhǔn)確度 廣州利好來(lái)電氣有限公司 四川中澤盛世招標(biāo)代理有限公司