[其他] 演算法Dijkstra被證明是普遍最優

看板 Math
作者 jackliao1990 (j)
時間 2024-10-27 20:30:25
留言 2 ( 2推 0噓 0→ )
https://www.qbitai.com/2024/10/212282.html 十三 本科經典演算法Dijkstra,證明是普遍最優了:最壞情況性能也最優! FOCS'24最佳論文 時隔近 70年 ,那個用來解決 最短路徑問題 的經典演算法── Dijkstra ,現在有了新 突破: 被證明具有普遍最優性(Universal Optimality)。 什麼意思? 這意味著不論它面對多複雜的圖結構,即便在 最壞情況下都能達到理論上的最優性能! 而這還是學術界 首次 將此概念應用於任何序列演算法。 。 對於Dijkstra演算法,想必很多人肯定不會陌生,畢竟它是每個電腦 本科生必學 的內容 。 而且從它誕生至今,已經在廣泛地應用於我們的日常生活中,例如在 谷歌地圖 、 蘋果 地圖 ,Dijkstra演算法就被用來計算從用戶當前位置到目的地的最優路線。 在電腦網路中,被廣泛應用於 路由協定 中;例如開放最短路徑優先(OSPF)協定就是基 於Dijkstra演算法來計算網路中資料包的最優傳輸路徑。 再如 通訊網路設計 、 機器人路徑規劃 和 物流運輸優化 等領域,也是處處都有它的身 影。 (相關教學可參考:https://www.youtube.com/watch?v=EFg3u_E6eHU
而這項集結了蘇黎世聯邦理工、CMU、普林斯頓等頂尖高校科研人員之力的研究,一舉讓 這個經典演算法達到了前所未有的高度。 哥倫比亞大學電腦科學家Tim Roughgarden看完論文後直呼: 這也太神奇了,我無法想像還有比這更吸引人的研究。 據悉,這篇論文已經斬獲下週即將舉辦的 理論計算機頂會FOCS 2024 (計算機科學基礎 研討會)的 最佳論文 。 一言蔽之,現在的Dijkstra演算法,已經被證明是解決單源最短路徑問題的「近乎理想」 的方法。 那麼這項研究又是如何證明和優化的呢? 70年經典演算法新突破 首先,我們先透過一個例子,簡單回顧一下Dijkstra演算法。 如下圖所示,Dijkstra演算法尋找最短路徑的方法,大致可以分為四個步驟: 從起點出發 :選擇起點A。計算從A到鄰近點的距離,例如到B的距離為1,到C的距離 為5。選擇較短的路徑,即先前往B。 繼續探索 :從新的點(B)繼續找出鄰近點的距離,並將這些距離加上從A到B的距離 。例如,從A到B的距離是1,B到D的距離是1,因此A到D的總距離為2(1 + 1 = 2)。更新 已知的最短路徑。 記錄新的最短路徑 :在探索過程中發現較短的路徑時,更新記錄。例如,A到C的原 始距離是5,但經過B和D的路徑到C的總距離是3(1 + 1 + 1 = 3),比原來的距離短,因 此更新A到C的距離為3 。 重複步驟,直到覆蓋所有點 :演算法繼續遍歷,直到所有節點的最短路徑都被確定 。每次優先選擇距離最短的路徑進行下一步計算,逐步優化到每個點的最短路徑。 最終,Dijkstra演算法可以快速找到網路中從起始點到其他所有節點的最短路徑。 在最初的Dijkstra演算法論文中使用到了一個簡單且關鍵的數據結構—— 堆(Heap) , 而這就為後來的計算機科學家們留下了改進的餘地。 例如1984年,兩位電腦科學家設計了一個巧妙的堆資料結構,使得Dijkstra演算法在解決 單源最短路徑問題所需的時間上達到了理論極限或「下限」。 從某種特定意義上來說,這個版本的Dijkstra演算法已經可以說是最好的,也是近40年來 的一種「標準」。 而這次的最新論文,研究人員的 突破口 依舊是這個堆資料結構。 因為他們發現,像Fibonacci堆等常用的資料結構雖然在理論上具有較好的最壞情況時間 複雜度(Worst-case time complexity),但在許多情況下未能充分利用圖的局部結構特 性。 這就導致在處理某些類型的圖表時,仍然需要高昂的計算代價。 但如果在1984年設計的堆基礎上加入對最近插入項快速訪問的能力,就可以顯著提升算法 的效率。 為此,研究人員提出了一種全新的堆疊資料結構-具備特殊的 「工作集屬性」( Working Set Property) 。 所謂「工作集屬性」 ,指的是堆能夠充分利用操作的局部性,從而優先處理最近插入的 元素,降低提取最小元素的成本。 這個概念類似於我們在管理待辦事項時,會優先處理那些剛剛新增的緊急任務,更有效率 地完成工作。 若是用公式化的表述,就如下圖所示。 對於在堆中插入並隨後被提取的任意元素x,其工作集Wx包括了在x被插入後、在x被提取 前插入的所有元素,以及x本身。 https://www.qbitai.com/wp-content/uploads/replace/ce6d76e44dba4992e6de32fe97ecb42c.png 借助這種“工作集屬性”,新設計的堆數據結構能夠顯著提升Dijkstra算法的整體性能, 尤其是在具有局部性特徵的圖上。 也成功地讓Dijkstra演算法具備了普遍最優性,不僅在最壞情況下具有最優性,還能在任 何圖結構上表現出色。 不僅如此,這項工作還提供了 精確的複雜度分析 。 例如,作者證明了Dijkstra演算法在具有工作集屬性的堆上的比較次數是 O(OPTQ(G)+n+max∈WG∣FG,w∣)。 其中,OPTQ(G)是解決距離排序問題的最優演算法所需的比較次數,n是頂點數,∣FG,w∣ 是前向邊的數量。 這也為演算法的效能提供了更精確的界限。 總而言之,這些成果不僅推動了圖演算法的研究,也為實際應用中的演算法設計提供了新 的視角和工具。 喝咖啡時誕生的演算法 關於Dijkstra演算法誕生的故事,其實是始於一次意外的靈感。 1956年,年僅26歲的荷蘭電腦科學家 Edsger Dijkstra 當時正試圖為一台新型電腦ARMAC 編寫一個程序,來展示它的運算能力。 這篇論文介紹了他提出最短的路徑演算法,後來成為了電腦科學中 被引用最多的論文之 一 。 儘管Dijkstra的演算法十分優雅,但當時幾乎沒有電腦科學期刊,發表過程十分困難,最 後他選擇將其發表於新創刊Numerische Mathematik上。 Dijkstra在職業生涯中贏得了極高的聲譽,並於1972年獲得電腦科學領域最負盛名的圖靈 獎。 他不僅在程式語言、作業系統和並發控制等領域做出了許多基礎性貢獻,還以其對程式方 法的深入思考而聞名。 他強調程式的正確性,認為程式應該從一開始就正確地設計,而不是透過調試來達到正確 。 不過同時,Dijkstra的性格也非常獨特,他既被讚賞也被批評,是一位充滿爭議的人物。 他對於電腦科學的教育和研究有著強烈的觀點,常常發表極具挑戰性的言論。 例如,他反對使用goto語句,並在1968年發表了著名的文章Go To Statement Considered Harmful,這篇文章引發了廣泛的爭議,但最終他的觀點得到了普遍認可。 Dijkstra演算法不僅可以計算從起始點到一個目的地的最短路徑,還可以給出從起始點到 所有其他節點的排序,這正是單源最短路徑問題的解。 它的核心思想是不斷探索目前距離最短的路徑,更新每個節點的最短距離,直到所有節點 的距離都確定。 這種演算法的簡潔性和高效性使得它成為經典的路徑規劃工具。 麻省理工學院的電腦科學家Erik Demaine曾評論: 這是一個偉大的演算法,速度非常快,簡單易實現。 但演算法的成功不僅歸功於其核心思想,還離不開資料結構的選擇,在幾十年的發展中, 研究人員不斷改進堆資料結構,使得演算法的整體效能不斷提升。 而這一次,改良堆資料結構,可以說是再次立功了。 論文地址: https://arxiv.org/abs/2311.11793 參考連結: [1]https://www.quantamagazine.org/computer-scientists-built-the-best-way-to-traverse-a-graph-20241025/ [2]https://inference-review.com/article/the-man-who-carried-computer-science-on-his-shoulders -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.253.165.148 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Math/M.1730032237.A.247.html

留言

arrenwu 能證明這結果感覺超級猛 10/27 20:36 1F
enmeitiryous 感覺好有趣的文章 10/28 17:10 2F

最新文章

[耍冷] 曹丕岳父喝醉酒
joke eric30526
2024-11-22 01:18:57
[創作] 我們的目的良善
poem icegino
2024-11-21 23:37:10