最優(yōu)二叉樹算法基本概念

最優(yōu)二叉樹,也稱哈夫曼(Haffman)樹,是指對(duì)于一組帶有確定權(quán)值的葉結(jié)點(diǎn),構(gòu)造的具有最小帶權(quán)路徑長(zhǎng)度的二叉樹。

那么什么是二叉樹的帶權(quán)路徑長(zhǎng)度呢?

在前面我們介紹過(guò)路徑和結(jié)點(diǎn)的路徑長(zhǎng)度的概念,而二叉樹的路徑長(zhǎng)度則是指由根結(jié)點(diǎn)到所有葉結(jié)點(diǎn)的路徑長(zhǎng)度之和。如果二叉樹中的葉結(jié)點(diǎn)都具有一定的權(quán)值,則可將這一概念加以推廣。設(shè)二叉樹具有n個(gè)帶權(quán)值的葉結(jié)點(diǎn),那么從根結(jié)點(diǎn)到各個(gè)葉結(jié)點(diǎn)的路徑長(zhǎng)度與相應(yīng)結(jié)點(diǎn)權(quán)值的乘積之和叫做二叉樹的帶權(quán)路徑長(zhǎng)度,記為:

WPL= Wk·Lk

其中Wk為第k個(gè)葉結(jié)點(diǎn)的權(quán)值,Lk 為第k個(gè)葉結(jié)點(diǎn)的路徑長(zhǎng)度。如圖7.2所示的二叉樹,它的帶權(quán)路徑長(zhǎng)度值WPL=2×2+4×2+5×2+3×2=28。

在給定一組具有確定權(quán)值的葉結(jié)點(diǎn),可以構(gòu)造出不同的帶權(quán)二叉樹。例如,給出4個(gè)葉結(jié)點(diǎn),設(shè)其權(quán)值分別為1,3,5,7,我們可以構(gòu)造出形狀不同的多個(gè)二叉樹。這些形狀不同的二叉樹的帶權(quán)路徑長(zhǎng)度將各不相同。圖7.3給出了其中5個(gè)不同形狀的二叉樹。

這五棵樹的帶權(quán)路徑長(zhǎng)度分別為:

(a)WPL=1×2+3×2+5×2+7×2=32

(b)WPL=1×3+3×3+5×2+7×1=29

(c)WPL=1×2+3×3+5×3+7×1=33

(d)WPL=7×3+5×3+3×2+1×1=43

(e)WPL=7×1+5×2+3×3+1×3=29

最優(yōu)二叉樹算法

最優(yōu)二叉樹算法

由此可見,由相同權(quán)值的一組葉子結(jié)點(diǎn)所構(gòu)成的二叉樹有不同的形態(tài)和不同的帶權(quán)路徑長(zhǎng)度,那么如何找到帶權(quán)路徑長(zhǎng)度最小的二叉樹(即哈夫曼樹)呢?根據(jù)哈夫曼樹的定義,一棵二叉樹要使其WPL值最小,必須使權(quán)值越大的葉結(jié)點(diǎn)越靠近根結(jié)點(diǎn),而權(quán)值越小的葉結(jié)點(diǎn)越遠(yuǎn)離根結(jié)點(diǎn)。

哈夫曼(Haffman)依據(jù)這一特點(diǎn)于1952年提出了一種方法,這種方法的基本思想是:

(1)由給定的n個(gè)權(quán)值{W1,W2,…,Wn}構(gòu)造n棵只有一個(gè)葉結(jié)點(diǎn)的二叉樹,從而得到一個(gè)二叉樹的集合F={T1,T2,…,Tn};

(2)在F中選取根結(jié)點(diǎn)的權(quán)值最小和次小的兩棵二叉樹作為左、右子樹構(gòu)造一棵新的二叉樹,這棵新的二叉樹根結(jié)點(diǎn)的權(quán)值為其左、右子樹根結(jié)點(diǎn)權(quán)值之和;

(3)在集合F中刪除作為左、右子樹的兩棵二叉樹,并將新建立的二叉樹加入到集合F中;

(4)重復(fù)(2)(3)兩步,當(dāng)F中只剩下一棵二叉樹時(shí),這棵二叉樹便是所要建立的哈夫曼樹。

最優(yōu)二叉樹算法造價(jià)信息

市場(chǎng)價(jià) 信息價(jià) 詢價(jià)
材料名稱 規(guī)格/型號(hào) 市場(chǎng)價(jià)
(除稅)
工程建議價(jià)
(除稅)
行情 品牌 單位 稅率 供應(yīng)商 報(bào)價(jià)日期
二叉 S-8 查看價(jià)格 查看價(jià)格

