23/02/2025
23/02/2025
23/02/2025
Tuyệt vời! Chúng ta hãy cùng nhau tìm hiểu về thuật toán Dijkstra nhé.
1. Thuật toán Dijkstra
a) Mô tả thuật toán
Thuật toán Dijkstra là một thuật toán tìm đường đi ngắn nhất giữa hai đỉnh trong một đồ thị có trọng số không âm. Ý tưởng cơ bản của thuật toán là:
Khởi tạo:
Gán khoảng cách từ đỉnh nguồn đến chính nó là 0, và đến các đỉnh còn lại là vô cùng lớn.
Tạo một tập hợp rỗng các đỉnh đã được ghé thăm.
Lặp:
Chọn đỉnh có khoảng cách từ nguồn nhỏ nhất mà chưa được ghé thăm.
Đánh dấu đỉnh này là đã được ghé thăm.
Cập nhật khoảng cách từ đỉnh này đến các đỉnh kề của nó nếu đi qua đỉnh này mà khoảng cách ngắn hơn.
Kết thúc:
Lặp lại bước 2 cho đến khi tất cả các đỉnh đã được ghé thăm.
b) Mã giả
function Dijkstra(graph, source):
dist[source] = 0
create vertex set Q
for each vertex v in graph:
if v != source
dist[v] = INFINITY
add v to Q
while Q is not empty:
u = vertex in Q with min dist[u]
remove u from Q
for each neighbor v of u still in Q:
alt = dist[u] + graph.Edges(u, v)
if alt < dist[v]:
dist[v] = alt
prev[v] = u
return dist[], prev[]
c) Ví dụ
Cho đồ thị như hình vẽ:
Áp dụng thuật toán Dijkstra, ta tìm được đường đi ngắn nhất từ đỉnh A đến đỉnh F là: A - C - E - F với tổng khoảng cách là 9.
2. Độ phức tạp thuật toán
Độ phức tạp thời gian của thuật toán Dijkstra phụ thuộc vào cách cài đặt.
Sử dụng mảng: O(V^2)
Sử dụng hàng đợi ưu tiên: O(E log V)
Trong đó:
V là số đỉnh của đồ thị
E là số cạnh của đồ thị
3. Cải thiện hiệu suất
Đối với đồ thị rất lớn, có thể cải thiện hiệu suất của thuật toán Dijkstra bằng cách:
Sử dụng cấu trúc dữ liệu phù hợp: Hàng đợi ưu tiên (như heap) giúp tìm đỉnh có khoảng cách nhỏ nhất nhanh hơn.
Giảm số lượng đỉnh xét: Nếu chỉ cần tìm đường đi đến một đỉnh đích cụ thể, có thể dừng thuật toán khi đã tìm được đường đi ngắn nhất đến đỉnh đó.
Sử dụng các thuật toán heuristic: Đối với đồ thị có đặc điểm đặc biệt, có thể sử dụng các thuật toán heuristic (như A*) để hướng dẫn tìm kiếm, giúp giảm thời gian chạy.
4. Ứng dụng
Thuật toán Dijkstra được ứng dụng rộng rãi trong thực tế, ví dụ:
Tìm đường đi ngắn nhất trên bản đồ: Các ứng dụng chỉ đường như Google Maps sử dụng thuật toán Dijkstra để tìm đường đi ngắn nhất giữa hai địa điểm.
Mạng máy tính: Thuật toán Dijkstra được sử dụng để tìm đường đi ngắn nhất giữa các router trong mạng.
Lập kế hoạch: Thuật toán Dijkstra có thể được sử dụng để lập kế hoạch di chuyển cho robot hoặc xe tự lái.
Nếu bạn muốn hỏi bài tập
Các câu hỏi của bạn luôn được giải đáp dưới 10 phút
CÂU HỎI LIÊN QUAN
Top thành viên trả lời