當前位置:首頁 » 存儲配置 » BT結構存儲

BT結構存儲

發布時間: 2023-10-12 09:30:01

㈠ BT下載里的DHT是什麼怎麼才能讓DHT點數增加

DHT簡介

DHT使用分布式哈希演算法來解決結構化的分布式存儲問題。分布式哈希演算法的核心思想是通過將存儲對象的特徵(關鍵字)經過哈希運算,得到鍵值(Hash Key),對象的分布存儲依據鍵值來進行。具體來講,大致有以下步驟:

對存儲對象的關鍵字進行哈希運算,得到鍵值。這樣就將所有的對象映射到了一個具體的數值范圍中。

重疊網中的每個節點負責數值范圍中的特定段落。例如,節點A負責存儲鍵值從8000到8999的對象;而節點B負責7000~7999的對象。這樣就將對象集合分布地存儲在所有的節點中。

節點可以直接存儲對象本身,如文件中的一個片段;也可以存儲對象的索引,如該對象所在節點的IP地址。

結構化的分布式存儲問題解決後,剩下的問題就是用戶如何才能找到存儲著目標信息的節點。在有著大量節點(如100萬個)的P2P系統中,任何節點都不可能擁有全部的節點?鍵值?內容的對應關系;因此用戶獲得了鍵值之後,如何找到該鍵值對應的節點就被稱為DHT的路由問題。DHT協議必須定義優化的查找(路由)演算法來完成這一搜尋的工作。不同的DHT協議之間區別很大程度上就在於定義了不同的路由演算法。

DHT的應用非常簡潔----API簡單到只有一項輸入和一項輸出:

應用層將數據對象(文件、數據塊或索引)通過哈希演算法獲得鍵值,將該鍵值提交給DHT後,返回結果就是鍵值所在節點的IP地址。圖1(來自[9])顯示了這種應用結構:

圖 1 DHT的應用結構

在這樣的支持下,可以開發多種P2P的應用程序,如網路存儲與文件共享、即時消息、音頻/視頻等。圖2(來自[9])顯示了這種應用結構:

圖 2 DHT應用的層次

主流DHT協議

緩沖陣列路由協議(CARP,Cache Array Routing Protocol)

協議簡介

CARP是由微軟公司的Vinod Valloppillil和賓西法尼亞大學的Keith W. Ross在1997年提出的。該協議可以將URL空間映射到一個僅有鬆散關聯關系的Web cache 伺服器(在協議中稱為「代理」,Proxy)陣列中。支持該協議的HTTP客戶端可以根據要訪問的URL智能選擇目標代理。該協議解決了在代理陣列內分布存儲內容的問題,避免了內容的重復存儲,提高了客戶端訪問時Web Cache命中的概率。

㈡ 什麼是二叉樹

二叉樹

在計算機科學中,二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查找樹和二叉堆。

二叉樹的每個結點至多隻有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。二叉樹的第i層至多有2^{i-1}個結點;深度為k的二叉樹至多有2^k-1個結點;對任何一棵二叉樹T,如果其終端結點數為n_0,度為2的結點數為n_2,則n_0=n_2+1。

一棵深度為k,且有2^k-1個節點的二叉樹,稱為滿二叉樹。這種樹的特點是每一層上的節點數都是最大節點數。而在一棵二叉樹中,除最後一層外,若其餘層都是滿的,並且最後一層或者是滿的,或者是在右邊缺少連續若干節點,則此二叉樹為完全二叉樹。具有n個節點的完全二叉樹的深度為log2n+1。深度為k的完全二叉樹,至少有2^(k-1)個節點,至多有2^k-1個節點。

一、定義

二叉樹在圖論中是這樣定義的:二叉樹是一個連通的無環圖,並且每一個頂點的度不大於3。有根二叉樹還要滿足根結點的度不大於2。有了根結點之後,每個頂點定義了唯一的父結點,和最多2個子結點。然而,沒有足夠的信息來區分左結點和右結點。如果不考慮連通性,允許圖中有多個連通分量,這樣的結構叫做森林。

二、基本概念

二叉樹是遞歸定義的,其結點有左右子樹之分,邏輯上二叉樹有五種基本形態:

(1)空二叉樹——如圖(a);

線索二叉樹的存儲結構

在中序線索樹找結點後繼的規律是:若其右標志為1,則右鏈為線索,指示其後繼,否則遍歷其右子樹時訪問的第一個結點(右子樹最左下的結點)為其後繼;找結點前驅的規律是:若其左標志為1,則左鏈為線索,指示其前驅,否則遍歷左子樹時最後訪問的一個結點(左子樹中最右下的結點)為其前驅。

在後序線索樹中找到結點的後繼分三種情況:

若結點是二叉樹的根,則其後繼為空;若結點是其雙親的右孩子,或是其雙親的左孩子且其雙親沒有右子樹,則其後繼即為雙親結點;若結點是其雙親的左孩子,且其雙親有右子樹,則其後繼為雙親右子樹上按後序遍歷列出的第一個結點。

數據結構定義為:

/*二叉線索存儲表示*/typedefenum{Link,Thread}PointerTag;/* Link(0):指針,Thread(1):線索*/typedefstruct BiThrNode{ TElemType data;struct BiThrNode *lchild,*rchild;/*左右孩子指針*/PointerTag LTag,RTag;/* 左右標志 */}BiThrNode,*BiThrTree;

八、實現演示

範例二叉樹:

A

B C

D E

此樹的順序結構為:ABCD##E

intmain()
{

node*p=newnode;

node*p=head;

head=p;

stringstr;

cin>>str;

creat(p,str,0)//默認根節點在str下標0的位置

return0;

}