13% 大連東方泰陶建材經(jīng)銷部
二叉 200X120X100mm 查看價(jià)格 查看價(jià)格

金九方

13% 佛山市金九方陶瓷有限公司
二叉(四類色) S-8 查看價(jià)格 查看價(jià)格

比特利

13% 重慶比特利建材有限公司
二叉類色) S-8 查看價(jià)格 查看價(jià)格

比特利

13% 重慶比特利建材有限公司
二叉(一類色(紅胎)) S-8 查看價(jià)格 查看價(jià)格

比特利

13% 重慶比特利建材有限公司
二叉(三類色) S-8 查看價(jià)格 查看價(jià)格

比特利

13% 重慶比特利建材有限公司
類色) S-四 查看價(jià)格 查看價(jià)格

比特利

13% 重慶比特利建材有限公司
類色) T四 查看價(jià)格 查看價(jià)格

比特利

13% 重慶比特利建材有限公司
材料名稱 規(guī)格/型號(hào) 除稅
信息價(jià)
含稅
信息價(jià)
行情 品牌 單位 稅率 地區(qū)/時(shí)間
日本瓦[J-四] 查看價(jià)格 查看價(jià)格

韶關(guān)市2009年11月信息價(jià)
日本瓦[J-四] 查看價(jià)格 查看價(jià)格

韶關(guān)市2009年7月信息價(jià)
日本瓦[J-四] 查看價(jià)格 查看價(jià)格

韶關(guān)市2008年9月信息價(jià)
日本瓦[J-四] 查看價(jià)格 查看價(jià)格

韶關(guān)市2008年8月信息價(jià)
日本瓦[J-四] 查看價(jià)格 查看價(jià)格

韶關(guān)市2008年1月信息價(jià)
日本瓦[J-四] 查看價(jià)格 查看價(jià)格

韶關(guān)市2007年10月信息價(jià)
日本瓦[J-四] 查看價(jià)格 查看價(jià)格

韶關(guān)市2007年8月信息價(jià)
日本瓦[J-四] 查看價(jià)格 查看價(jià)格

韶關(guān)市2007年7月信息價(jià)
材料名稱 規(guī)格/需求量 報(bào)價(jià)數(shù) 最新報(bào)價(jià)
(元)
供應(yīng)商 報(bào)價(jià)地區(qū) 最新報(bào)價(jià)時(shí)間
二叉 S-8|3645塊 1 查看價(jià)格 大連東方泰陶建材經(jīng)銷部 遼寧  大連市 2015-11-24
二叉噴頭 DN15|6779個(gè) 1 查看價(jià)格 佛山市天興消防器材有限公司 廣東  佛山市 2015-10-20
、二叉 -|1臺(tái) 1 查看價(jià)格 深圳市力德森氣動(dòng)工具有限公司    2017-06-12
二叉 200X120X100mm|9894塊 1 查看價(jià)格 佛山市金九方陶瓷有限公司 廣東  佛山市 2015-12-24
二叉頭路燈 高度5米,功率2×30W,光源LED|4臺(tái) 3 查看價(jià)格 深圳市奧瑞泰光電科技有限公司 廣東  廣州市 2019-01-28
AI算法訓(xùn)練 AI算法訓(xùn)練|25天 3 查看價(jià)格 廣州市熹尚科技設(shè)備有限公司 廣東   2021-07-16
AI算法訓(xùn)練 AI算法訓(xùn)練|60天 3 查看價(jià)格 浙江大華技術(shù)股份有限公司深圳分公司 廣東   2021-03-31
超五類二叉水晶頭 PL45E-A 水晶頭類|7531盒 1 查看價(jià)格 廣州市唯康通信技術(shù)有限公司 廣東  廣州市 2015-05-27

在實(shí)際應(yīng)用中,常常要考慮一個(gè)問(wèn)題:如何設(shè)計(jì)一棵二叉樹,使得執(zhí)行路徑最短,即算法的效率最高。

例1.快遞包裹的郵資問(wèn)題

假設(shè)郵政局的包裹自動(dòng)測(cè)試系統(tǒng)能夠測(cè)出包裹的重量,如何設(shè)計(jì)一棵二叉樹將包裹根據(jù)重量及運(yùn)距進(jìn)行分類從而確定郵資。

國(guó)內(nèi)快遞包裹資費(fèi) 單位:元

(2004年1月1日起執(zhí)行)

運(yùn)距(公里)

首重1000克

5000克以內(nèi)續(xù)重每500克

