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

在構(gòu)造哈夫曼樹(shù)時(shí),可以設(shè)置一個(gè)結(jié)構(gòu)數(shù)組HuffNode保存哈夫曼樹(shù)中各結(jié)點(diǎn)的信息,根據(jù)二叉樹(shù)的性質(zhì)可知,具有n個(gè)葉子結(jié)點(diǎn)的哈夫曼樹(shù)共有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)是否已加入到要建立的哈夫曼樹(shù)中,可通過(guò)parent域的值來(lái)確定。初始時(shí)parent的值為-1,當(dāng)結(jié)點(diǎn)加入到樹(shù)中時(shí),該結(jié)點(diǎn)parent的值為其雙親結(jié)點(diǎn)在數(shù)組HuffNode中的序號(hào),就不會(huì)是-1了。

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

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

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

maxleat=30; {定義哈夫曼樹(shù)中葉子結(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); {哈夫曼樹(shù)的構(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)造哈夫曼樹(shù)}

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;

{將找出的兩棵子樹(shù)合并為一棵子樹(shù)}

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)二叉樹(shù)算法造價(jià)信息

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

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

金九方

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

比特利

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

比特利

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

比特利

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

比特利

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

比特利

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

比特利

13% 重慶比特利建材有限公司
材料名稱(chēng) 規(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à)
材料名稱(chēng) 規(guī)格/需求量 報(bào)價(jià)數(shù) 最新報(bào)價(jià)
(元)
供應(yīng)商 報(bào)價(jià)地區(qū) 最新報(bào)價(jià)時(shí)間
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
客流算法授權(quán) 客流分析算法授權(quán)|109路 2 查看價(jià)格 廣州天銳信息工程有限公司 全國(guó)   2021-05-31
二叉 S-8|3645塊 1 查看價(jià)格 大連東方泰陶建材經(jīng)銷(xiāo)部 遼寧  大連市 2015-11-24
人臉算法授權(quán) 人臉算法,按照接入路數(shù)收費(fèi),前端抓拍機(jī)數(shù)量|1000路 1 查看價(jià)格 廣州帝視尼電子科技有限公司 廣東   2019-10-30
二叉噴頭 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

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

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

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

在前面我們介紹過(guò)路徑和結(jié)點(diǎn)的路徑長(zhǎng)度的概念,而二叉樹(shù)的路徑長(zhǎng)度則是指由根結(jié)點(diǎn)到所有葉結(jié)點(diǎn)的路徑長(zhǎng)度之和。如果二叉樹(shù)中的葉結(jié)點(diǎn)都具有一定的權(quán)值,則可將這一概念加以推廣。設(shè)二叉樹(shù)具有n個(gè)帶權(quán)值的葉結(jié)點(diǎn),那么從根結(jié)點(diǎn)到各個(gè)葉結(jié)點(diǎn)的路徑長(zhǎng)度與相應(yīng)結(jié)點(diǎn)權(quán)值的乘積之和叫做二叉樹(shù)的帶權(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所示的二叉樹(shù),它的帶權(quán)路徑長(zhǎng)度值WPL=2×2+4×2+5×2+3×2=28。

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

這五棵樹(shù)的帶權(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)二叉樹(shù)算法

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

由此可見(jiàn),由相同權(quán)值的一組葉子結(jié)點(diǎn)所構(gòu)成的二叉樹(shù)有不同的形態(tài)和不同的帶權(quán)路徑長(zhǎng)度,那么如何找到帶權(quán)路徑長(zhǎng)度最小的二叉樹(shù)(即哈夫曼樹(shù))呢?根據(jù)哈夫曼樹(shù)的定義,一棵二叉樹(shù)要使其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)的二叉樹(shù),從而得到一個(gè)二叉樹(shù)的集合F={T1,T2,…,Tn};

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

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

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

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

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

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

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

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

運(yùn)距(公里)

首重1000克

5000克以?xún)?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ù),但不同的二叉樹(shù)判定的次數(shù)可能不一樣,執(zhí)行的效率也不同。

鐵球分類(lèi)

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

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

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

兩種判斷二叉樹(shù)示意圖

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

假設(shè)有1000個(gè)鐵球,則各類(lèi)鐵球的個(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ù)比較次數(shù)

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

最優(yōu)二叉樹(shù)算法構(gòu)造算法常見(jiàn)問(wèn)題

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

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

  • 構(gòu)造柱算法

    有砌體墻的地方才有構(gòu)造柱,構(gòu)造柱可以在基礎(chǔ)梁,地框梁或基礎(chǔ)連梁上生根。 回復(fù):具體要依據(jù)設(shè)計(jì),一般是要設(shè)置的。

  • 構(gòu)造柱的算法

    各地定額不一樣?計(jì)算規(guī)則也不一定相同?山東計(jì)價(jià)定額是截面面積加馬牙槎乘以設(shè)計(jì)高度以立方米計(jì)算。比如:主截面為240*240,單面馬牙槎60,計(jì)算式應(yīng)是:(0.24*0.24+0.24*0.03)*高度

在數(shù)據(jù)通訊中,經(jīng)常需要將傳送的文字轉(zhuǎn)換成由二進(jìn)制字符0,1組成的二進(jìn)制串,我們稱(chēng)之為編碼。例如,假設(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 字符的四種不同的編碼方案

哈夫曼樹(shù)可用于構(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)造一棵哈夫曼樹(shù),規(guī)定哈夫曼樹(shù)中的左分支代表0,右分支代表1,則從根結(jié)點(diǎn)到每個(gè)葉結(jié)點(diǎn)所經(jīng)過(guò)的路徑分支組成的0和1的序列便為該結(jié)點(diǎn)對(duì)應(yīng)字符的編碼,我們稱(chēng)之為哈夫曼編碼。

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

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

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

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

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

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

求哈夫曼編碼,實(shí)質(zhì)上就是在已建立的哈夫曼樹(shù)中,從葉結(jié)點(diǎn)開(kāi)始,沿結(jié)點(diǎn)的雙親鏈域回退到根結(jié)點(diǎn),每回退一步,就走過(guò)了哈夫曼樹(shù)的一個(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中的開(kāi)始位置。所以,對(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 ); {建立哈夫曼樹(shù)}

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)向上直到樹(shù)根}

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)造哈夫曼樹(shù)來(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ù),它可使大部分的數(shù)據(jù)經(jīng)過(guò)較少的比較次數(shù)得出結(jié)果。但由于每個(gè)判定框都有兩次比較,將這兩次比較分開(kāi),得到新的判定樹(shù),按此判定樹(shù)可寫(xiě)出相應(yīng)的程序。請(qǐng)您自己畫(huà)出此判定樹(shù)。

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

最優(yōu)二叉樹(shù)算法構(gòu)造算法文獻(xiàn)

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

格式:pdf

大小:276KB

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

評(píng)分: 4.4

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

立即下載
有標(biāo)底招投標(biāo)中最優(yōu)報(bào)價(jià)的算法分析 有標(biāo)底招投標(biāo)中最優(yōu)報(bào)價(jià)的算法分析

格式:pdf

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

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

評(píng)分: 4.8

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

可以根據(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為完全二叉樹(shù)的結(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,由于完全二叉樹(shù)中度為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ù)完全二叉樹(shù)的結(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ò)一輪掃描后開(kāi)始第二階段,算法將第一階段發(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)。

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

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

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

最新詞條

安徽省政采項(xiàng)目管理咨詢(xún)有限公司 數(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)咨詢(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)代理有限公司