圖算法的最短路徑,以及背後的技術構建

2020-12-15 烽火六十裡

AnzoGraph由Netezza背後的工程師和Amazon Redshift背後的技術構建,是一種原生的大規模並行處理(MPP)分布式圖形OLAP(GOLAP)資料庫,其執行查詢的速度比其他供應商快100倍。圖算法提供了建模和預測複雜動態的手段,例如資源或信息流,傳染或網絡故障傳播的途徑,以及群體的影響和彈性。

本文旨在幫助您更好地利用圖形分析和圖形算法,以便您可以使用圖形資料庫更快地有效地創新和開發智能解決方案。上一次,我們使用Neo4j中的示例,重點介紹了尋路和圖搜索算法,重點是單源最短路徑算法。這一次,我們將研究另一個算法,查看All Pairs Shortest Path算法,該算法用於評估高速公路備份或網絡容量等情況下的備用路由。它也是提供多路徑的邏輯路由的關鍵,例如在發生故障時的呼叫路由選擇。

關於所有最短路徑

All Pairs Shortest Path(APSP)算法計算所有節點對之間的最短(加權)路徑。該算法具有優化,使其比為圖中的每對節點調用單源最短路徑算法更快。某些節點對可能無法彼此訪問,因此這些對之間不存在最短路徑。在這種情況下,算法返回這些節點對之間的無窮大值。

什麼時候應該使用所有最短路徑?

All Pairs Shortest Path算法用於城市服務系統問題,例如城市設施的位置或貨物的分配或交付。這方面的一個例子是確定在運輸網格的不同段上預期的交通負荷。有關更多信息,請參閱城市運營研究。

所有Pairs Shortest Path都用作REWIRE數據中心設計算法的一部分,該算法可以找到具有最大帶寬和最小延遲的網絡。

所有最短路徑示例

讓我們計算一個小數據集上的All Pairs Shortest Path。

以下Cypher語句創建一個包含它們之間位置和連接的示例圖。

MERGE (a:Loc { name:「A」 } )

MERGE (b:Loc { name:「B」 } )

MERGE (c:Loc { name:「C」 } )

MERGE (d:Loc { name:「D」 } )

MERGE (e:Loc { name:「E」 } )

MERGE (f:Loc { name:「F」 } )

合併 (a ) - [ :ROAD { cost:50 } ] - > (b )

合併 (a ) - [ :ROAD { cost:50 } ] - > (c )

合併 (a ) - [ :ROAD { cost:100 } ] - > (d )

MERGE (b ) - [ :ROAD { cost:40 } ] - > (d )

合併 (c ) - [ :ROAD { cost:40 } ] - > (d )

MERGE (c ) - [ :ROAD { cost:80 } ] - > (e )

MERGE (d ) - [ :ROAD { cost:30 } ] - > (e )

MERGE (d ) - [ :ROAD { cost:80 } ] - > (f )

MERGE (e ) - [ :ROAD { cost:40 } ] - > (f );

結論

在過去的幾周裡,我們通過查看尋路和圖搜索算法來了解一些用例,包括本周的All Pairs Shortest Path。下一次,我們將繼續檢查這些類型的算法,概述最小權重生成樹算法,該算法計算具有最小值的連接結構的路徑(關係的權重,如成本時間或容量)與訪問所有節點相關聯。