5001克以上續(xù)重每500克

<=500

5.00

2.00

1.00

<=1000 >500

6.00

2.50

1.30

<=1500 >1000

7.00

3.00

1.60

<=2000 >1500

8.00

3.50

1.90

<=2500 >2000

9.00

4.00

2.20

<=3000 >2500

10.00

4.50

2.50

<=4000 >3000

12.00

5.50

3.10

<=5000 >4000

14.00

6.50

3.70

<=6000 >5000

16.00

7.50

4.30

>6000

20.00

9.00

6.00

表1 國(guó)家郵政局制定的快遞包裹參考標(biāo)準(zhǔn)

根據(jù)表1可以制定出許多種二叉樹,但不同的二叉樹判定的次數(shù)可能不一樣,執(zhí)行的效率也不同。

鐵球分類

現(xiàn)有一批球磨機(jī)上的鐵球,需要將它分成四類:直徑不大于20的屬于第一類;直徑大于20而不大于50的屬于第二類;直徑大于50而不大于100的屬于第三類;其余的屬于第四類;假定這批球中屬于第一、二、三、四類鐵球的個(gè)數(shù)之比例是1:2:3:4。

我們可以把這個(gè)判斷過(guò)程表示為 圖1中的兩種方法:

最優(yōu)二叉樹算法

兩種判斷二叉樹示意圖

那么究竟將這個(gè)判斷過(guò)程表示成哪一個(gè)判斷框,才能使其執(zhí)行時(shí)間最短呢?讓我們對(duì)上述判斷框做一具體的分析。

假設(shè)有1000個(gè)鐵球,則各類鐵球的個(gè)數(shù)分別為:100、200、300、400;

對(duì)于圖7.1中的上圖和下圖比較的次數(shù)分別如表所示:

左圖 和下圖

序號(hào)

比較式

比較次數(shù)

1

a<20

1000

2

a<50

900

3

a<=100

700

合計(jì)

2600

序號(hào)

比較式

比較次數(shù)

1

a>100

1000

2

a>50

600

3

a<=20

300

合計(jì)

1900

表2 兩種判斷二叉樹比較次數(shù)

過(guò)上述分析可知,圖1中右圖所示的判斷框的比較次數(shù)遠(yuǎn)遠(yuǎn)小于左圖所示的判斷框的比較次數(shù)。為了找出比較次數(shù)最少的判斷框,將涉及到樹的路徑長(zhǎng)度問(wèn)題。

從上述算法中可以看出,F(xiàn)實(shí)際上是森林,該算法的思想是不斷地進(jìn)行森林F中的二叉樹的"合并",最終得到哈夫曼樹。

在構(gòu)造哈夫曼樹時(shí),可以設(shè)置一個(gè)結(jié)構(gòu)數(shù)組HuffNode保存哈夫曼樹中各結(jié)點(diǎn)的信息,根據(jù)二叉樹的性質(zhì)可知,具有n個(gè)葉子結(jié)點(diǎn)的哈夫曼樹共有2n-1個(gè)結(jié)點(diǎn),所以數(shù)組HuffNode的大小設(shè)置為2n-1,數(shù)組元素的結(jié)構(gòu)形式如下:

weight

lchild

rchild

parent

其中,weight域保存結(jié)點(diǎn)的權(quán)值,lchild和rchild域分別保存該結(jié)點(diǎn)的左、右孩子結(jié)點(diǎn)在數(shù)組HuffNode中的序號(hào),從而建立起結(jié)點(diǎn)之間的關(guān)系。為了判定一個(gè)結(jié)點(diǎn)是否已加入到要建立的哈夫曼樹中,可通過(guò)parent域的值來(lái)確定。初始時(shí)parent的值為-1,當(dāng)結(jié)點(diǎn)加入到樹中時(shí),該結(jié)點(diǎn)parent的值為其雙親結(jié)點(diǎn)在數(shù)組HuffNode中的序號(hào),就不會(huì)是-1了。

構(gòu)造哈夫曼樹時(shí),首先將由n個(gè)字符形成的n個(gè)葉結(jié)點(diǎn)存放到數(shù)組HuffNode的前n個(gè)分量中,然后根據(jù)前面介紹的哈夫曼方法的基本思想,不斷將兩個(gè)小子樹合并為一個(gè)較大的子樹,每次構(gòu)成的新子樹的根結(jié)點(diǎn)順序放到HuffNode數(shù)組中的前n個(gè)分量的后面。

下面給出哈夫曼樹的構(gòu)造算法。

const maxvalue= 10000; {定義最大權(quán)值}

