迪科斯徹算法(Dijkstra's algorithm)是由荷蘭計算機科學家艾茲格·迪科斯徹(Edsger Wybe Dijkstra)於1959年提出的。該算法是一種用於解決賦權圖中單源最短路徑問題的算法。它使用類似於廣度優先搜尋的方法,通過疊代地選擇當前未處理頂點中距離源點最近的頂點,並更新該頂點到源點的最短路徑,直到所有頂點都被處理。迪科斯徹算法的主要特點包括:
起始點:算法從一個指定的起始點開始,計算該點到圖中所有其他頂點的最短路徑。
集合S和U:算法使用兩個集合S和U。集合S包含已經找到最短路徑的頂點,而集合U包含尚未找到最短路徑的頂點。
選擇最短路徑的頂點:在每一步中,算法從集合U中選擇距離起始點最近的頂點,並將其加入到集合S中。
更新路徑長度:一旦一個頂點被加入到集合S中,算法會更新從起始點到集合U中其他頂點的路徑長度,以反映新加入頂點的最短路徑長度。
重複過程:重複上述過程,直到集合U為空,即所有頂點都已找到最短路徑。
迪科斯徹算法適用於有向圖和賦權圖,其中頂點和邊的權重表示從一個頂點到另一個頂點的代價。在計算機科學和人工智慧等領域,迪科斯徹算法也被稱為均一開銷搜尋,並被認為是最優先搜尋的一個特例。例如,在旅行商問題(TSP)中,該算法可以用來找到訪問一系列城市並返回起點時的最短路徑。