B-tree性能

B-tree有以下特性:

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

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

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

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

5、自動層次控制;

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

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

所以B-樹的性能總是等價于二分查找(與M值無關(guān)),也就沒有B樹平衡的問題;

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

B-tree造價信息

市場價 信息價 詢價
材料名稱 規(guī)格/型號 市場價
(除稅)
工程建議價
(除稅)
行情 品牌 單位 稅率 供應(yīng)商 報價日期
工業(yè)用高性能泡沫玻璃 620×480mm 查看價格 查看價格

德和

m3 13% 上海麥芮節(jié)能環(huán)保工程有限公司
性能工作站 內(nèi)存:16GB;硬盤:512GB;綜合單價;I7-8700×DDR4×SSD/獨立顯存2GB/2GbE×1/23.8寸顯示器×1/200W單 查看價格 查看價格

13% 深圳市進(jìn)一步網(wǎng)絡(luò)科技有限公司
性能差壓變送器 型號 EJA220A類型 智能差壓變送器 精度 ±0.2%測量范圍 見資料(kPa) 查看價格 查看價格

EJA

13% 南京聚暉科技發(fā)展有限公司
性能蝶閥 D372F-16C;DN350;蝸輪;密封面材料:氟塑料;閥體材質(zhì):碳鋼;接口形式:對夾; 查看價格 查看價格

盛唐

13% 上海盛唐閥門科技股份有限公司
性能蝶閥 D372F-16C;DN150;蝸輪;密封面材料:氟塑料;閥體材質(zhì):碳鋼;接口形式:對夾; 查看價格 查看價格

盛唐

13% 上海盛唐閥門科技股份有限公司
性能蝶閥 D372F-16C;DN300;蝸輪;密封面材料:氟塑料;閥體材質(zhì):碳鋼;接口形式:對夾; 查看價格 查看價格

盛唐

13% 上海盛唐閥門科技股份有限公司
性能蝶閥 D372F-16C;DN50;蝸輪;密封面材料:氟塑料;閥體材質(zhì):碳鋼;接口形式:對夾; 查看價格 查看價格

盛唐

13% 上海盛唐閥門科技股份有限公司
性能蝶閥 D372F-16R;DN80;蝸輪;密封面材料:氟塑料;閥體材質(zhì):316不銹鋼;接口形式:對夾; 查看價格 查看價格

盛唐

13% 上海盛唐閥門科技股份有限公司
材料名稱 規(guī)格/型號 除稅
信息價
含稅
信息價
行情 品牌 單位 稅率 地區(qū)/時間
性能膨脹劑 FQY 查看價格 查看價格

kg 茂名市2022年9月信息價
性能膨脹劑 HPA-Z 阻銹型 查看價格 查看價格

kg 湛江市2022年2季度信息價
性能膨脹劑 FQY 查看價格 查看價格

kg 惠州市2022年6月信息價
性能膨脹劑 HPA-O 普通型 查看價格 查看價格

kg 湛江市2022年1季度信息價
性能膨脹劑 HPA-H 高效型 查看價格 查看價格

kg 湛江市2022年1季度信息價
性能膨脹劑 HPA-Z 阻銹型 查看價格 查看價格

kg 湛江市2022年1季度信息價
性能膨脹劑 FQY 查看價格 查看價格

kg 惠州市2022年3月信息價
性能膨脹劑 FQY 查看價格 查看價格