maxleat=30; {定義哈夫曼樹中葉子結(jié)點(diǎn)個(gè)數(shù)}

maxnode=maxleaf*2-1;

type HnodeType=record

weight: integer;

parent: integer;

lchild: integer;

rchild: integer;

end;

HuffArr:array[0..maxnode] of HnodeType;

var ……

procedure CreatHaffmanTree(var HuffNode: HuffArr); {哈夫曼樹的構(gòu)造算法}

var i,j,m1,m2,x1,x2,n: integer;

begin

readln(n); {輸入葉子結(jié)點(diǎn)個(gè)數(shù)}

for i:=0 to 2*n-1 do {數(shù)組HuffNode[ ]初始化}

begin

HuffNode.weight=0;

HuffNode.parent=-1;

HuffNode.lchild=-1;

HuffNode.rchild=-1;

end;

for i:=0 to n-1 do read(HuffNode.weight); {輸入n個(gè)葉子結(jié)點(diǎn)的權(quán)值}

for i:=0 to n-1 do {構(gòu)造哈夫曼樹}

begin

m1:=MAXVALUE; m2:=MAXVALUE;

x1:=0; x2:=0;

for j:=0 to n i-1 do

if (HuffNode[j].weight

begin m2:=m1; x2:=x1;

m1:=HuffNode[j].weight; x1:=j;

end

else if (HuffNode[j].weight

begin m2:=HuffNode[j].weight; x2:=j; end;

{將找出的兩棵子樹合并為一棵子樹}

HuffNode[x1].parent:=n i; HuffNode[x2].parent:=n i;

HuffNode[n i].weight:= HuffNode[x1].weight HuffNode[x2].weight;

HuffNode[n i].lchild:=x1; HuffNode[n i].rchild:=x2;

end;

end;

最優(yōu)二叉樹算法基本概念常見問(wèn)題

  • 樹和二叉樹的基本知識(shí)?

    二叉樹在計(jì)算機(jī)科學(xué)中,二叉樹是每個(gè)結(jié)點(diǎn)最多有兩個(gè)子樹的有序樹。通常子樹的根被稱作“左子樹”(left subtree)和“右子樹”(right subtree)。二叉樹常被用作二叉查找樹和二叉堆。二叉...

  • 寬動(dòng)態(tài)的基本概念

    廣義上的“動(dòng)態(tài)范圍”是指某一變化的事物可能改變的跨度,即其變化值的最低端極點(diǎn)到最高端極點(diǎn)之間的區(qū)域,此區(qū)域的描述一般為最高點(diǎn)與最低點(diǎn)之間的差值。這是一個(gè)應(yīng)用非常廣泛的概念,在談及攝像機(jī)產(chǎn)品的拍攝圖像指...

  • 飯店的基本概念是什么?

    1.[Hotel]∶設(shè)備好的大旅館 2.[Restaurant]∶飯館。[1] 一般有兩種解釋:〈1〉多數(shù)漢語(yǔ)詞典之類的語(yǔ)文工具書解釋為規(guī)模較大,內(nèi)部設(shè)施優(yōu)良,能提供食宿的場(chǎng)所,類似的名稱有賓館,酒店...

在數(shù)據(jù)通訊中,經(jīng)常需要將傳送的文字轉(zhuǎn)換成由二進(jìn)制字符0,1組成的二進(jìn)制串,我們稱之為編碼。例如,假設(shè)要傳送的電文為ABACCDA,電文中只含有A,B,C,D四種字符,若這四種字符采用表7.3 (a)所示的編碼,則電文的代碼為000010000100100111 000,長(zhǎng)度為21。在傳送電文時(shí),我們總是希望傳送時(shí)間盡可能短,這就要求電文代碼盡可能短,顯然,這種編碼方案產(chǎn)生的電文代碼不夠短。表7.3 (b)所示為另一種編碼方案,用此編碼對(duì)上述電文進(jìn)行編碼所建立的代碼為00010010101100,長(zhǎng)度為14。在這種編碼方案中,四種字符的編碼均為兩位,是一種等長(zhǎng)編碼。如果在編碼時(shí)考慮字符出現(xiàn)的頻率,讓出現(xiàn)頻率高的字符采用盡可能短的編碼,出現(xiàn)頻率低的字符采用稍長(zhǎng)的編碼,構(gòu)造一種不等長(zhǎng)編碼,則電文的代碼就可能更短。如當(dāng)字符A,B,C,D采用表7.3 (c)所示的編碼時(shí),上述電文的代碼為0110010101110,長(zhǎng)度僅為13。

表a、表b、表c、表d(從下圖的上下順序依次列出)

字符

編碼

A

000

B

010

C

100

D

111

字符

編碼

A

00

B

01

C

10

D

11

字符

編碼

A

0

B

110

C

10

D

111

字符

編碼

A

01

B

010

C

001

D

10

表3 字符的四種不同的編碼方案

哈夫曼樹可用于構(gòu)造使電文的編碼總長(zhǎng)最短的編碼方案。具體做法如下:設(shè)需要編碼的字符集合為{d1,d2,…,dn},它們?cè)陔娢闹谐霈F(xiàn)的次數(shù)或頻率集合為{w1,w2,…,wn},以d1,d2,…,dn作為葉結(jié)點(diǎn),w1,w2,…,wn作為它們的權(quán)值,構(gòu)造一棵哈夫曼樹,規(guī)定哈夫曼樹中的左分支代表0,右分支代表1,則從根結(jié)點(diǎn)到每個(gè)葉結(jié)點(diǎn)所經(jīng)過(guò)的路徑分支組成的0和1的序列便為該結(jié)點(diǎn)對(duì)應(yīng)字符的編碼,我們稱之為哈夫曼編碼。

在哈夫曼編碼樹中,樹的帶權(quán)路徑長(zhǎng)度的含義是各個(gè)字符的碼長(zhǎng)與其出現(xiàn)次數(shù)的乘積之和,也就是電文的代碼總長(zhǎng),所以采用哈夫曼樹構(gòu)造的編碼是一種能使電文代碼總長(zhǎng)最短的不等長(zhǎng)編碼。

在建立不等長(zhǎng)編碼時(shí),必須使任何一個(gè)字符的編碼都不是另一個(gè)字符編碼的前綴,這樣才能保證譯碼的唯一性。例如表7.3 (d)的編碼方案,字符A的編碼01是字符B的編碼010的前綴部分,這樣對(duì)于代碼串0101001,既是AAC的代碼,也是ABD和BDA的代碼,因此,這樣的編碼不能保證譯碼的唯一性,我們稱之為具有二義性的譯碼。

然而,采用哈夫曼樹進(jìn)行編碼,則不會(huì)產(chǎn)生上述二義性問(wèn)題。因?yàn)?,在哈夫曼樹中,每個(gè)字符結(jié)點(diǎn)都是葉結(jié)點(diǎn),它們不可能在根結(jié)點(diǎn)到其它字符結(jié)點(diǎn)的路徑上,所以一個(gè)字符的哈夫曼編碼不可能是另一個(gè)字符的哈夫曼編碼的前綴,從而保證了譯碼的非二義性。