相關焦點

  • 圖的最短路徑算法-Floyd算法-弗洛伊德算法
    Floyd算法又稱為插點法,是一種利用動態規劃的思想尋找給定的加權圖中多源點之間最短路徑的算法 在計算機科學中,Floyd-Warshall算法是一種在具有正或負邊緣權重(但沒有負周期)的加權圖中找到最短路徑的算法。算法的單個執行將找到所有頂點對之間的最短路徑的長度(加權)。
  • 算法:有向無環圖的最短路徑
    (點擊上方藍字,快速關注我們)編譯:ImportNew - 郭楚沅如有好文章投稿,請點擊 → 這裡了解詳情介紹我們已經知道了如何通過Dijkstra算法在非負權圖中找到最短路徑即使圖中有負權邊,我們也知道通過Bellman-Ford算法找到一個從給定的源點到其它所有節點的最短路徑。現在我們將看到一個在線性時間內運行得更快的算法,它可以在有向無環圖中找到從一個給定的源點到其它所有可達頂點的最短路徑,又名有向無環圖(DAG)。由於有向無環圖無環所以我們不必擔心負環的問題。
  • 最短路徑:Dijkstra 算法和 Floyd 算法
    Dijkstra算法1.定義概覽Dijkstra(迪傑斯特拉)算法是典型的單源最短路徑算法,用於計算一個節點到其他所有節點的最短路徑。Dijkstra算法是很有代表性的最短路徑算法,在很多專業課程中都作為基本內容有詳細的介紹,如數據結構,圖論,運籌學等等。注意該算法要求圖中不存在負權邊。問題描述:在無向圖 G=(V,E) 中,假設每條邊 E[i] 的長度為 w[i],找到由頂點 V0 到其餘各點的最短路徑。
  • 短小精悍的多源最短路徑算法—Floyd算法
    的,Floyd主要計算多源最短路徑。在單源正權值最短路徑,我們會用Dijkstra算法來求最短路徑,並且算法的思想很簡單——貪心算法:每次確定最短路徑的一個點然後維護(更新)這個點周圍點的距離加入預選隊列,等待下一次的拋出確定。
  • 單源最短路徑-Dijkstra 算法
    Dijkstra(迪傑斯特拉)算法是典型的單源最短路徑算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴展,直到擴展到終點為止。問題:求a點到各個點的最短距離,如下圖:要求最短距離我們得知道以下兩個關於最短距離的定理:1.可以簡單描述為:最短路徑的子路徑也是最短路徑。
  • 長文|三大主題全方位梳理圖論與圖學習中的基本概念:圖搜索,最短路徑,聚類係數,中心度等
    前一篇文章介紹了圖的主要種類以及描述一個圖的基本特性。現在我們更加詳細地介紹圖分析/算法以及分析圖的不同方式。networkx 中的所有算法都可在這裡找到:https://networkx.github.io/documentation/stable/reference/algorithms/index.html我們只會介紹 networkx 中實現的最常見的基本算法。最短路徑計算的是一對節點之間的最短的加權(如果圖有加權的話)路徑。這可用於確定最優的駕駛方向或社交網絡上兩個人之間的分離程度。
  • 最短路徑問題模型匯總
    【問題概述】最短路徑問題是圖論研究中的一個經典算法問題, 旨在尋找圖(由結點和路徑組成的)中兩結點之間的最短路徑
  • 圖論與圖學習(二):圖算法
    前一篇文章介紹了圖的主要種類以及描述一個圖的基本特性。現在我們更加詳細地介紹圖分析/算法以及分析圖的不同方式。最短路徑計算的是一對節點之間的最短的加權(如果圖有加權的話)路徑。這可用於確定最優的駕駛方向或社交網絡上兩個人之間的分離程度。
  • 10種常用的圖算法直觀可視化解釋
    應用用於確定最短路徑和最小生成樹。被搜尋引擎爬蟲用來建立網頁的索引。用來在社交網絡上搜索。用於查找可用的鄰接節點在對等網絡,如BitTorrent。從一個頂點到另一個頂點的最短路徑是圖中應該移動的邊的權值總和最小的路徑。
  • 路徑規劃_Dijkstra算法
    問題是:在不同城市間有固定的距離,某人從A城市出發到B城市的最短路徑。C同學抱怨自己用了窮舉法花了好久的時間才搞定,當時聽完電話覺得這個問題確實難為了文科生,當時就說你可以數學建模用路徑尋優來做,分分鐘就解決了啊。腦子裡閃過的算法裡面Dijkstra算法應該算是比較簡單且實用的了,本文就來舉個例子說明下這個算法,順便寫點腳本也可以用在自己玩的汽車仿真環境裡面。
  • 最短路徑:向螞蟻學算法
    螞蟻這種自我學習、不斷修正、自我進化的能力,被稱為蟻群算法。在自然界中,螞蚊的食物源總是隨機分散於蟻巢周圍,在蟻群協調、分工、合作後總能找到一條通往食物源的最短路徑。現實中,我們能觀察到大量螞蟻在巢穴與食物源之間形成近乎直線的路徑,而不是曲線、圓等其他形狀(見下圖)。
  • 關於圖算法 & 圖分析的基礎知識概覽
    路徑搜索算法圖搜索算法(Pathfinding and Search Algorithms)探索一個圖,用於一般發現或顯式搜索。這些算法通過從圖中找到很多路徑,但並不期望這些路徑是計算最優的(例如最短的,或者擁有最小的權重和)。
  • 細數那些改變計算技術的偉大算法
    這種方法被證明,是最有效的編碼方法。由於這種方法簡單、高效,這種方法被用在很多的壓縮方法中比如:DEFLATE(PKZIP壓縮軟體中的算法),以及很多的多媒體編碼包括JPEG和MP3中。密碼學公共秘鑰加密
  • 微軟、優步,老工程師告訴你哪些數據結構和算法最重要
    最後,Gergely Orosz 藉助這些知識來理解有些事物如何和為何構建,以及如何使用或修改它們。由此可見,數據結構和算法並不是如人們所言用處不大。在本文中,Gergely Orosz 列舉了一系列現實世界的實例,包含生產中會用到的樹、圖等數據結構和各種算法。
  • 最短路徑問題「將軍飲馬」,「造橋選址」,「費馬點」(珍藏版)
    【問題概述】最短路徑問題是圖論研究中的一個經典算法問題, 旨在尋找圖(由結點和路徑組成的)中兩結點之間的最短路徑.算法具體的形式包括:①確定起點的最短路徑問題 - 即已知起始結點,求最短路徑的問題.②確定終點的最短路徑問題 - 與確定起點的問題相反,該問題是已知終結結點,求最短路徑的問題.
  • golang 調用 python 實戰路徑規劃之 A* 算法
    這樣做之後,一旦到達終點,便可以從終點開始,反過來順著父節點的順序找到起點,由此就構成了一條路徑。Dijkstra算法Dijkstra算法是由計算機科學家Edsger W. Dijkstra在1956年提出的。Dijkstra算法用來尋找圖形中節點之間的最短路徑。考慮這樣一種場景,在一些情況下,圖形中相鄰節點之間的移動代價並不相等。
  • 美團技術解析:自動駕駛中的決策規划算法概述
    本文將分別介紹各層的主要作用與常見算法,並且比較各種算法的優劣性及適用情景。 2. 全局路徑規劃(Route Planning) 全局路徑規劃是指在給定車輛當前位置與終點目標後,通過搜索選擇一條最優的路徑,這裡的「最優」包括路徑最短,或者到達時間最快等條件。
  • 10種算法一文打盡!基本圖表算法的視覺化闡釋
    應用:· 用於社交網絡搜索· 用於確定最短路徑和最小生成樹· 被搜尋引擎爬網程序用於構建網頁索引· 用於查找對等網絡(如BitTorrent)中的可用鄰近節點2.深度優先搜索圖4:動畫顯示了從頂點1到頂點6的最短從一個頂點到另一個頂點的最短路徑是圖形中的路徑,因此應使移動邊的權重之和最小。
  • 一文帶你搞懂什麼是圖以及常見的算法實現
    1.設G=(V,E)是聯通網,T=(U,D)是最小生成樹,V,U是頂點集合,E,D是邊的集合2.若從頂點u開始構建最小生成樹,則從集合V中取出頂點u放入到集合U中,並標記頂點v為已訪問3.若集合U中的頂點ui和集合U-V的頂點vj之間存在邊,則尋找這些邊權值的最小邊,但不能構成迴路,將頂點vj加入集合
  • 技術乾貨 | 如何做好文本關鍵詞提取?從三種算法說起
    NO.2文本關鍵詞提取算法基於詞圖模型的關鍵詞抽取算法基於詞圖模型的關鍵詞抽取首先要構建文檔的語言網絡圖,然後對語言進行網絡圖分析,在這個圖上尋找具有重要作用的詞或者短語節點的度是指與該節點直接向量的節點數目,表示的是節點的局部影響力,對於非加權網絡,節點的度為:對於加權網絡,節點的度又稱為節點的強度,計算公式為:接近性節點的接近性是指節點到其他節點的最短路徑之和的倒數