อัลกอริทึมของ Dijsktra: C++, Python ตัวอย่างรหัส
เส้นทางที่สั้นที่สุดหรือระยะทางที่สั้นที่สุดคืออะไร?
เส้นทางจากจุดยอดต้นทางไปยังจุดยอดปลายทางที่มีต้นทุนน้อยที่สุดคือเส้นทางที่สั้นที่สุดหรือระยะทางที่สั้นที่สุด ในทฤษฎีกราฟ มีความเป็นไปได้ที่จะมีหลายเส้นทางจากต้นทางไปยังปลายทาง ระหว่างเส้นทางเหล่านี้ หากมีเส้นทางที่มีค่าใช้จ่ายขั้นต่ำ เราสามารถเรียกมันว่าอัลกอริธึมเส้นทางที่สั้นที่สุดได้
ที่นี่ "ต้นทุน" หมายถึงจำนวนโหนดในเส้นทางหรือผลรวมของต้นทุนในแต่ละเส้นทาง เส้นทางอาจมีขอบหนึ่งหรือหลายขอบก็ได้ การเชื่อมต่อระหว่างจุดยอดสองจุดเรียกว่า "ขอบ" มีอัลกอริทึมเส้นทางที่สั้นที่สุดหลายประเภท เช่น อัลกอริทึมของ Dijkstra อัลกอริทึมของ Bellman-Ford เป็นต้น
ที่นี่เราจะหารือเกี่ยวกับอัลกอริทึมของ Dijkstra
มาดูกราฟถ่วงน้ำหนักต่อไปนี้:

- คำว่า "ถ่วงน้ำหนัก" หมายถึงการย้ายต้นทุนจากโหนดหนึ่งไปยังอีกโหนดหนึ่ง ตัวอย่างเช่น การย้ายจากโหนด 1 ไปยังโหนด 2 ต้นทุนหรือน้ำหนักคือ 1
- เส้นทางระหว่างโหนด 1 ถึงโหนด 2 เรียกว่าส่วนขอบ
- “Undirected” หมายความว่าคุณสามารถย้ายโหนดหนึ่งไปยังอีกโหนดหนึ่งและกลับไปยังโหนดก่อนหน้าได้ ดังนั้น หากเราพยายามค้นหาเส้นทางทั้งหมดจากโหนด 1 ถึงโหนด 7 มันจะเป็น:
| เส้นทางหรือเส้นทาง | ราคา |
|---|---|
| 1-2-6-7 | (1+3+3) = 7 |
| 1-2-3-7 | (1+9+1) = 11 |
| 1-3-7 | (7+1) = 8 |
| 1-4-5-7 | (6+2+5) = 13 |
ในสี่เส้นทางนี้เราจะเห็นว่าเส้นทางแรกมีค่าใช้จ่าย 7 เส้นทาง จึงเป็นเส้นทางที่สั้นที่สุดในแง่ของต้นทุน
อัลกอริทึมของ Dijkstra ทำงานอย่างไร
อัลกอริธึม Dijkstra สามารถค้นหาระยะทางที่สั้นที่สุดในกราฟถ่วงน้ำหนักทั้งแบบตรงและไม่ตรงทิศทาง อัลกอริทึมนี้โลภมากเพราะมักจะเลือกโหนดที่สั้นที่สุดหรือใกล้เคียงที่สุดจากจุดเริ่มต้นเสมอ คำว่า "โลภ" หมายความว่าในบรรดาผลลัพธ์หรือผลลัพธ์ชุดหนึ่ง อัลกอริธึมจะเลือกสิ่งที่ดีที่สุด
ที่นี่ เรากำลังพยายามหาเส้นทางที่สั้นที่สุดในบรรดาเส้นทางอื่นๆ ทั้งหมด ดังนั้น อัลกอริทึมของ Dijkstra จะค้นหาเส้นทางที่สั้นที่สุดทั้งหมดจากโหนดปลายทางเดียว เป็นผลให้มีพฤติกรรมเหมือนก อัลกอริทึมโลภ.
ในส่วน "ตัวอย่าง" ด้านล่าง คุณจะเห็นวิธีการทีละขั้นตอน มันทำงานดังนี้:
ขั้นตอน 1) เริ่มต้นโหนดเริ่มต้นด้วยต้นทุน 0 และส่วนที่เหลือของโหนดเป็นต้นทุนอินฟินิตี้
ขั้นตอน 2) รักษาอาร์เรย์หรือรายการเพื่อติดตามโหนดที่เยี่ยมชม
ขั้นตอน 3) อัปเดตต้นทุนโหนดด้วยต้นทุนขั้นต่ำ สามารถทำได้โดยการเปรียบเทียบต้นทุนปัจจุบันกับต้นทุนเส้นทาง (การสาธิตแสดงอยู่ในส่วนตัวอย่าง)
ขั้นตอน 4) ทำขั้นตอนที่ 3 ต่อไปจนกว่าจะมีการเยี่ยมชมโหนดทั้งหมด
หลังจากทำตามขั้นตอนทั้งหมดนี้แล้ว เราจะพบเส้นทางที่มีต้นทุนขั้นต่ำจากต้นทางไปยังปลายทาง
ความแตกต่างระหว่าง Dijkstra และ BFS, DFS
ความแตกต่างหลักระหว่าง Dijkstra และ BFS-DFS คือ Dijkstra เป็นอัลกอริทึมการค้นหาเส้นทางที่สั้นที่สุด ส่วน BFS และ DFS เป็นอัลกอริทึมการค้นหาเส้นทาง โดยทั่วไปแล้ว BFS และ DFS จะไม่คำนึงถึงต้นทุนในการค้นหาเส้นทาง ดังนั้นอัลกอริทึมเหล่านี้จึงไม่สามารถรับประกันเส้นทางที่สั้นที่สุดได้
ตาราง 2 มิติสาธิตวิธีการทำงานของ BFS
การสาธิตนี้บ่งชี้ว่า BFS พบเฉพาะเส้นทางเท่านั้น อย่างไรก็ตาม ไม่สนใจน้ำหนักของเส้นทาง บีเอฟเอส (การค้นหาแบบกว้าง - แรก) ถือว่าการเดินทางจากโหนดหนึ่งไปยังอีกโหนดหนึ่งจะมีราคาเพียง 1
แต่ให้เราดูกราฟตัวอย่าง:
ที่นี่จะค้นหาเส้นทางในระดับ 2 BFS ลัดเลาะไปตามกราฟตามลำดับระดับ ดังนั้นจึงเดินทางดังนี้:
ขั้นตอน 1) เริ่มจากโหนด “1” และเยี่ยมชมโหนดที่อยู่ติดกันทั้งหมด 2,3,4
ขั้นตอน 2) ทำเครื่องหมายโหนด 2,3,4 เป็นระดับ 1 และเยี่ยมชมโหนดที่อยู่ติดกัน มันจะสำรวจโหนดที่อยู่ติดกันทั้งหมดต่อไปจนกว่าจะถึงโหนดปลายทาง
ในแง่ของ DFS มันจะเคลื่อนผ่านเส้นทางจาก 1 ถึง 7 ดังต่อไปนี้:
- 1→2→3→7 (ราคาเดิม 10, DFS ราคา 3)
- 1→2→6→7 (ราคาเดิม 7, DFS ราคา 3)
- 1→3→7 (ราคาเดิม 8, DFS ราคา 2)
- 1→4→5→7 (ราคาเดิม 13, DFS ราคา 3)
ดังที่เราเห็น DFS จะคำนวณต้นทุนเส้นทางด้วยจำนวนความลึกหรือจำนวนขอบ
DFS ดำเนินการดังต่อไปนี้:
- DFS สามารถค้นหาเส้นทางจากต้นทาง (เริ่มต้นจุดยอด) ไปยังปลายทาง
- ไม่สามารถรับประกันได้ว่าเส้นทางที่ค้นพบจากโหนดต้นทางไปยังปลายทางนั้นเป็นเส้นทางที่สั้นที่สุดหรือไม่
อย่างไรก็ตาม ในแง่ของอัลกอริทึม Dijkstra มันจะเลือกขอบตามต้นทุน เนื่องจากเป็นอัลกอริธึมที่ละโมบ มันจะเลือกเส้นทางต้นทุนที่ดีที่สุดหรือต่ำสุด
ตัวอย่างอัลกอริทึมของ Dijkstra
อัลกอริทึมของ Dijkstra ใช้ต้นทุนหรือน้ำหนักในการคำนวณต้นทุนรวมของเส้นทาง
เป้าหมายของอัลกอริทึมของ Dijkstra คือการลดต้นทุนหรือน้ำหนักทั้งหมดให้เหลือน้อยที่สุด ในตัวอย่างที่แสดงข้างต้น เราจะค้นหาเส้นทางที่ดีที่สุดจากโหนด 1 ไปยังโหนด 7 จากนั้นจึงคำนวณต้นทุนทั้งหมด
ในอัลกอริทึมของ Dijkstra มันจะค้นหาเส้นทางที่สั้นที่สุดโดยการคำนวณน้ำหนัก จะไม่ค้นหาเส้นทางที่เป็นไปได้ทั้งหมด ให้เราสาธิตอัลกอริทึมของ Dijkstra ด้วยตัวอย่าง ตัวอย่างเช่น คุณถูกขอให้ค้นหาเส้นทางที่สั้นที่สุดจากโหนด 1 ถึง 7
สำหรับกระบวนการนี้ มีขั้นตอนดังต่อไปนี้:
ขั้นตอน 1) เริ่มต้นต้นทุนโหนดเริ่มต้นเป็น 0
โหนดที่เหลือ กำหนด “อินฟ”. หมายความว่าไม่มีเส้นทางอยู่ระหว่างจุดยอดเริ่มต้น (แหล่งที่มา) และโหนด หรือเส้นทางที่ยังไม่ได้เยี่ยมชม
ขั้นตอน 2) เมื่อคุณเลือกโหนด 1 โหนดนั้นจะถูกทำเครื่องหมายว่าเยี่ยมชมแล้ว จากนั้นอัปเดตเพื่อนบ้านที่อยู่ติดกันทั้งหมดของโหนด 1 2,3,4 เป็นโหนดใกล้เคียงของโหนด 1
ขณะอัปเดตต้นทุน เราต้องปฏิบัติตามขั้นตอนด้านล่าง:
เราสามารถอัปเดตต้นทุนของแต่ละโหนดได้โดยใช้สูตรด้านบน ตัวอย่างเช่น เราอยู่ที่โหนด 1 และเราจำเป็นต้องอัปเดตต้นทุนของโหนดที่อยู่ติดกัน 2,3,4
หลังจากอัพเดตแล้ว ราคาหรือน้ำหนักจะเป็นดังนี้:
ขั้นตอนที่ 3) สำหรับโหนด “2” เพื่อนบ้านคือ 6 และ 3 เรากำลังอัปเดตต้นทุนที่ "6" โดยการเปรียบเทียบค่าอนันต์ (มูลค่าปัจจุบัน) ต้นทุนของโหนด 2 + ต้นทุนเส้นทางจาก 2 ถึง 6 พูดง่ายๆ ว่าโหนด “6” จะมีราคา 1+3 หรือ 4
โหนด 3 เป็นเพื่อนบ้านของโหนด 2 อย่างไรก็ตาม เราคำนวณต้นทุนในขั้นตอนก่อนหน้า ซึ่งก็คือ 7 ตอนนี้ หากเส้นทางของเราคือ 1-2-3 โหนด 3 จะมีราคา 10 เส้นทาง 1-2- 3 จะมีราคา 10 ในขณะที่ 1 ถึง 3 จะมีราคา 7
ขั้นตอนที่ 4) สำหรับโหนด 3 โหนดข้างเคียงคือ 7 ดังนั้น เมื่อเปรียบเทียบค่าปัจจุบันของโหนด 7 กับต้นทุนเส้นทาง (7+1) หรือ 8 เราจะอัปเดตต้นทุนของโหนด 7 นั่นคือ 8
ดังนั้นเราจึงค้นหาเส้นทางจากโหนด 1 ไปยังโหนด 7 และมันคือ 1 → 3 → 7 ราคาคือ 8
ขั้นตอนที่ 5) สำหรับโหนด 4 เราจะอัปเดตต้นทุนโหนดที่อยู่ติดกันตามลำดับ ดังนั้น โหนด “5” จะมีราคาที่อัปเดตเป็น 8 หลังจากขั้นตอนที่ 4,5 จะมีลักษณะดังนี้:
ตอนนี้เส้นทาง 1-3-7 มีราคา 8 (ก่อนหน้านี้) โหนด “7” ไม่ได้ถูกทำเครื่องหมายว่าเข้าชมแล้ว เนื่องจากเราสามารถเข้าถึงโหนด “7” จากโหนด “6” เส้นทาง “1-2-6” มีราคา 4 ดังนั้นเส้นทาง 1-2-6-7 จะมีราคา 7
เนื่องจาก 7 < 8 นั่นคือสาเหตุที่เส้นทางที่สั้นที่สุดจากจุดยอดต้นทาง “1” ไปยังจุดยอดปลายทาง “7” จะเป็น 1-2-6-7 และราคาคือ 7 ก่อนหน้านี้คือ 1-3-7 และราคา อายุ 8 ขวบ
ดังนั้นกราฟสุดท้ายจะเป็นดังนี้:
ขอบที่มีเส้นสีดำเป็นเส้นทางที่สั้นที่สุดของเราตั้งแต่ 1 ถึง 7 และมีค่าใช้จ่าย 7
อัลกอริทึมของรหัสหลอก Dijkstra
นี่คือรหัสหลอกสำหรับอัลกอริทึมของ Dijkstra
Dijkstra(G, S):
for each vertex V in G
distance[V] & lt; - Infinity
previous[V] & lt; - NULL
if V does not equal S, then,
(priority queue) Q.push(V)
distance[S] = 0
While Q is not empty
U & lt; - Extract the MIN from Q
For each unvisited adjacent V of U
TotalDistance & lt; - distance[U] + edge_cost(U, V)
if TotalDistance is less than distance[V], then
distance[V] & lt; - TotalDistance
previous[V] & lt; - u
return distance, previous
C++ อัลกอริทึมของ Dijkstra
เพื่อนำอัลกอริทึมของ Dijkstra ไปใช้โดยใช้ C++นี่คือรหัส:
#include <bits/stdc++.h>
using namespace std;
#define size 7
int minimumDistance(int distance[], bool visited[]) {
int min = INT_MAX;
int min_index = INT_MAX;
for (int i = 0; i < size; i++) {
if (!visited[i] & amp; & distance[i] <= min) {
min = distance[i];
min_index = i;
}
}
return min_index;
}
void printParentPath(int parent[], int i) {
if (parent[i] == -1) {
return;
}
printParentPath(parent, parent[i]);
cout << i + 1 << " ";
}
void dijkstra(int graph[size][size], int source) {
int distance[size];
bool visited[size];
int parent[size];
for (int i = 0; i < size; i++) {
parent[0] = -1;
distance[i] = INT_MAX;
visited[i] = false;
}
distance[source] = 0;
for (int i = 0; i < size - 1; i++) {
int U = minimumDistance(distance, visited);
visited[U] = true;
for (int j = 0; j < size; j++) {
int curr_distance = distance[U] + graph[U][j];
if (!visited[j] & amp; & graph[U][j] & amp; &
curr_distance < distance[j]) {
parent[j] = U;
distance[j] = curr_distance;
}
}
}
cout << "Vertex\t\tDistance\tPath" << endl;
for (int i = 1; i < size; i++) {
cout << source + 1 << "->" << i + 1 << "\t\t" << distance[i] << "\t\t"
<< source + 1 << " ";
printParentPath(parent, i);
cout << endl;
}
}
int main() {
int graph[size][size] = {{0, 1, 7, 6, 0, 0, 0}, {1, 0, 9, 0, 0, 3, 0},
{7, 9, 0, 0, 0, 0, 1}, {6, 0, 0, 0, 2, 0, 0},
{0, 0, 0, 2, 0, 0, 0}, {0, 3, 0, 0, 0, 0, 3},
{0, 0, 0, 0, 5, 3, 0}};
dijkstra(graph, 0);
}
Output:
Vertex Distance Path 1->2 1 1 2 1->3 7 1 3 1->4 6 1 4 1->5 8 1 4 5 1->6 4 1 2 6 1->7 7 1 2 6 7
Python อัลกอริทึมของ Dijkstra
เพื่อนำอัลกอริทึมของ Dijkstra ไปใช้โดยใช้ หลามนี่คือรหัส:
num_of_vertex = 7
def minimumDistance(distance, visited):
_min = 1e11
min_index = 1e11
for i in range(num_of_vertex):
if not visited[i] and distance[i] & lt; = _min:
_min = distance[i]
min_index = i
return min_index
def printParentNode(parent, i):
if parent[i] == -1:
return
printParentNode(parent, parent[i])
print("{} ".format(i + 1), end = "")
def dijkstra(graph, src):
distance = list()
visited = list()
parent = list()
for i in range(num_of_vertex):
parent.append(-1)
distance.append(1e11)
visited.append(False)
distance[src] = 0
for i in range(num_of_vertex - 1):
U = minimumDistance(distance, visited)
visited[U] = True
for j in range(num_of_vertex):
curr_distance = distance[U] + graph[U][j]
if not visited[j] and graph[U][j] and curr_distance & lt;
distance[j]: parent[j] = U
distance[j] = curr_distance
print("Vertex\t\tDistance\tPath")
for i in range(num_of_vertex):
print("{}->{}\t\t{}\t\t{}
".format(src + 1, i + 1, distance[i], src + 1), end = "")
printParentNode(parent, i)
print("")
graph = [
[0, 1, 7, 6, 0, 0, 0],
[1, 0, 9, 0, 0, 3, 0],
[7, 9, 0, 0, 0, 0, 1],
[6, 0, 0, 0, 2, 0, 0],
[0, 0, 0, 2, 0, 0, 0],
[0, 3, 0, 0, 0, 0, 3],
[0, 0, 0, 0, 5, 3, 0]
]
dijkstra(graph, 0)
Output:
Vertex Distance Path 1->1 0 1 1->2 1 1 2 1->3 7 1 3 1->4 6 1 4 1->5 8 1 4 5 1->6 4 1 2 6 1->7 7 1 2 6 7
เราจะเห็นว่าอัลกอริทึมคำนวณระยะทางที่สั้นที่สุดจากโหนดต้นทาง
การประยุกต์ใช้อัลกอริทึม Dijkstra
Dijkstra Algo มีชุดการใช้งานมากมาย ในบรรดาสิ่งเหล่านี้มีการใช้กันอย่างแพร่หลายในด้านเครือข่าย นี่คือการใช้งานอัลกอริทึมของ Dijkstra ในชีวิตจริง:
Dijkstra ในแผนที่ Google: โดยพื้นฐานแล้ว อัลกอริธึมนี้เป็นแกนหลักในการค้นหาเส้นทางที่สั้นที่สุด ดังที่เราเห็นได้จากเอาต์พุตข้อมูลโค้ดด้านบน
Google ไม่ได้ใช้อัลกอริทึม Dijkstra แบบธรรมดา แต่จะใช้เวอร์ชันที่แก้ไขแทน เมื่อคุณเลือกจุดหมายปลายทาง ระบบจะแสดงเส้นทางหลายเส้นทางใน Google Map ในบรรดาเส้นทางเหล่านี้ บางเส้นทางจะถูกจัดเรียงสำหรับผู้ใช้ เส้นทางที่เลือกเหล่านี้ขึ้นอยู่กับ "เวลา" ดังนั้น “เวลา” จึงเป็นต้นทุนส่วนได้เปรียบสำหรับเส้นทางที่สั้นที่สุด
Dijkstra ในการกำหนดเส้นทาง IP: การกำหนดเส้นทางไอพี เป็นศัพท์เฉพาะทางเครือข่าย หมายความว่าแพ็กเก็ตข้อมูลของคุณถูกส่งไปยังผู้รับผ่านเส้นทางที่แตกต่างกันอย่างไร เส้นทางเหล่านี้ประกอบด้วยเราเตอร์ เซิร์ฟเวอร์ ฯลฯ ในการกำหนดเส้นทาง IP มีโปรโตคอลหลายประเภท
โปรโตคอลเหล่านี้ช่วยให้เราเตอร์ค้นหาเส้นทางที่สั้นที่สุดในการส่งข้อมูล ชื่อโปรโตคอลหนึ่งคือ “OSPF (Open Shortest Path First)” OSPF ใช้อัลกอริทึม Dijkstra เราเตอร์จะรักษาตารางเส้นทาง เราเตอร์แต่ละตัวจะแชร์ตารางของตัวเองกับเราเตอร์ข้างเคียง หลังจากได้รับตารางที่อัปเดตแล้ว เราเตอร์จะต้องคำนวณเส้นทางทั้งหมดอีกครั้ง เมื่อถึงเวลานั้น เราเตอร์จะใช้อัลกอริทึม Dijkstra
ข้อจำกัดของอัลกอริทึมของ Dijkstra
อัลกอริธึม Dijkstra ไม่สามารถรับประกันเส้นทางที่สั้นที่สุดในกราฟขอบลบ อัลกอริทึม Dijkstra เป็นไปตามวิธีการเหล่านี้:
- เส้นทางที่สั้นที่สุดเส้นหนึ่งจะถูกนำมาจากโหนดหนึ่งไปยังอีกโหนดหนึ่ง
- เมื่อเลือกเส้นทางที่สั้นที่สุดระหว่างสองโหนดแล้ว จะไม่ถูกคำนวณอีก
ต่อไปนี้ ให้สังเกตสองตัวอย่างที่มีขอบเป็นลบ
ในกราฟด้านซ้าย มีจุดยอดสามจุด Dijkstra จะทำงานบนกราฟดังต่อไปนี้:
ขั้นตอน 1) การเริ่มต้นจุดยอด “1” จะถูกเตรียมใช้งานให้เป็นศูนย์ โหนดอื่นๆ จะมีค่าอนันต์
ขั้นตอน 2) ทำเครื่องหมายโหนด “1” ว่าเยี่ยมชมแล้วและรวมไว้ในเส้นทางที่สั้นที่สุด
ขั้นตอน 3) ระยะห่างของโหนดต้นทาง 1 ถึงโหนด "2" และ "3" ถูกตั้งค่าเป็นอนันต์ เนื่องจากยังไม่ได้คำนวณเส้นทางที่สั้นที่สุด ดังนั้นเส้นทางใด ๆ ที่มีราคาน้อยกว่าอนันต์จะถูกเพิ่มเข้าไปในเส้นทางที่สั้นที่สุด (แนวทางโลภ)
ขั้นตอน 4) การอัปเดตระยะห่างจากจุดยอดต้นทางหรือโหนดต้นทาง "1" ถึง "2" น้ำหนักปัจจุบันจะเป็น 5 (5
ขั้นตอน 5) ตอนนี้ถ้าเราตรวจสอบระยะทางที่สั้นที่สุดจากโหนด “1” เราจะพบว่า 5 เป็นระยะทางที่สั้นที่สุดสำหรับขอบ 1–> 2 ดังนั้น โหนด “2” จะถูกทำเครื่องหมายว่าเยี่ยมชมแล้ว
ในทำนองเดียวกัน โหนด “3” จะถูกทำเครื่องหมายว่าเยี่ยมชมแล้ว เนื่องจากระยะทางที่สั้นที่สุดคือ 3
อย่างไรก็ตาม หากเราสังเกต มีเส้นทาง 1-3-2 ที่จะมีราคาเพียง 2 เท่านั้น แต่ Dijkstra แสดงให้เห็นว่าจากโหนด “1” ถึงโหนด “2” ระยะทางที่สั้นที่สุดคือ 5 ดังนั้น Dijkstra จึงล้มเหลวในการคำนวณระยะทางที่สั้นที่สุด เว้นระยะห่างอย่างถูกต้อง สาเหตุที่มันเกิดขึ้นก็คือ Dijkstra เป็นอัลกอริธึมที่โลภ ดังนั้น เมื่อทำเครื่องหมายว่าเยี่ยมชมโหนดแล้ว โหนดนั้นจะไม่ได้รับการพิจารณาใหม่ แม้ว่าอาจมีเส้นทางที่สั้นกว่าก็ตาม ปัญหานี้เกิดขึ้นเมื่อขอบมีต้นทุนติดลบหรือขอบน้ำหนักติดลบเท่านั้น
Dijkstra ล้มเหลวในการคำนวณเส้นทางที่สั้นที่สุดระหว่างสองโหนดในสถานการณ์นี้ เป็นผลให้อัลกอริทึมนี้มีข้อเสียบางประการ เพื่อแก้ปัญหาขอบลบนี้ จึงมีการใช้อัลกอริธึมอื่นที่เรียกว่า "อัลกอริธึม Bellman-Ford" อัลกอริทึมนั้นสามารถทำงานกับขอบลบได้
ความซับซ้อนของอัลกอริทึมของ Dijkstra
การใช้งานข้างต้นใช้ลูป "for" สองอัน ลูปเหล่านี้ทำงานตามจำนวนจุดยอด ดังนั้น ความซับซ้อนของเวลาคือ โอ(วี2)- ในที่นี้คำว่า "0" หมายถึงสัญลักษณ์ที่ให้ข้อสันนิษฐานสำหรับอัลกอริทึม Dijkstra
เราสามารถจัดเก็บกราฟโดยใช้ "คิวลำดับความสำคัญ" คิวลำดับความสำคัญคือโครงสร้างข้อมูลฮีปไบนารี มันจะมีประสิทธิภาพมากกว่าเมทริกซ์ 2 มิติ ความได้เปรียบที่มีต้นทุนขั้นต่ำจะมีลำดับความสำคัญสูง
แล้วความซับซ้อนของเวลาก็จะเป็น O(E บันทึก(V))- โดยที่ E คือจำนวนขอบ และ V คือจำนวนจุดยอด
ความซับซ้อนของพื้นที่คือ โอ(วี2)เนื่องจากเราใช้เมทริกซ์คำคุณศัพท์ (อาร์เรย์ 2 มิติ) ความซับซ้อนของพื้นที่สามารถปรับให้เหมาะสมได้โดยใช้โครงสร้างข้อมูลแบบรายการที่อยู่ติดกันหรือคิว












