久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

算法—>回溯法

作者:huqin   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月17日   【字體:

設(shè)問:某人要從a路口經(jīng)過4個(gè)路口(含起始路口和目的路口)到達(dá)b路口,已知該地區(qū)的道路有一個(gè)特點(diǎn):除起點(diǎn)和終點(diǎn)外,每個(gè)路口都有三條叉路。請找出一條可行的路線。
首先,我們應(yīng)該分析出我們所能找到的有關(guān)信息:
1、從起始地到目的地一共有4個(gè)路口;
2、除起點(diǎn)和終點(diǎn)外,每個(gè)路口都有三條叉路;
要解決這一問題,首先我們應(yīng)該將地形圖轉(zhuǎn)換為較規(guī)范的路徑圖,其中路徑圖中的結(jié)點(diǎn)對應(yīng)地圖的路口,路徑圖中的連線對應(yīng)地圖的路;然后嘗試著找出某種規(guī)則進(jìn)行路的探求。當(dāng)在某個(gè)路口走不通時(shí)就回頭另找一條新的路,當(dāng)發(fā)現(xiàn)了目標(biāo)地址就可以停止尋找。
從問題的某一種可能情況出發(fā), 搜索所有能達(dá)到的可能情況,然后再以其中的一種可能情況為新的出發(fā)點(diǎn),繼續(xù)向下探求,這樣就走出了一條“路”。當(dāng)這一條路走到“ 盡頭”的時(shí)候, 再倒回上個(gè)出發(fā)點(diǎn), 從另一個(gè)可能情況出發(fā), 繼續(xù)搜索。這種不斷“回溯”尋找目標(biāo)的方法, 稱作“回溯法”。
回溯法的基本思想是窮舉搜索。一般適用于尋找解集或找出滿足某些約束條件的最優(yōu)解的問題。這些問題所具有的共性是順序性,即必須先探求第一個(gè)步,確定第一步采取的可能值,再探求第二個(gè)步采取的可能值,然后是第三步,……,直到達(dá)到目標(biāo)狀態(tài)。
結(jié)合設(shè)問,我們很容易找出問題所涉及到的數(shù)據(jù)與路徑圖之間的對應(yīng)關(guān)系:路口所在的層數(shù)表示探求步數(shù)對應(yīng)的編號,每個(gè)路口的分叉表示從該情況出發(fā)所有可能的情況。
在數(shù)據(jù)的具體描述中,為體現(xiàn)探求步驟的順序性,可以將層數(shù)用整數(shù)來表示;為表示每個(gè)出發(fā)點(diǎn)的規(guī)律性,我們通常將情況歸納一下,并用順序出現(xiàn)的整數(shù)表示。
對于每個(gè)路口而言,其分叉的形式應(yīng)是一致的。因此通常情況下我們用整數(shù)來表示,由于每個(gè)路口都有三個(gè)分叉,那么我們可以根據(jù)分叉出現(xiàn)的順序從左向右依次用整數(shù)1,2,3進(jìn)行編號就可以了。
在程序中我們可以用數(shù)組a存放路徑,其中下標(biāo)表示探求的步數(shù)編號,數(shù)組元素a[k]的值表示在第k步所采取的可能值的編號。這樣對路的探求方法都可以用以下的代碼表示:
procedure find (k:integer); {找第k步的可能性}
begin
if 到目的地 {表示一條路已找出}
then
begin
輸出路線;
結(jié)束探求
end
else
if k<=4
then
for i:=1 to 3 do {窮舉三種可能的方向并記錄下來}
begin
    a[k]:=i;
find(k+1)
end
end;
由此可知,根據(jù)每個(gè)結(jié)點(diǎn)探求具有共性這個(gè)特點(diǎn),在實(shí)現(xiàn)中我們通常采用遞歸的算法來實(shí)現(xiàn)回溯策略。下面給出的是對于該遞歸算法的非遞歸代碼:
begin
a[1]:=1;k:=1; {確定起步的路口號及尋找的初始方向}
while 未到目的地 do
begin
while a[k] 無路可走 do {回溯,返回第K-1個(gè)路口,另找一條路}
begin
k:=k-1;
a[k]:=a[k]+1
end;
k:=k+1;a[k]:=1; {設(shè)定從K+1個(gè)路口開始尋找的初始方向}
end;
輸出路線;
end;
通過觀察,我們可以發(fā)現(xiàn)實(shí)現(xiàn)回溯算法的特性:在解決過程中首先必須要先為問題定義一個(gè)解的空間,這個(gè)空間必須包含問題的一個(gè)解。在搜索路的同時(shí)也就產(chǎn)生了新的解空間。在搜索期間的任何時(shí)刻,僅保留從起始點(diǎn)到當(dāng)前點(diǎn)的路徑。因此,回溯算法的空間需求為O(從開始節(jié)點(diǎn)起最長路徑的長度)。
回溯的策略是一種常見的策略。它可以避免對規(guī)模很大的候選解進(jìn)行一次性檢查,因此適用于一些求解規(guī)模很大的問題。在具體實(shí)現(xiàn)過程中我們應(yīng)該以找出解題方法與路徑圖對應(yīng)的數(shù)據(jù)關(guān)系為切入口,使用遞歸的算法加以實(shí)現(xiàn)。使用回溯策略,我們通常解決自然數(shù)的排列、n皇后問題、迷宮問題、數(shù)的拆分、0/1背包問題、旅行商問題、貨船裝貨和圖形覆蓋正方形等問題。

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 亚洲免费视频一区 | 久久久久久久夜 | 99亚洲精品 | 国产精品成人久久久久 | 欧美大片在线观看 | 免费一区二区三区 | 欧美精品久久久 | 成在线人视频免费视频 | 午夜视频免费在线观看 | 久久99精品视频 | 美女黄频 | 91精品一区二区三区久久久久久 | 羞羞免费网站 | 在线视频第一页 | 亚洲欧美视频一区 | 国产精品电影网 | 美女黄网站视频免费 | av黄在线观看 | 亚洲精品天堂 | 国产精品毛片 | 91爱爱·com | 国产精品免费高清 | 精品美女视频在免费观看 | 岛国视频 | 日本在线播放一区二区 | 久久精品免费 | 国产精品毛片一区二区在线看 | 欧美色综合一区二区三区 | 日本三级全黄三级三级三级口周 | 国产精品久久毛片av大全日韩 | 羞羞视频网站免费观看 | 久草在线中文888 | 欧美日一区二区 | 欧美啪啪| 亚洲成人一区二区 | 欧美老妇交乱视频 | 日韩欧美国产一区二区三区 | 久久激情视频 | 日日摸夜夜爽人人添av | 国产剧情一区 | 日本 欧美 三级 高清 视频 |