Bài toán đường đi ngắn nhất

Với các bạn sinch viên chuyên ngành công nghệ báo cáo, dĩ nhiên không lạ gì với bài xích tân oán search lối đi nđính duy nhất (Shordemo Path Problems) vào đồ gia dụng thị trọng số nữa. Tại bài viết lần này, mình vẫn làm cho 3 việc:

Giới thiệu bài toán tìm kiếm lối đi nđính tuyệt nhất cùng vận dụng của nó.Giải say đắm lời giải Dijkstra để giải quyết và xử lý bài tân oán trênViết giải mã Dijkstra bằng code Ruby .

Bạn đang xem: Bài toán đường đi ngắn nhất

1. Giới thiệu bài toán thù kiếm tìm đường đi nlắp nhất

Mình đã đưa ra một ví dụ cơ phiên bản về bài xích toán này.

Bài toán: Cho một thứ thị trọng số tất cả các nodes A,B,C,D,E,F và khoảng cách giữa các nodes tương xứng cùng với những cạnh nlỗi hình dưới . Tìm lối đi nđính độc nhất từ bỏ node B đến những node sót lại vào đồ dùng thị?


*

Sau Lúc giải bài xích toán, ta được kết quả nlỗi sau. Đường đi nlắp nhất từ A mang lại 5 node còn lại:

Từ A -> B : A - B, tổng độ nhiều năm lối đi = 2Từ A -> C : A - C, tổng độ nhiều năm lối đi = 5Từ A -> D : A - D, tổng độ nhiều năm lối đi = 1Từ A -> E : A - D - E, tổng độ nhiều năm đường đi = 2Từ A -> F : A - D - E - F, tổng độ dài đường đi = 4


*

Để nói về áp dụng của Việc giải bài bác toán này, nếu khách hàng nắm những node bởi những giao lộ, với những cạnh của chính nó là những tuyến phố, ta sẽ có 1 bài bác tân oán vô cùng không còn xa lạ. Bài toán thù search đường đi nthêm độc nhất đến một địa điểm trên bạn dạng đồ dùng.


*

Ví dụ nhỏng hình ngơi nghỉ bên trên, bằng phương pháp giải quyết và xử lý bài toán thù này, các bạn sẽ tìm kiếm được lộ trình ngắn độc nhất để đi tự địa điểm của chúng ta cho Mễ Trì Thượng.

Trong khi, ví như nắm các node bằng các router mạng hoặc những host , bọn họ gồm bài bác toán thù định tuyến phố đi của một khối hệ thống mạng - các loại bài xích toán cơ bạn dạng mà những kỹ sư mạng nên biết đến:


Có không hề ít giải thuật được đưa ra nhằm giải quyết và xử lý bài bác tân oán này : Dijkstra"s algorithm , Bellman–Ford algorithm, A* tìm kiếm algorithm, Floyd–Warshall algorithm, .....

Tuy nhiên ngơi nghỉ nội dung bài viết này, bản thân đã giải thích về lời giải Dijkstra cùng cách để viết nó bởi code Ruby.

2. Giải ham mê về lời giải Dijkstra

Mô tả về giải thuật Dijkstra:

Bước 1: Chọn S = là tập những soure_node bao gồm current_node với passed_node . Với current_node là node đang được xét đến, passed_node là các node đã có xét.current_node thứ nhất đang là node đích của bài xích toán thù tìm kiếm lối đi nđính tuyệt nhất.

Xem thêm: Phải Làm Sao Khi Thích Người Đã Có Người Yêu ? Cách Để Giành Được Chàng Đã Có Bạn Gái (Kèm Ảnh)

Bước 2: Khởi tạo ra lời giải cùng với current_node là node đích cùng cost(N) là quý giá của lối đi nlắp nhất tự N mang đến node đích.Cách 3: Xét những node kề N với current_node . hotline d(current_node,N) là khoảng cách thân node kề N và current_node . Với p = d(current_node,N) + cost (current_node). Nếu p thì cost(N) = p . Nếu không thì cost(N) giữ nguyên cực hiếm .Cách 4: Sau Lúc xét không còn những node kề N, đánh dấu current_node thành passed_node .Bước 5: Tìm current_node new cùng với 2 điều kiện: không phải passed_node cùng cost(current_node) là nhỏ nhấtCách 6: Nếu tập S = cất đủ các node của thiết bị thị thì dừng thuật toán. Nếu ko thì quay trở lại Cách 3 .

Để giải thích về kiểu cách giải mã Dijkstra chuyển động, mình sẽ áp dụng đồ gia dụng thị trọng số tiếp sau đây để đi tìm đường đi nlắp tốt nhất từ bỏ node C mang lại phần đông node còn sót lại vào đồ gia dụng thị :


Ta cũng đánh dấu current_node (node sẽ xét hiện tại) bởi một vết chấm đỏ bên trên hình.current_node trước tiên sẽ là node đích của bài toán - sống đó là C.

Thuật tân oán ban đầu chạy bằng phương pháp xét toàn bộ các node kề cùng với current_node (những node được nối thẳng cùng với current_node ) , ở đây là A, B và D. Ta đã bước đầu với node B trước và tiến hành 4 bước:

Trước hết ta kiếm được khoảng những trường đoản cú current_node mang đến node B: d(C,B) = 7.Tính tân oán quý giá đường đi tự node đích -> current_node -> node B :p = d(C,B) + cost(current_node) = 0 + 7 = 7Nếu quý giá vừa tính p thì cost(B) = p, ngược trở lại thì cost(B) giữ nguyên. ( ở chỗ này 7 yêu cầu cost(B) = 7 )Đánh vệt cost(B) lên hình.