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

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

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

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

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

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

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

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

    本文目錄:

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

    一、最短路徑算法(Dijkstra)

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

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

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

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

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

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

    最后就算出了從A點(diǎn)到所有點(diǎn)的最短距離。

    leetcode 743題

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

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

    三、最短路徑算法

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

    四、最短路徑算法

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

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

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

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

    大概過(guò)程:

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

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

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

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

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

    4. 重復(fù)2,3,步。直到OPEN表為空,或找到目標(biāo)點(diǎn)。

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

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

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

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

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

    h(n)是從n到目標(biāo)節(jié)點(diǎn)最佳路徑的估計(jì)代價(jià)。

    保證找到最短路徑(最優(yōu)解的)條件,關(guān)鍵在于估價(jià)函數(shù)h(n)的選取:

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

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

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

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

    conditions of heuristic

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

    As close to the real cost as possible

    主要搜索過(guò)程:

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

    遍歷當(dāng)前節(jié)點(diǎn)的各個(gè)節(jié)點(diǎn),將n節(jié)點(diǎn)放入CLOSE中,取n節(jié)點(diǎn)的子節(jié)點(diǎn)X,->算X的估價(jià)值->

    While(OPEN!=NULL)

    {

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

    if(n節(jié)點(diǎn)==目標(biāo)節(jié)點(diǎn)) break;

    else

    {

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

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

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

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

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

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

    if(X not in both)

    求X的估價(jià)值;

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

    }

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

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

    }

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

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

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

    主要方法:

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

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

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

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

    while()

    {

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

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

    {

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

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

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

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

    break;

    }

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

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

    {

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

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

    break;

    }

    if(a not in both)

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

    }

    放Y到CLOSE表;

    OPEN表比較k值大小進(jìn)行排序;

    }

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

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

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


    推薦閱讀:

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

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

    免費(fèi)制作動(dòng)圖的軟件(免費(fèi)制作動(dòng)圖的軟件有哪些)

    杭州庫(kù)存市場(chǎng)在哪里(杭州的庫(kù)存市場(chǎng)在哪里)

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