下面討論實(shí)現(xiàn)哈夫曼編碼的算法。實(shí)現(xiàn)哈夫曼編碼的算法可分為兩大部分:

(1)構(gòu)造哈夫曼樹;

(2)在哈夫曼樹上求葉結(jié)點(diǎn)的編碼。

求哈夫曼編碼,實(shí)質(zhì)上就是在已建立的哈夫曼樹中,從葉結(jié)點(diǎn)開始,沿結(jié)點(diǎn)的雙親鏈域回退到根結(jié)點(diǎn),每回退一步,就走過(guò)了哈夫曼樹的一個(gè)分支,從而得到一位哈夫曼碼值,由于一個(gè)字符的哈夫曼編碼是從根結(jié)點(diǎn)到相應(yīng)葉結(jié)點(diǎn)所經(jīng)過(guò)的路徑上各分支所組成的0,1序列,因此先得到的分支代碼為所求編碼的低位碼,后得到的分支代碼為所求編碼的高位碼。我們可以設(shè)置一結(jié)構(gòu)數(shù)組HuffCode用來(lái)存放各字符的哈夫曼編碼信息,數(shù)組元素的結(jié)構(gòu)如下:

bit

start

其中,分量bit為一維數(shù)組,用來(lái)保存字符的哈夫曼編碼,start表示該編碼在數(shù)組bit中的開始位置。所以,對(duì)于第i個(gè)字符,它的哈夫曼編碼存放在HuffCode.bit中的從HuffCode.start到n的分量上。

求哈夫曼編碼程序段

const Maxleaf=128; {定義最多葉結(jié)點(diǎn)數(shù)}

MaxNode=255; {定義最大結(jié)點(diǎn)數(shù)}

MaxBit=10; {定義哈夫曼編碼的最大長(zhǎng)度}

type HCodeType =record

bit: array[0..MaxBit] of integer;

start: integer;

end;

……

procedure HaffmanCode ; {生成哈夫曼編碼}