kg 茂名市2022年2月信息價
材料名稱 規(guī)格/需求量 報價數(shù) 最新報價
(元)
供應(yīng)商 報價地區(qū) 最新報價時間
樹形秋千TREE-SHAPEDSWING 1、尺寸:大約5000長Size2、材質(zhì):工程塑料 PEMaterial|1套 3 查看價格 廣州奇樂游樂設(shè)備有限公司 廣東   2020-07-09
GH高性能C50砼 GH高性能C50砼|90m2 1 查看價格 廣州廣航交通科技有限公司 廣東   2020-09-18
性能水性涂料 性能水性涂料|3400kg 2 查看價格 佛山市順德區(qū)長潤摩彩涂料有限公司 廣東  佛山市 2019-10-12
1mm吸音無紡布(燃燒性能等級B級)透氣層 1mm吸音無紡布(燃燒性能等級B級)透氣層|31000m2 1 查看價格 江門市新會維新無紡布有限公司 廣西   2022-07-04
軟木(燃燒性能等級B1 10mm厚、經(jīng)阻燃處理|100m2 1 查看價格 佛山市爵林木業(yè)有限公司 廣東   2017-09-22
康仕達(dá)高性能反光漆 性能|50kg 1 查看價格 天津市康仕達(dá)化工涂料有限公司 廣東  深圳市 2012-08-28
脫脂松木(燃燒性能等級B1 10mm厚、經(jīng)阻燃處理|100m2 1 查看價格 佛山市爵林木業(yè)有限公司 廣東   2017-09-22
生態(tài)木(燃燒性能等級B1 10mm厚、經(jīng)阻燃處理|100m2 1 查看價格 佛山市爵林木業(yè)有限公司 廣東   2017-09-22

B-tree中,每個結(jié)點包含:

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

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

3、關(guān)鍵字;

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

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

鑒于B-tree具有良好的定位特性,其常被用于對檢索時間要求苛刻的場合,例如:

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

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

B-tree性能常見問題

  • B2轟炸機(jī)性能

    性能數(shù)據(jù) 進(jìn)場速度259千米/實用升限15240米航程(空加油)于18530千米作戰(zhàn)航程(帶8枚近距攻擊8枚B83武器重16919千克)(高-高-高)11667千米(高-低-高)8149千米作戰(zhàn)航程(...

  • 黃瓜膠韓國phyto tree黃瓜膠多少錢

    韓國“phyto?tree黃瓜膠”最近很火熱,最讓人愛不釋手的地方在于其有著強(qiáng)大的美白補(bǔ)水修復(fù)功能??諝獾姆蹓m、大氣中的紫外線、化妝品殘留等這些無一不在傷害我們的肌膚。您可以找韓國代購買,價格都在30...

  • 萬和燃?xì)庠頱8b20x性能怎么樣?

    它是一款采用液化氣作為氣源的嵌入式燃?xì)庠睿洳捎昧怂{(lán)芯旋火技術(shù),能夠有效聚中加熱,同時還能使火焰完美貼合鍋底,充分利用熱量,并且采用了雙管道進(jìn)氣,燃燒也更加充分,能有效到達(dá)節(jié)能省氣的左右,值得選擇。

/* btrees.h */

/*

* 平衡多路樹的一種重要方案。

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

*/

#define M 1

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

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

*/

typedef int typekey;

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

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

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

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

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

} node, *btree;

/*

* 每個鍵的左子樹中的所有的鍵都小于這個鍵,

* 每個鍵的右子樹中的所有的鍵都大于等于這個鍵。

* 葉子節(jié)點中的每個鍵都沒有子樹。

*/

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

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

* | k0 | k1 |

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

* | p0 | p1 | p2 |

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

*/

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

extern char * InsValue; /* 與要插的鍵相對應(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; /* 查找時找到的鍵在節(jié)點中的位置 */

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

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

static int btree_level = 0; /* 多路樹的高度 */

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

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

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

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

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 時有可能出現(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é)點滿之后,它被分割成兩個半滿節(jié)點 */

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

return t;

}

void InternalInsert(typekey key, btree t)

{

int i,j,m;

level--;

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

{

NewTree = NULL; /* 這個鍵沒有對應(yīng)的子樹 */

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

btree_count++;

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

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)在樹中 */

flag = 0;

return;

}

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

i++;

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

if (flag == 0)

return;

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

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

{

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

flag = 0; /* 指示上層節(jié)點沒有需要插入的鍵值+子樹,插入過程結(jié)束 */

}

else /* 當(dāng)前節(jié)點已滿,則分割這個頁面并把鍵值+子樹對插入當(dāng)前節(jié)點中 */

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

}

/*

* 把一個鍵和對應(yīng)的右子樹插入一個節(jié)點中

*/

void InsInNode(btree t, int d)

{

int i;

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

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 ];

}

/* 插入鍵和右子樹 */

t->k[ i ] = InsKey;

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

t->v[ i ] = InsValue;

t->d++;

}

/*

* 前件是要插入一個鍵和對應(yīng)的右子樹,并且本節(jié)點已經(jīng)滿

* 導(dǎo)致分割這個節(jié)點,插入鍵和對應(yīng)的右子樹,

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

*/

void SplitNode(btree t, int d)

{

int i,j;

btree temp;

typekey temp_k;

char *temp_v;

/* 建立新節(jié)點 */

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

/*

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

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

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

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

*/

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

{

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

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

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é)點的最右子樹轉(zhuǎn)移成新節(jié)點的最左子樹 */

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

/* 在新節(jié)點中插入鍵和右子樹 */

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

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

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

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

InsKey = t->k[M];

InsValue = t->v[M];

}

else /* d <= M */

{

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

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é)點的正中間 */

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

temp->p[0] = NewTree;

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

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

{

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

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

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

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

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

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

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é)點中插入鍵和右子樹 */

t->k[d] = InsKey;

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

t->v[d] = InsValue;

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

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é)點的子節(jié)點合并導(dǎo)致根節(jié)點鍵的數(shù)目隨之減少,

* 當(dāng)根節(jié)點中沒有鍵的時候,只有它的最左子樹可能非空 */

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); /* 在整個樹中未找到要刪除的鍵 */

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 ]) /* 找到要刪除的鍵 */

{

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

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

if (level == 0) /* 有子樹為空則這個鍵位于葉子節(jié)點 */

{

DelFromNode(t,i);

btree_count--;

flag = 1;

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

return;

}

else /* 這個鍵位于非葉節(jié)點 */

{

lvl = level-1;

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

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 時有可能出現(xiàn) */

i++;

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

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

if (flag == 0)

return;

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

{

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

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

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é)點本子樹的鍵數(shù)量減少 */

return;

}

flag = 0;

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

}

}

/*

* 合并一個節(jié)點的某個鍵對應(yīng)的兩個子樹

*/

void JoinNode(btree t, int d)

