亚洲国产区中文,国产精品91高清,亚洲精品中文字幕久久久久,亚洲欧美另类久久久精品能播放

                  族譜網(wǎng) 頭條 人物百科

                  廣度優(yōu)先搜索

                  2020-10-16
                  出處:族譜網(wǎng)
                  作者:阿族小譜
                  瀏覽:456
                  轉(zhuǎn)發(fā):0
                  評論:0
                  作法BFS是一種盲目搜尋法,目的是系統(tǒng)地展開并檢查圖中的所有節(jié)點,以找尋結(jié)果。換句話說,它并不考慮結(jié)果的可能位址,徹底地搜索整張圖,直到找到結(jié)果為止。BFS并不使用經(jīng)驗法則算法。從算法的觀點,所有因為展開節(jié)點而得到的子節(jié)點都會被加進一個先進先出的隊列中。一般的實現(xiàn)里,其鄰居節(jié)點尚未被檢驗過的節(jié)點會被放置在一個被稱為open的容器中(例如佇列或是鏈表),而被檢驗過的節(jié)點則被放置在被稱為closed的容器中。(open-closed表)實現(xiàn)方法首先將根節(jié)點放入隊列中。從隊列中取出第一個節(jié)點,并檢驗它是否為目標(biāo)。若隊列為空,表示整張圖都檢查過了——亦即圖中沒有欲搜尋的目標(biāo)。結(jié)束搜尋并回傳“找不到目標(biāo)”。重復(fù)步驟2。C的實現(xiàn)/***ADDQ(Q,p)-pPUSH入Q*DELQ(Q)-POPQ並返回Q頂*FIRSTADJ(G,v)-v的第一個鄰接點,找不到則返回-1*NEXTADJ(G,v)-v的下...

                  作法

                  BFS是一種盲目搜尋法,目的是系統(tǒng)地展開并檢查圖中的所有節(jié)點,以找尋結(jié)果。換句話說,它并不考慮結(jié)果的可能位址,徹底地搜索整張圖,直到找到結(jié)果為止。BFS并不使用經(jīng)驗法則算法。

                  從算法的觀點,所有因為展開節(jié)點而得到的子節(jié)點都會被加進一個先進先出的隊列中。一般的實現(xiàn)里,其鄰居節(jié)點尚未被檢驗過的節(jié)點會被放置在一個被稱為 open 的容器中(例如佇列或是鏈表),而被檢驗過的節(jié)點則被放置在被稱為 closed 的容器中。(open-closed表)

                  實現(xiàn)方法

                  首先將根節(jié)點放入隊列中。

                  從隊列中取出第一個節(jié)點,并檢驗它是否為目標(biāo)。

                  若隊列為空,表示整張圖都檢查過了——亦即圖中沒有欲搜尋的目標(biāo)。結(jié)束搜尋并回傳“找不到目標(biāo)”。

                  重復(fù)步驟2。

                  C 的實現(xiàn)

                  /*** ADDQ (Q, p) - p PUSH 入 Q* DELQ (Q) - POP Q 並返回 Q 頂* FIRSTADJ (G,v) - v 的第一個鄰接點,找不到則返回 -1* NEXTADJ (G,v) - v 的下一個鄰接點,找不到則返回 -1* VISIT (v) - 訪問 v* visited [] - 是否已訪問*//* 廣度優(yōu)先搜索算法 */voidBFS(VLinkG[],intv){intw;/* 訪問 v 並入隊 */VISIT(v);visited[v]=1;ADDQ(Q,v);/* 對隊列 Q 的各元素 */while(!EMPTYQ(Q)){v=DELQ(Q);w=FIRSTADJ(G,v);/* 的各鄰接點 */do{/* 進行訪問和入隊 */if(visited[w]==0){VISIT(w);ADDQ(Q,w);visited[w]=1;}}while(w=NEXTADJ(G,v))!=-1)}}/* 對圖G=(V,E)進行廣度優(yōu)先搜索的主算法 */voidTRAVEL_BFS(VLinkG[],boolvisited[],intn){inti;// 清零標(biāo)記數(shù)組for(i=0;i<n;i++)visited[i]=0;for(i=0;i<n;i++)if(visited[i]==0)BFS(G,i);}

                  C++ 的實現(xiàn)

                  (這個例子僅針對Binary Search Tree) 定義一個結(jié)構(gòu)體來表達一個節(jié)點的結(jié)構(gòu):

                  structnode{intself;//數(shù)據(jù)node*left;//左節(jié)點node*right;//右節(jié)點};

                  那么,我們在搜索一個樹的時候,從一個節(jié)點開始,能首先獲取的是它的兩個子節(jié)點。例如:

                  A是第一個訪問的,然后順序是B和C;然后再是B的子節(jié)點,C的子節(jié)點。那么我們怎么來保證這個順序呢?

                  這里就應(yīng)該用queue數(shù)據(jù)結(jié)構(gòu),因為queue采用先進先出( first-in-first-out )的順序。

                  使用C++的STL函式庫,下面的程序能幫助理解:

                  std::queuevisited,unvisited;nodenodes[9];node*current;unvisited.push(&nodes[0]);//先把root放入unvisited queuewhile(!unvisited.empty())//只有unvisited不空{(diào)current=(unvisited.front());//目前應(yīng)該檢驗的if(current->left!=NULL)unvisited.push(current->left);//把左邊放入queue中if(current->right!=NULL)//右邊壓入。因為QUEUE是一個先進先出的結(jié)構(gòu)構(gòu),所以即使後面再壓其他東西,依然會先訪問這個。unvisited.push(current->right);visited.push(current);cout<self<<endl;unvisited.pop();}

                  特性

                  空間復(fù)雜度

                  因為所有節(jié)點都必須被儲存,因此BFS的空間復(fù)雜度為O(|V| + |E|),其中|V|是節(jié)點的數(shù)目,而|E|是圖中邊的數(shù)目。注:另一種說法稱BFS的空間復(fù)雜度為 O ( B M ) {\displaystyle O(B^{M})} ,其中B是最大分支系數(shù),而M是樹的最長路徑長度。由于對空間的大量需求,因此BFS并不適合解非常大的問題。

                  時間復(fù)雜度

                  最差情形下,BFS必須尋找所有到可能節(jié)點的所有路徑,因此其時間復(fù)雜度為O(|V| + |E|),其中|V|是節(jié)點的數(shù)目,而|E|是圖中邊的數(shù)目。

                  完全性

                  廣度優(yōu)先搜索算法具有完全性。這意指無論圖形的種類如何,只要目標(biāo)存在,則BFS一定會找到。然而,若目標(biāo)不存在,且圖為無限大,則BFS將不收斂(不會結(jié)束)。

                  最佳解

                  若所有邊的長度相等,廣度優(yōu)先搜索算法是最佳解——亦即它找到的第一個解,距離根節(jié)點的邊數(shù)目一定最少;但對一般的圖來說,BFS并不一定回傳最佳解。這是因為當(dāng)圖形為加權(quán)圖(亦即各邊長度不同)時,BFS仍然回傳從根節(jié)點開始,經(jīng)過邊數(shù)目最少的解;而這個解距離根節(jié)點的距離不一定最短。這個問題可以使用考慮各邊權(quán)值,BFS的改良算法成本一致搜尋法來解決。然而,若非加權(quán)圖形,則所有邊的長度相等,BFS就能找到最近的最佳解。

                  廣度優(yōu)先搜索算法的應(yīng)用

                  廣度優(yōu)先搜索算法能用來解決圖論中的許多問題,例如:

                  尋找圖中所有連接元件(Connected Component)。一個連接元件是圖中的最大相連子圖。

                  尋找連接元件中的所有節(jié)點。

                  尋找非加權(quán)圖中任兩點的最短路徑。

                  測試一圖是否為二分圖。

                  (Reverse)Cuthill–McKee算法

                  尋找連接元件

                  由起點開始,執(zhí)行廣度優(yōu)先搜索算法后所經(jīng)過的所有節(jié)點,即為包含起點的一個連接元件。

                  測試是否二分圖

                  BFS可以用以測試二分圖。從任一節(jié)點開始搜尋,并在搜尋過程中給節(jié)點不同的標(biāo)簽。例如,給開始點標(biāo)簽0,開始點的所有鄰居標(biāo)簽1,開始點所有鄰居的鄰居標(biāo)簽0……以此類推。若在搜尋過程中,任一節(jié)點有跟其相同標(biāo)簽的鄰居,則此圖就不是二分圖。若搜尋結(jié)束時這種情形未發(fā)生,則此圖為一二分圖。

                  應(yīng)用于電腦游戲中平面網(wǎng)格

                  BFS可用來解決電腦游戲(例如即時策略游戲)中找尋路徑的問題。在這個應(yīng)用中,使用平面網(wǎng)格來代替圖形,而一個格子即是圖中的一個節(jié)點。所有節(jié)點都與它的鄰居(上、下、左、右、左上、右上、左下、右下)相接。

                  值得一提的是,當(dāng)這樣使用BFS算法時,首先要先檢驗上、下、左、右的鄰居節(jié)點,再檢驗左上、右上、左下、右下的鄰居節(jié)點。這是因為BFS趨向于先尋找斜向鄰居節(jié)點,而不是四方的鄰居節(jié)點,因此找到的路徑將不正確。BFS應(yīng)該先尋找四方鄰居節(jié)點,接著才尋找斜向鄰居節(jié)點1。

                  參見

                  先驗算法

                  深度優(yōu)先搜索

                  參考資料

                  Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein], Introduction to Algorithms , Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Section 22.2: Breadth-first search, pp. 531–539.


                  免責(zé)聲明:以上內(nèi)容版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。感謝每一位辛勤著寫的作者,感謝每一位的分享。

                  ——— 沒有了 ———
                  編輯:阿族小譜

                  相關(guān)資料

                  展開

                  更多文章

                  更多精彩文章
                  評論 {{commentTotal}} 文明上網(wǎng)理性發(fā)言,請遵守《新聞評論服務(wù)協(xié)議》
                  游客
                  發(fā)表評論
                  • {{item.userName}} 舉報

                    {{item.content}}

                    {{item.time}} {{item.replyListShow ? '收起' : '展開'}}評論 {{curReplyId == item.id ? '取消回復(fù)' : '回復(fù)'}}

                    回復(fù)評論
                  加載更多評論
                  打賞作者
                  “感謝您的打賞,我會更努力的創(chuàng)作”
                  — 請選擇您要打賞的金額 —
                  {{item.label}}
                  {{item.label}}
                  打賞成功!
                  “感謝您的打賞,我會更努力的創(chuàng)作”
                  返回
                  打賞
                  私信

                  推薦閱讀

                  · 深度優(yōu)先搜索
                  C++的實現(xiàn)定義一個結(jié)構(gòu)體來表達一個NODE的結(jié)構(gòu):structNode{intself;//數(shù)據(jù)Node*left;//左節(jié)點Node*right;//右節(jié)點};那么我們在搜索一個樹的時候,從一個節(jié)點開始,能首先獲取的是它的兩個子節(jié)點。例如:“ABCDEFG”A是第一個訪問的,然后順序是B和D、然后是E。然后再是C、F、G。那么我們怎么來保證這個順序呢?這里就應(yīng)該用堆棧的結(jié)構(gòu),因為堆棧是一個先進后出的順序。通過使用C++的STL,下面的程序能幫助理解:constintTREE_SIZE=9;std::stackunvisited;Nodenodes[TREE_SIZE];Node*current;//初始化樹for(inti=0;i<TREE_SIZE;i++){nodes[i].self=i;intchild=i*2+1;if(childright);//把右邊壓入因為右邊的訪問次序是...
                  · 搜索
                  搜索方式按是否使用啟發(fā)式信息分啟發(fā)式搜索盲目搜索按問題的表示方式分狀態(tài)空間搜索與/或樹搜索搜索策略寬度優(yōu)先搜索寬度優(yōu)先搜索算法是沿著樹的寬度遍歷樹的節(jié)點,如果發(fā)現(xiàn)目標(biāo),則算法中止。屬于盲目搜索。深度優(yōu)先搜索深度優(yōu)先搜索沿著樹的最大深度方向生成節(jié)點并與目標(biāo)節(jié)點進行比較,只有當(dāng)上次訪問的節(jié)點不是目標(biāo)節(jié)點,而且沒有其他節(jié)點可以生成的時候,才轉(zhuǎn)到上次訪問節(jié)點的父節(jié)點,然后搜索該節(jié)點的其他子節(jié)點。因此深度優(yōu)先搜索也稱為回溯搜索。它既不是完備的,也不是最優(yōu)的。有時候,某些特定的問題會產(chǎn)生大量重復(fù)的節(jié)點。例如“八數(shù)碼”問題就是這樣的,當(dāng)每次運用向上、向下、向左、向右移動空格的算符時,可能產(chǎn)生與已經(jīng)產(chǎn)生的節(jié)點重復(fù)的節(jié)點。當(dāng)再次搜索到這個重復(fù)節(jié)點時,由于應(yīng)用的算符基本一致,還會產(chǎn)生重復(fù),所以為了節(jié)約時間和存儲空間,往往在深度優(yōu)先算法中設(shè)立一個機制,用來刪除這些重復(fù)的節(jié)點,以提高效率。迭代加深搜索(ID搜索)...
                  · 優(yōu)先股
                  優(yōu)先股的特征股利優(yōu)先分派一般而言,優(yōu)先股在股利分派上具有優(yōu)先性。股利分派的優(yōu)先性并不保證股利一定會分派,但如果公司分派普通股股利,則必須分派優(yōu)先股股利。優(yōu)先股可以是可累積的或不可累積的。若優(yōu)先股為可累積優(yōu)先股,則一旦發(fā)行優(yōu)先股的公司某一期間不分派優(yōu)先股股利(或只按低于約定的股息率分派),就必須在之后分派,優(yōu)先股股利在各個不分派或少分派股利的期間不斷累積。若優(yōu)先股為不可累積優(yōu)先股,則一旦發(fā)行優(yōu)先股的公司某一期間不分派股利,優(yōu)先股持有者就無法在以后期間獲得補償。優(yōu)先股的種類是否參加公司利潤分配是否可以轉(zhuǎn)換為普通股是否可被公司贖回股息是否可調(diào)換
                  · 園路設(shè)計管理優(yōu)先還是使用優(yōu)先?
                  景觀設(shè)計當(dāng)中園路的設(shè)計十分重要,是連接景點以及各個功能空間的紐帶,是整個景觀環(huán)境的構(gòu)成骨架。景觀設(shè)計當(dāng)中園路的設(shè)計有時候使用和管理以及布局美觀是有沖突的,究竟是考慮管理優(yōu)先還是使用優(yōu)先?是個值得斟酌的問題??紤]管理優(yōu)先,方便了統(tǒng)一的管理,以最小的管理人力物力投入,達到最大管理能力,比如設(shè)置少量的統(tǒng)一入口、單一區(qū)域的停車場等等。但這樣做雖然管理上是方便了,但也帶來了諸多使用上的問題。比如為了管理方便,設(shè)置過少的入口,則會造成游客人為的自發(fā)開辟最近進入路線的情況,一般人們都有就近原則的心理,選擇最短的路線到達想要到達的目的地,如果相隔的不太遠有相應(yīng)的交通通道,一般則會通過通道進入,但這有個度,如果超出了這個度,就會造成適用上的不便。深圳地鐵蓮花村站A口面對造成人們自發(fā)的開辟最近的適用路線的情況,是采用“堵為上”,還是“疏為上”?顯然,“堵”并不能解決根本問題,“疏”才為上策。所以景觀設(shè)計當(dāng)中園...
                  · 搜索及拯救
                  種類搜索及拯救包括了多項小項,包括:地面搜索及拯救(英文:GroundSearchandRescue,縮寫:GSAR),通常是于地面或者內(nèi)陸水道(例如引水道)進行。傳統(tǒng)上,此項工作通常于郊區(qū)以至荒野區(qū)域進行。城市搜索及拯救(英文:UrbanSearchandRescue,縮寫:USAR),是于城市或者市區(qū)進行,通常有涉及自然災(zāi)害(例如山泥傾瀉、地震、臺風(fēng)、洪水、受到海嘯侵襲的沿海城市等)、交通意外、坍塌事故及礦道等。山嶺搜索及拯救(英文:MountainSearchandRescue,縮寫:MSAR),是于山上進行。??照龋ㄓ⑽模篈irSeaResue),是于空中或者海上進行,需要協(xié)調(diào)飛行器及船只合作進行。戰(zhàn)斗搜索及拯救(英文:CombatSearchandRescue,縮寫:CSAR),是于戰(zhàn)場或戰(zhàn)區(qū)上進行。等等。歷史世界上最早的搜索及拯救紀(jì)錄可以追溯至1656年,一艘荷蘭商業(yè)船只(V...

                  關(guān)于我們

                  關(guān)注族譜網(wǎng) 微信公眾號,每日及時查看相關(guān)推薦,訂閱互動等。

                  APP下載

                  下載族譜APP 微信公眾號,每日及時查看
                  掃一掃添加客服微信