var HuffNode: array[0..MaxNode] of HCodeType;

HuffCode: array[0..MaxLeaf] of HcodeType;

cd : HcodeType ;

i,j, c,p: integer ;

begin

HuffmanTree (HuffNode ); {建立哈夫曼樹}

for i:=0 to n-1 do {求每個(gè)葉子結(jié)點(diǎn)的哈夫曼編碼}

begin

cd.start:=n-1; c:=i;

p:=HuffNode[c].parent;

while p<>0 do {由葉結(jié)點(diǎn)向上直到樹根}

if HuffNode

.lchild=c then cd.bit[cd.start]:=0

else cd.bit[cd.start]:=1;

dec (cd.start); c:=p;

p:=HuffNode[c].parent;

end;

for j:=cd.start 1 to n-1 do {保存求出的每個(gè)葉結(jié)點(diǎn)的哈夫曼編碼和編碼的起始位}

begin

HuffCode.bit[j]:=cd.bit[j];

HuffCode.start=cd.start;

end;

for i:=0 to n-1 do {輸出每個(gè)葉子結(jié)點(diǎn)的哈夫曼編碼}

begin

for j:=HuffCode.start 1 to n-1 do write(HuffCode.bit[j]:10);

writeln;

end;

end;

在本章的引入部分,兩個(gè)例子都是判定問(wèn)題,這兩個(gè)判定問(wèn)題都可以通過(guò)構(gòu)造哈夫曼樹來(lái)優(yōu)化判定,以達(dá)到總的判定次數(shù)最少。

再如,要編制一個(gè)將百分制轉(zhuǎn)換為五級(jí)分制的程序。顯然,此程序很簡(jiǎn)單,只要利用條件語(yǔ)句便可完成。

程序段

if a<60 then b:='bad'

else if a<70 then b:='pass'

else if a<80 then b:='general'

else if a<90 then b:='good'

else b:='excellent';

如果上述程序需反復(fù)使用,而且每次的輸入量很大,則應(yīng)考慮上述程序的質(zhì)量問(wèn)題,即其操作所需要的時(shí)間。因?yàn)樵趯?shí)際中,學(xué)生的成績(jī)?cè)谖鍌€(gè)等級(jí)上的分布是不均勻的,假設(shè)其分布規(guī)律如表4所示:

分?jǐn)?shù)

0-59

60-69

70-79

80-89

90-100

比例數(shù)

0.05

0.15

0.40

0.30

0.10

表4 分?jǐn)?shù)段的分布頻率

則80%以上的數(shù)據(jù)需進(jìn)行三次或三次以上的比較才能得出結(jié)果。假定以5,15,40,30和10為權(quán)構(gòu)造一棵有五個(gè)葉子結(jié)點(diǎn)的哈夫曼樹,它可使大部分的數(shù)據(jù)經(jīng)過(guò)較少的比較次數(shù)得出結(jié)果。但由于每個(gè)判定框都有兩次比較,將這兩次比較分開,得到新的判定樹,按此判定樹可寫出相應(yīng)的程序。請(qǐng)您自己畫出此判定樹。

假設(shè)有10000個(gè)輸入數(shù)據(jù),若上程序段的判定過(guò)程進(jìn)行操作,則總共需進(jìn)行31500次比較;而若新判定樹的判定過(guò)程進(jìn)行操作,則總共僅需進(jìn)行22000次比較。

最優(yōu)二叉樹算法基本概念文獻(xiàn)

支持向量機(jī)的二叉樹多分類算法在變壓器故障診斷中的應(yīng)用 支持向量機(jī)的二叉樹多分類算法在變壓器故障診斷中的應(yīng)用

格式:pdf

大?。?span id="xt7jbpr" class="single-tag-height">276KB

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

評(píng)分: 4.4

支持向量機(jī)最初只能用以解決二分類問(wèn)題,對(duì)于多類故障,只能通過(guò)組合二分類器間接應(yīng)用于多類分類問(wèn)題。本文提出一種基于二叉樹多分類算法對(duì)變壓器中常見故障進(jìn)行了模式識(shí)別,并與傳統(tǒng)多分類算法作對(duì)比。根據(jù)svm理論結(jié)合二叉樹方法建立變壓器故障診斷模型,通過(guò)VS2008對(duì)其進(jìn)行了驗(yàn)證,結(jié)果表明該方法能有效地、準(zhǔn)確地識(shí)別故障模式,具有較高的推廣性。

立即下載
一種基于有序二叉樹的變量池的設(shè)計(jì)和應(yīng)用 一種基于有序二叉樹的變量池的設(shè)計(jì)和應(yīng)用