{

btree l,r;

int i,j;

l = t->p[d];

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

/* 把這個鍵下移到它的左子樹 */

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

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

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

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;

/* 釋放右子樹的節(jié)點 */

free(r);

/* 把這個鍵右邊的鍵和對應(yīng)的右子樹左移 */

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--;

}

/*

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

*/

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;

/* 把這個鍵下移到它的左子樹 */

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

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

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

* 從右子樹向左子樹移動 m-1 個鍵+子樹對 */

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];

/* 把右子樹的最左鍵提升到這個鍵的位置上 */

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

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

/* 把右子樹中的所有鍵值和子樹左移 m 個位置 */

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;

}

/*

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

*/

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;

/* 把右子樹中的所有鍵值和子樹右移 m 個位置 */

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 ];

}

/* 把這個鍵下移到它的右子樹 */

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

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

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

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

/* 從左子樹向右子樹移動 m-1 個鍵+子樹對 */

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 ];

}

/* 把左子樹的最右鍵提升到這個鍵的位置上 */

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

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

l->d-=m;

r->d+=m;

}

/*

* 把一個鍵和對應(yīng)的右子樹從一個節(jié)點中刪除

*/

void DelFromNode(btree t, int d)

{

int i;

/* 把所有大于要刪除的鍵值的鍵左移 */

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

{

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

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

}

t->d--;

}

/*

* 建立有兩個子樹和一個鍵的根節(jié)點

*/

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é)點,并返回它的最左子樹

*/

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 */

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

B+和B-(即B)是因為每個結(jié)點上的關(guān)鍵字不同。一個多一個,一個少一個。

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

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

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

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

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

B-tree性能文獻(xiàn)

結(jié)構(gòu)性能B 結(jié)構(gòu)性能B

格式:pdf

大小:50KB

頁數(shù): 8頁

評分: 4.4

質(zhì)量檢測人員結(jié)構(gòu)性能考核試卷 (滿分 100分,時間 80分鐘) 姓名 考試號 單位 一、單項選擇題(每題 1 分,共計 40 分) 1、光纖光柵應(yīng)變計的允許誤差為量程的 。 A、±0.5% B、±1.0% C、±1.5% D、±2.0% 2、垂直裂縫的觀測位置應(yīng)在結(jié)構(gòu)構(gòu)件的 。 A、拉應(yīng)力最大區(qū)段 B、壓應(yīng)力最大區(qū)段 C、拉應(yīng)力最大區(qū)段及薄弱環(huán)節(jié) D、壓應(yīng)力最大區(qū)段及薄弱環(huán)節(jié) 2、非實驗室條件進(jìn)行的預(yù)制構(gòu)件試驗、原位加載試驗等受場地、條件限制時,可采用滿足試驗要求的 其他加載方式,加載量值的允許誤差為 。 A、2.5% B、5% C、7.5% D、 10% 4、結(jié)構(gòu)試驗中采用彈簧式測力儀,其最小分度值不應(yīng)大于儀表量程的 。 A、0.5% B、1.0% C、2.0% D、2.5% 5、量測混凝土結(jié)構(gòu)構(gòu)件時,對受彎構(gòu)件當(dāng)需要量測沿截面高度的應(yīng)變分布規(guī)律時,布置測點數(shù)不宜少 于 個。 A

立即下載
結(jié)構(gòu)性能B卷 結(jié)構(gòu)性能B卷

格式:pdf

大?。?span id="43pzyqt" class="single-tag-height">50KB

頁數(shù): 4頁

評分: 4.7

- 1 - 第四分冊 建筑主體結(jié)構(gòu)工程檢測技術(shù) 第一篇 主體結(jié)構(gòu)現(xiàn)場檢測 3、結(jié)構(gòu)性能模擬試卷( B卷) 一、填空題(每空 1分,共計 20分) 1. 板、梁和桁架等簡支構(gòu)件,試驗時應(yīng)一端采用 ,另一端采用 。 2. 構(gòu)件的試驗荷載布置應(yīng)符合 或 的要求。 3. 當(dāng)試驗的構(gòu)件承受較大集中力或支座反力時,應(yīng)對支承部分進(jìn)行 。 4. 荷重塊加載適用于 試驗。荷重塊應(yīng)按區(qū)格成垛堆放, 沿試驗結(jié)構(gòu)構(gòu)件的跨 度 方向的每堆長度 不應(yīng)大 于試 驗結(jié) 構(gòu)構(gòu)件 跨度的 ;對于跨度為 的試驗結(jié)構(gòu)構(gòu)件,每堆長度不應(yīng)大于構(gòu)件跨度的 1/4;堆間宜留 的間隙。 紅磚等小型塊狀材料, 宜 稱量;對于塊體大小均勻, 含水量一致又經(jīng) 抽樣核實塊重確系均勻的小型塊材,可按 加載量。 5. 結(jié)構(gòu)試驗用的各類量測儀表的量程應(yīng)滿足結(jié)構(gòu)構(gòu)件 的要求,最大測值不 宜大于選用儀表最大量程的 。 6. 鋼筋混凝土構(gòu)件和允許出現(xiàn)裂縫的

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

最新詞條

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