HOME 首頁
SERVICE 服務產(chǎn)品
XINMEITI 新媒體代運營
CASE 服務案例
NEWS 熱點資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    圖的四種最短路徑算法(圖的四種最短路徑算法是)

    發(fā)布時間:2023-04-10 13:05:22     稿源: 創(chuàng)意嶺    閱讀: 69        

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于圖的四種最短路徑算法的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端

    官網(wǎng):https://ai.de1919.com。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務請撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

    圖的四種最短路徑算法(圖的四種最短路徑算法是)

    一、最短路徑算法(Dijkstra)

    Dijkstra( 迪科斯特拉 )算法是用來解決單源最短路徑的算法,要求路徑權(quán)值非負數(shù)。該算法利用了深度優(yōu)先搜索和貪心的算法。

    下面是一個有權(quán)圖,求從A到各個節(jié)點的最短路徑。

    第1步:從A點出發(fā),判斷每個點到A點的路徑(如果該點不能直連A點則距離值為無窮大,如果該點能和A直連則是當前的權(quán)值),計算完之后把A點上色,結(jié)果如下圖:

    第2步:從除A點之外的點查找到距離A點最近的點C,從C點出發(fā)查找其鄰近的節(jié)點(除去已上色的點),并重新計算C點的鄰近點距離A點的值,如圖中B點,若新值(C點到A點的值+C點到該點的路徑)小于原值,則將值更新為5,同理更新D、E點。同時將C標記為已經(jīng)處理過,如圖所示涂色。

    第3步:從上色的節(jié)點中查找距離A最近的B點,重復第3步操作。

    第4步: 重復第3步,2步,直到所有的節(jié)點都上色。

    最后就算出了從A點到所有點的最短距離。

    leetcode 743題

    二、求圖中任意兩點之間最短路徑有什么算法?

    單源節(jié)點到其他任意節(jié)點的最短路徑采用Dijkstra算法,任意兩個節(jié)點之間的最短路徑使用Floyd算法,這兩個算法有很多地方可以找打。

    三、最短路徑算法

    沒有圖怎么設(shè)計算法啊!!!

    四、最短路徑算法

    Dijkstra算法,A*算法和D*算法

    Dijkstra算法是典型最短路算法,用于計算一個節(jié)點到其他所有節(jié)點的最短路徑。主要特點是以起始點為中心向外層層擴展,直到擴展到終點為止。Dijkstra算法能得出最短路徑的最優(yōu)解,但由于它遍歷計算的節(jié)點很多,所以效率低。

    Dijkstra算法是很有代表性的最短路算法,在很多專業(yè)課程中都作為基本內(nèi)容有詳細的介紹,如數(shù)據(jù)結(jié)構(gòu),圖論,運籌學等等。

    Dijkstra一般的表述通常有兩種方式,一種用永久和臨時標號方式,一種是用OPEN, CLOSE表方式,Drew為了和下面要介紹的 A* 算法和 D* 算法表述一致,這里均采用OPEN,CLOSE表的方式。

    大概過程:

    創(chuàng)建兩個表,OPEN, CLOSE。

    OPEN表保存所有已生成而未考察的節(jié)點,CLOSED表中記錄已訪問過的節(jié)點。

    1. 訪問路網(wǎng)中里起始點最近且沒有被檢查過的點,把這個點放入OPEN組中等待檢查。

    2. 從OPEN表中找出距起始點最近的點,找出這個點的所有子節(jié)點,把這個點放到CLOSE表中。

    3. 遍歷考察這個點的子節(jié)點。求出這些子節(jié)點距起始點的距離值,放子節(jié)點到OPEN表中。

    4. 重復2,3,步。直到OPEN表為空,或找到目標點。

    提高Dijkstra搜索速度的方法很多,常用的有數(shù)據(jù)結(jié)構(gòu)采用Binary heap的方法,和用Dijkstra從起始點和終點同時搜索的方法。

    A*(A-Star)算法是一種啟發(fā)式算法,是靜態(tài)路網(wǎng)中求解最短路最有效的方法。

    公式表示為: f(n)=g(n)+h(n),

    其中f(n) 是節(jié)點n從初始點到目標點的估價函數(shù),

    g(n) 是在狀態(tài)空間中從初始節(jié)點到n節(jié)點的實際代價,

    h(n)是從n到目標節(jié)點最佳路徑的估計代價。

    保證找到最短路徑(最優(yōu)解的)條件,關(guān)鍵在于估價函數(shù)h(n)的選?。?/p>

    估價值h(n)<= n到目標節(jié)點的距離實際值,這種情況下,搜索的點數(shù)多,搜索范圍大,效率低。但能得到最優(yōu)解。

    如果 估價值>實際值, 搜索的點數(shù)少,搜索范圍小,效率高,但不能保證得到最優(yōu)解。

    估價值與實際值越接近,估價函數(shù)取得就越好。

    例如對于幾何路網(wǎng)來說,可以取兩節(jié)點間歐幾理德距離(直線距離)做為估價值,即f=g(n)+sqrt((dx-nx)*(dx-nx)+(dy-ny)*(dy-ny));這樣估價函數(shù)f在g值一定的情況下,會或多或少的受估價值h的制約,節(jié)點距目標點近,h值小,f值相對就小,能保證最短路的搜索向終點的方向進行。明顯優(yōu)于Dijstra算法的毫無無方向的向四周搜索。

    conditions of heuristic

    Optimistic (must be less than or equal to the real cost)

    As close to the real cost as possible

    主要搜索過程:

    創(chuàng)建兩個表,OPEN表保存所有已生成而未考察的節(jié)點,CLOSED表中記錄已訪問過的節(jié)點。

    遍歷當前節(jié)點的各個節(jié)點,將n節(jié)點放入CLOSE中,取n節(jié)點的子節(jié)點X,->算X的估價值->

    While(OPEN!=NULL)

    {

    從OPEN表中取估價值f最小的節(jié)點n;

    if(n節(jié)點==目標節(jié)點) break;

    else

    {

    if(X in OPEN) 比較兩個X的估價值f //注意是同一個節(jié)點的兩個不同路徑的估價值

    if( X的估價值小于OPEN表的估價值 )

    更新OPEN表中的估價值; //取最小路徑的估價值

    if(X in CLOSE) 比較兩個X的估價值 //注意是同一個節(jié)點的兩個不同路徑的估價值

    if( X的估價值小于CLOSE表的估價值 )

    更新CLOSE表中的估價值; 把X節(jié)點放入OPEN //取最小路徑的估價值

    if(X not in both)

    求X的估價值;

    并將X插入OPEN表中; //還沒有排序

    }

    將n節(jié)點插入CLOSE表中;

    按照估價值將OPEN表中的節(jié)點排序; //實際上是比較OPEN表內(nèi)節(jié)點f的大小,從最小路徑的節(jié)點向下進行。

    }

    A*算法和Dijistra算法的區(qū)別在于有無估價值,Dijistra算法相當于A*算法中估價值為0的情況。

    動態(tài)路網(wǎng),最短路算法 D*A* 在靜態(tài)路網(wǎng)中非常有效(very efficient for static worlds),但不適于在動態(tài)路網(wǎng),環(huán)境如權(quán)重等不斷變化的動態(tài)環(huán)境下。

    D*是動態(tài)A*(D-Star,Dynamic A*) 卡內(nèi)及梅隆機器人中心的Stentz在1994和1995年兩篇文章提出,主要用于機器人探路。是火星探測器采用的尋路算法。

    主要方法:

    1.先用Dijstra算法從目標節(jié)點G向起始節(jié)點搜索。儲存路網(wǎng)中目標點到各個節(jié)點的最短路和該位置到目標點的實際值h,k(k為所有變化h之中最小的值,當前為k=h。每個節(jié)點包含上一節(jié)點到目標點的最短路信息1(2),2(5),5(4),4(7)。則1到4的最短路為1-2-5-4。

    原OPEN和CLOSE中節(jié)點信息保存。

    2.機器人沿最短路開始移動,在移動的下一節(jié)點沒有變化時,無需計算,利用上一步Dijstra計算出的最短路信息從出發(fā)點向后追述即可,當在Y點探測到下一節(jié)點X狀態(tài)發(fā)生改變,如堵塞。機器人首先調(diào)整自己在當前位置Y到目標點G的實際值h(Y),h(Y)=X到Y(jié)的新權(quán)值c(X,Y)+X的原實際值h(X).X為下一節(jié)點(到目標點方向Y->X->G),Y是當前點。k值取h值變化前后的最小。

    3.用A*或其它算法計算,這里假設(shè)用A*算法,遍歷Y的子節(jié)點,點放入CLOSE,調(diào)整Y的子節(jié)點a的h值,h(a)=h(Y)+Y到子節(jié)點a的權(quán)重C(Y,a),比較a點是否存在于OPEN和CLOSE中,方法如下:

    while()

    {

    從OPEN表中取k值最小的節(jié)點Y;

    遍歷Y的子節(jié)點a,計算a的h值 h(a)=h(Y)+Y到子節(jié)點a的權(quán)重C(Y,a)

    {

    if(a in OPEN) 比較兩個a的h值

    if( a的h值小于OPEN表a的h值 )

    { 更新OPEN表中a的h值;k值取最小的h值

    有未受影響的最短路經(jīng)存在

    break;

    }

    if(a in CLOSE) 比較兩個a的h值 //注意是同一個節(jié)點的兩個不同路徑的估價值

    if( a的h值小于CLOSE表的h值 )

    {

    更新CLOSE表中a的h值; k值取最小的h值;將a節(jié)點放入OPEN表

    有未受影響的最短路經(jīng)存在

    break;

    }

    if(a not in both)

    將a插入OPEN表中; //還沒有排序

    }

    放Y到CLOSE表;

    OPEN表比較k值大小進行排序;

    }

    機器人利用第一步Dijstra計算出的最短路信息從a點到目標點的最短路經(jīng)進行。

    D*算法在動態(tài)環(huán)境中尋路非常有效,向目標點移動中,只檢查最短路徑上下一節(jié)點或臨近節(jié)點的變化情況,如機器人尋路等情況。對于距離遠的最短路徑上發(fā)生的變化,則感覺不太適用。

    以上就是關(guān)于圖的四種最短路徑算法相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。


    推薦閱讀:

    自己設(shè)計裝修效果圖的軟件(免費設(shè)計房屋裝修圖)

    做設(shè)計圖的軟件(手機做設(shè)計圖的軟件)

    免費制作動圖的軟件(免費制作動圖的軟件有哪些)

    杭州庫存市場在哪里(杭州的庫存市場在哪里)

    杭州比較有名的設(shè)計公司(中國最頂尖的設(shè)計公司)