格式:pdf

大?。?span id="rvpbb11" class="single-tag-height">276KB

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

評(píng)分: 4.8

分層模式在軟件開發(fā)中有著廣泛的應(yīng)用,必然使各層之間產(chǎn)生頻繁的數(shù)據(jù)交互,從而導(dǎo)致軟件性能大大下降。針對(duì)上述問(wèn)題,本文提出一種基于有序二叉樹的變量池的解決方案,軟件的配置信息以及各層之間的交互數(shù)據(jù)保存在變量池中,對(duì)變量的所有操作都基于變量池,通過(guò)變量池的使用,既方便了各層之間數(shù)據(jù)交互,也簡(jiǎn)化了各層之間的接口設(shè)計(jì)?;谠摲桨?本文最后實(shí)現(xiàn)了一個(gè)銀行自助終端系統(tǒng)。

立即下載

如果一棵具有n個(gè)結(jié)點(diǎn)的深度為k的二叉樹,它的每一個(gè)結(jié)點(diǎn)都與深度為k的滿二叉樹中編號(hào)為1~n的結(jié)點(diǎn)一一對(duì)應(yīng),這棵二叉樹稱為完全二叉樹。

可以根據(jù)公式進(jìn)行推導(dǎo),假設(shè)n0是度為0的結(jié)點(diǎn)總數(shù)(即葉子結(jié)點(diǎn)數(shù)),n1是度為1的結(jié)點(diǎn)總數(shù),n2是度為2的結(jié)點(diǎn)總數(shù),則 ①n= n0+n1+n2 (其中n為完全二叉樹的結(jié)點(diǎn)總數(shù));又因?yàn)橐粋€(gè)度為2的結(jié)點(diǎn)會(huì)有2個(gè)子結(jié)點(diǎn),一個(gè)度為1的結(jié)點(diǎn)會(huì)有1個(gè)子結(jié)點(diǎn),除根結(jié)點(diǎn)外其他結(jié)點(diǎn)都有父結(jié)點(diǎn),所以②n= 1+n1+2*n2 ;由①、②兩式把n2消去得:n= 2*n0+n1-1,由于完全二叉樹中度為1的結(jié)點(diǎn)數(shù)只有兩種可能0或1,由此得到n0=n/2 或 n0=(n+1)/2。

簡(jiǎn)便來(lái)算,就是 n0=n/2,其中n為奇數(shù)時(shí)(n1=0)向上取整;n為偶數(shù)時(shí)(n1=1)??筛鶕?jù)完全二叉樹的結(jié)點(diǎn)總數(shù)計(jì)算出葉子結(jié)點(diǎn)數(shù)。

由于網(wǎng)絡(luò)所有可能的劃分?jǐn)?shù)量是巨大的,假設(shè)網(wǎng)絡(luò)的結(jié)點(diǎn)數(shù)和邊數(shù)分別為n和m,則所有可能的社區(qū)劃分?jǐn)?shù)是一個(gè)以n為指數(shù)的數(shù)。因此,在所有可能的劃分中找出最優(yōu)劃分是一個(gè)NP-hard問(wèn)題。針對(duì)這一問(wèn)題,目前一些相應(yīng)算法已被提出,其可以在合理的時(shí)間內(nèi)找出模塊度最大化的近似最優(yōu)劃分。

經(jīng)典貪心算法

模塊度最大化問(wèn)題是一個(gè)經(jīng)典的最優(yōu)化問(wèn)題,Mark NewMan 基于貪心思想提出了模塊度最大化的貪心算法FN 。貪心思想的目標(biāo)是找出目標(biāo)函數(shù)的整體最優(yōu)值或者近似最優(yōu)值,它將整體最優(yōu)化問(wèn)題分解為局部最優(yōu)化問(wèn)題,找出每個(gè)局部最優(yōu)值,最終將局部最優(yōu)值整合成整體的近似最優(yōu)值。FN算法將模塊度最優(yōu)化問(wèn)題分解為模塊度局部最優(yōu)化問(wèn)題,初始時(shí),算法將網(wǎng)絡(luò)中的每個(gè)結(jié)點(diǎn)都看成獨(dú)立的小社區(qū)。然后,考慮所有相連社區(qū)兩兩合并的情況,計(jì)算每種合并帶來(lái)的模塊度的增量?;谪澬脑瓌t,選取使模塊度增長(zhǎng)最大或者減小最少的兩個(gè)社區(qū),將它們合并成一個(gè)社區(qū)。如此循環(huán)迭代,直到所有結(jié)點(diǎn)合并成一個(gè)社區(qū)。隨著迭代的進(jìn)行,網(wǎng)絡(luò)總的模塊度是不斷變化的,在模塊度的整個(gè)變化過(guò)程中,其最大值對(duì)應(yīng)網(wǎng)絡(luò)的社區(qū)劃分即為近似的最優(yōu)社區(qū)劃分。

