當前位置:首頁 > 物聯(lián)網(wǎng) > 《物聯(lián)網(wǎng)技術(shù)》雜志
[導(dǎo)讀]摘要:對漢諾塔問題的算法進行了具體分析,提出了四種不同的經(jīng)典算法,并通過對此問題給出不同的算法,以期激發(fā)出學習者對經(jīng)典漢諾塔問題新算法的探究熱情。

引言

大約在19世紀末,在歐州的商店中出售了一種智力玩具,該玩具在一塊銅板上有3根桿,最左邊的桿上自上而下、由小到大順序串著由64個圓盤構(gòu)成的塔,其目的是將最左邊桿上的盤全部移到右邊的桿上,條件是一次只能移動一個盤,且不允許大盤放在小盤的上面。

1問題分析與算法設(shè)計

漢諾塔(Hanoi)問題是一個著名的問題。64個圓盤按從小到大的順序依次套在柱x上,如圖1所示。規(guī)定每次只能從一根柱子上搬動一個圓盤到另一根柱子上,且要求在搬動過程中不許大盤放在小盤上,且只有x、y、z三根柱子可供使用。

對漢諾塔(Hanoi)問題的算法探索與研究

由于一次只能移動一個盤,且不允許大盤放在小盤上面,所以64個盤的移動次數(shù)是1844674407370955615。

這是一個天文數(shù)字,若1us可計算(并不輸出)一次移動,那么也需要幾乎一百萬年。我們僅能找出問題的解決方法并解決較小N值時的漢諾塔問題,但很難用計算機解決64層的漢諾塔問題。

針對具體問題,我們必須找出移動盤子的正確算法。首先考慮x桿下面的盤子而非桿上最上面的盤子,于是任務(wù)變成:

將上面的63個盤子移到y(tǒng)桿上;

將x桿上剩下的盤子移到z桿上;

將y桿上的全部盤子移到z桿上。

將這個過程繼續(xù)下去,就是要先完成移動63個盤子、62個盤子、61個盤子……的工作。為了更清楚地描述算法,可以定義一個函數(shù)movedisc(n,a,b,c)。該函數(shù)的功能是:將N個盤子從x桿上借助z桿移動到y(tǒng)桿上。這樣,移動N個盤子的工作就可以按照以下過程進行:

movedisc(n-1,x,y,z);

將一個盤子從x移到y(tǒng)上;

movedisc(n-1,z,y,x);

重復(fù)以上過程,直到將全部的盤子移動到位時為止。

2漢諾塔問題算法

下面是基于三種語言的漢諾塔算法實現(xiàn)程序。

(1)基于C語言的漢諾塔的算法實現(xiàn)程序如下:

voidhanoi(intn,charx,chary,charz)

{

if(n==1)

move(x,1,z);

else{

hanoi(n-1,x,z,y);

move(x,n,z);

hanoi(n-1,y,x,z);

}

}

⑵基于C++的漢諾塔的算法實現(xiàn)程序如下:

voidMove(inti,charx,chary)

{

fout?"把"《i?"號從"《x?"挪動到”《y?endl;

}

voidHannoi(intn,charx,chary,charz)

{

if(n==1)

Move(1,x,z),

else

{

Hannoi(n-1,x,z,y);Move(n,x,z);

Hannoi(n-1,y,x,z);

}

}

intmain()

{

fout<<"下面是7層漢諾塔的解法:"<<endl;Hannoi(7,'x','y','z');

fout.close();

cout<<"輸出完畢!”《endl;return0;

}

(3)基于Java的漢諾塔的算法實現(xiàn)程序如下:publicclassHanoiTower{

staticintnDisks=3;

publicstaticvoidmain(String[]args){hanoiTower(nDisks,'x','y','z');

}

publicstaticvoidhanoiTower(inttopN,charsrc,charinter,chardest){

if(topN==1)

System.out.println("Disk1from"+src+"to"+dest);

else{

//srctointerhanoiTower(topN-1,src,dest,inter);

//movebottom

System.out.println("Disk"+topN+"from"+src+"to"+dest);

//intertodesthanoiTower(topN-1,inter,src,dest);

}

}

}

3用組合數(shù)學的思想來分析漢諾塔問題的算法

漢諾塔問題也是組合數(shù)學中著名的問題,用組合數(shù)學的思想分析如圖2所示。

對漢諾塔(Hanoi)問題的算法探索與研究

2基于組合數(shù)

假設(shè)/=1,但=3,對于任何nN3,那么:可以作如下設(shè)計:

第一步,將套在柱x的上部的n—1個盤按要求移到柱y上,共搬動了次;

第二步,將柱x上的最大一個盤移到柱z上,只要搬動1次;

第三步,再從柱y將n-1個盤按要求移到柱z上,也要用an-1次。

則由加法法則,{an}滿足:

對漢諾塔(Hanoi)問題的算法探索與研究

3結(jié)語

漢諾塔問題是一個古老的數(shù)學問題,本文給出了四種不同的的經(jīng)典算法,這幾種算法的優(yōu)點是邏輯清晰、易于理解、可讀性好、算法語句少,有助于讀者更好地對漢諾塔問題進行分析和探究。

20211022_6172dcded1f07__對漢諾塔

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