//p為樹的根節點(已開辟動態內存),str為二叉樹的順序存儲數組ABCD##E或其他順序存儲數組,r當前結點所在順序存儲數組位置.

intmain()

{

node*p=newnode;

node*p=head;

head=p;

stringstr;

cin>>str;

creat(p,str,0)//默認根節點在str下標0的位置

return0;

}

//p為樹的根節點(已開辟動態內存),str為二叉樹的順序存儲數組ABCD##E或其他順序存儲數組,r當前結點所在順序存儲數組位置。

voidcreat(node*p,stringstr,intr)

{

p->data=str[r];

if(str[r*2+1]=='#'||r*2+1>str.size()-1)p->lch=NULL;

else

{

p->lch=newnode;

creat(p->lch,str,r*2+1);

}

if(str[r*2+2]=='#'||r*2+2>str.size()-1)p->rch=NULL;

else

{

p->rch=newnode;

creat(p->rch,str,r*2+2);

}

}

㈢ 分析題: 5 對於一個棧,給出輸入項A、B、C、。如果輸入項序列由A,B,C所組成,試給出全部可能的輸出

輸入項序列是ABC,ACB,BAC。若序列的項屬於一個偏序集,則單調遞增序列就是其中每個項都大於等於之前的項;

若每個項都嚴格大於之前的項,這個序列就是嚴格單調遞增的。類似可定義單調遞減序列。單調序列是單調函數的一個特例。


(3)BT結構存儲擴展閱讀:

一個相對正式的定義:其項屬於集合S的有限序列是一個從 {1,2,...,n} 到S的函數,這里n≥0。屬於S的無限序列是從 {1,2,...}(自然數集合)到S的函數。

有限序列也稱作 n 元組。一個從所有整數到到集合的函數有時也稱作雙無限序列,這里將以負整數索引的序列認為是另一個以正整數索引的序列。

㈣ 數據結構中的二叉樹題目,求大神幫忙做下,謝謝!

設二叉樹bt的一種存儲結構如表所示。其中,bt為樹根結點指針,lchild、rchild分別為結點的左、右孩子指針域,使用結點編號作為指針域值,0表示指針域值為空;data為結點的數據域。請完成:(1)畫出二叉樹bt的樹形表示。(2)寫出按先序、中序和後序遍歷二叉樹bt所得到的結點序列。

㈤ 設二叉樹bt存儲結構如下

字元a是根結點,a的左分支是b,而a沒有右分支.

二叉樹示意圖:

a
/
b
/
cd
//
efg
//
hi
/
j

二叉樹的(鏈式)邏輯結構示意圖:

#a^
/
#b#
/
#c^#d#
//
^e^#f^#g^
//
^h^#i^
/
^j^

上述示意圖,符號#表示指針域,符號^表示NULL(空指針)

先序遍歷序列:abcedfhgij
中序遍歷序列:ecbhfdjiga
後序遍歷序列:echfjigdba


//C語言測試程序

#include"stdio.h"
#include"stdlib.h"
structtree
{
chardata;
structtree*left;
structtree*right;
};
typedefstructtreetreenode;
typedeftreenode*btree;

btreecreatebtree(char*data,intpos,intmaxPos)//遞歸創建法
{
btreenewnode;

if(data[pos]==0||pos>maxPos)
{
returnNULL;
}
else
{
newnode=(btree)malloc(sizeof(treenode));
newnode->data=data[pos];
newnode->left=createbtree(data,2*pos,maxPos);
newnode->right=createbtree(data,2*pos+1,maxPos);
returnnewnode;
}
}

voidpreorder(btreeptr)//先序遍歷(遞歸法)
{
if(ptr!=NULL)
{
printf("%C",ptr->data);
preorder(ptr->left);
preorder(ptr->right);
}
}

voidinorder(btreeptr)//中序遍歷(遞歸法)
{
if(ptr!=NULL)
{
inorder(ptr->left);
printf("%C",ptr->data);
inorder(ptr->right);
}
}

voidpostorder(btreeptr)//後序遍歷(遞歸法)
{
if(ptr!=NULL)
{
postorder(ptr->left);
postorder(ptr->right);
printf("%C",ptr->data);
}
}

intmain()
{
btreeroot=NULL;
inti;

chardata[64]={0,'a','b',0,'c','d',0,0,
'e',0,'f','g',0,0,0,0,
0,0,0,0,'h',0,'i',0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,'j',0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0};
root=createbtree(data,1,63);
printf("二叉樹的順序存儲內容:");
for(i=1;i<64;i++)
{
if(data[i]==0)
{
printf("^");
}
else
{
printf("%c",data[i]);
}
}

printf(" 二叉樹的先序遍歷序列:");
preorder(root);
printf(" 二叉樹的中序遍歷序列:");
inorder(root);
printf(" 二叉樹的後序遍歷序列:");
postorder(root);

printf(" ");
return0;
}

熱點內容
牆加密區域 發布:2024-11-30 02:33:32 瀏覽:630
idrac中怎麼控制伺服器 發布:2024-11-30 02:18:27 瀏覽:910
蜘蛛礦池伺服器地址 發布:2024-11-30 02:13:57 瀏覽:169
網易雲訪問記錄 發布:2024-11-30 02:13:17 瀏覽:376
java的數據類型有哪些 發布:2024-11-30 02:12:42 瀏覽:546
win8訪問win7共享 發布:2024-11-30 02:08:33 瀏覽:340
編程錄入錯誤 發布:2024-11-30 02:01:58 瀏覽:733
相機存儲卡無法讀取 發布:2024-11-30 02:00:15 瀏覽:772
美國訪問學者中介 發布:2024-11-30 01:49:47 瀏覽:491
手機版我的世界網易伺服器地鐵 發布:2024-11-30 01:38:57 瀏覽:522