貪心算法FN具體步驟:

去掉網(wǎng)絡(luò)中所有的邊,網(wǎng)絡(luò)的每個(gè)結(jié)點(diǎn)都單獨(dú)作為一個(gè)社區(qū);網(wǎng)絡(luò)中的每個(gè)連通部分作為一個(gè)社區(qū),將還未加入網(wǎng)絡(luò)的邊分別重新加回網(wǎng)絡(luò),每次加入一條邊,如果加入網(wǎng)絡(luò)的邊連接了兩個(gè)不同的社區(qū),則合并兩個(gè)社區(qū),并計(jì)算形成新社區(qū)劃分的模塊度增量。選擇使模塊度增量最大或者減小最少的兩個(gè)社區(qū)進(jìn)行合并。如果網(wǎng)絡(luò)的社區(qū)數(shù)大于1,則返回步驟(2)繼續(xù)迭代,否則轉(zhuǎn)到步驟(4);遍歷每種社區(qū)劃分對(duì)應(yīng)的模塊度值,選取模塊度最大的社區(qū)劃分作為網(wǎng)絡(luò)的最優(yōu)劃分。

該算法中,需要注意的是,每次加入的邊只是影響網(wǎng)絡(luò)的社區(qū)劃分,而每次計(jì)算網(wǎng)絡(luò)劃分的模塊度時(shí),都是在網(wǎng)絡(luò)完整的拓?fù)浣Y(jié)構(gòu)上進(jìn)行,即網(wǎng)絡(luò)所有的邊都存在的拓?fù)浣Y(jié)構(gòu)上。

快速模塊度優(yōu)化算法

為了降低算法的時(shí)間復(fù)雜度,Vincent Blondel等人提出了另一種層次貪心算法 。該算法包括兩個(gè)階段,第一階段合并社區(qū),算法將每個(gè)結(jié)點(diǎn)當(dāng)作一個(gè)社區(qū),基于模塊度增量最大化標(biāo)準(zhǔn)決定你哪些鄰居社區(qū)應(yīng)該被合并。經(jīng)過(guò)一輪掃描后開始第二階段,算法將第一階段發(fā)現(xiàn)的所有社區(qū)重新看成結(jié)點(diǎn),構(gòu)建新的網(wǎng)絡(luò),在新網(wǎng)絡(luò)上重復(fù)進(jìn)行第一階段,這兩個(gè)階段重復(fù)運(yùn)行,直到網(wǎng)絡(luò)社區(qū)劃分的模塊度不再增長(zhǎng),得到網(wǎng)絡(luò)的社區(qū)近似最優(yōu)劃分。

這個(gè)簡(jiǎn)單算法具有一下幾個(gè)優(yōu)點(diǎn):首先,算法的步驟比較直觀并且易于實(shí)現(xiàn);其次,算法不需要提前設(shè)定網(wǎng)絡(luò)的社區(qū)數(shù),并且該算法可以呈現(xiàn)網(wǎng)絡(luò)的完整的分層社區(qū)結(jié)構(gòu),能夠發(fā)現(xiàn)在線社交網(wǎng)絡(luò)的分層的虛擬社區(qū)結(jié)構(gòu),獲得不同分辨率的虛擬社區(qū);再次,計(jì)算機(jī)模擬實(shí)驗(yàn)顯示,在稀疏網(wǎng)絡(luò)上,算法是時(shí)間復(fù)雜度是線性的,在合理的時(shí)間內(nèi)可以處理結(jié)點(diǎn)數(shù)超過(guò)10^9的網(wǎng)絡(luò),因此十分適合在線社交網(wǎng)絡(luò)這樣超大規(guī)模的負(fù)責(zé)網(wǎng)絡(luò)中虛擬社區(qū)的發(fā)現(xiàn)。

是程序算法中的一種算法模式。

在二叉樹中出現(xiàn)空的子樹(包括樹葉)上增加空的樹葉,使其成為滿二叉樹的二叉樹稱之為擴(kuò)充二叉樹。

最優(yōu)二叉樹算法相關(guān)推薦
  • 相關(guān)百科
  • 相關(guān)知識(shí)
  • 相關(guān)專欄

最新詞條

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