Thuật tốn Dijkstra

Một phần của tài liệu Mô hình tính toán lưới và ứng dụng giải một số bài toán trên đồ thị (Trang 75 - 78)

CHƢƠNG 3 GIẢI MỘT SỐ BÀI TỐN ĐỒ THỊ TRÊN MƠI TRƢỜNG LƢỚI

3.2 Thuật tốn Dijkstra

Bài tốn: Cho đồ thị cĩ hướng G = (V, E, w), với tập đỉnh V, tập cạnh E và w(i,j) > 0,

(i,j) E.

Cần tính tốn được đường đi ngắn nhất từ đỉnh i đến j. Quy ước:

T: mảng lưu đỉnh chưa xét

L: ma trận trọng số ; LP: ma trận trọng số phân rã Length: mảng lưu nhãn của các đỉnh

Last: mảng lưu đường đi.

3.2.1 Thuật tốn tuần tự

Với thuật tốn tuần tự ta cĩ:

Bƣớc 1: Khởi tạo T, Length, Last

Bƣớc 2: Chọn đỉnh cĩ nhãn nhỏ nhất, loại đỉnh đĩ ra khỏi T

Bƣớc 3: Kiểm tra, nếu là đỉnh đang chọn là đỉnh đích hoặc cĩ nhãn mang giá trị

vơ cùng. Kết thúc.

Bƣớc 4: Thực hiện gán nhãn:

Length[k] = Min (Length[k], Length[v] + Lvk) với k T, Lvk ≠ 0 Quay lại bước 2.

3.2.2 Song song thuật tốn Dijkstra trên lưới

Thuật tốn Dijkstra tuần tự cĩ nhiều điểm cĩ thể song song hố. Do đĩ thuật tốn này đã được các nhà lập trình song song hĩa rất nhiều. Cụ thể sau đây là cách song song hĩa của thuật tốn Dijkstra tuần tự.

Lúc này chúng ta nghĩ rằng khơng phải thực thi thuật tốn trên một đơn vị xử lý (một đơn vị xử lý là một nút trên mơi trường lưới) nữa mà phân phối các cơng việc

64

khác nhau cho mỗi đơn vị xử lý khác nhau thực hiện. Mỗi đơn vị xử lý sẽ đảm nhận một số đỉnh của đồ thị cùng với ma trận mơ tả quan hệ của các đỉnh đĩ với các đỉnh cịn lại.

Triển khai thuật tốn

Bƣớc 1: Khởi tạo T, Length, Last

Phân rã ma trận trọng số và gửi đến Pi , i = 1 . . m-1.

Mỗi Pi sẽ giữ ma trận con LPi, quản lý Vi = N/m số đỉnh của đồ thị.

Bƣớc 2: Đơn vị xử lý chính gửi đỉnh i và Length[i] đến Pi, i = 1 . . m-1. Bƣớc 3: Xử lý ở đơn vị xử lý con.

 Gọi đỉnh được truyền đi là s, và nhãn của đỉnh đĩ là w.

 Cập nhật: Length[k] = Min (Length[k], w + LP[s][k]) k Vi.

 Gửi Min (Length[k]) và đỉnh tương ứng cho đơn vị xử lý chính.

Bƣớc 4: Đơn vị xử lý chính chọn đỉnh cĩ nhãn nhỏ nhất, loại đỉnh đĩ ra khỏi T,

gán cho s và w. Nếu s là đỉnh đích hoặc w = ∞ thì ngừng truyền, kết thúc. Lặp bước 3.

3.2.3 Thực nghiệm chương trình

 Hệ điều hành sử dụng :Windows

 Các máy tính kết nối mạng LAN, máy server kết nối Internet.  Ngơn ngữ lập trình sử dụng Java.

Trong quá trình thực nghiệm chương trình luận văn gặp phải một số khĩ khăn trong việc cài đặt thử nghiệm bộ cơng cụ Globus Toolkit trên Windows với cụm máy tính song song. Nên tác giả đã tận dụng cơ chế tính tốn đa luồng trong Java. Tức là mơ phỏng trong mơi trường thơng qua cơ chế đa luồng của Java cụ thể là mỗi luồng thực hiện trên một nút của lưới (một luồng đại diện cho một nút).

65

Đơn vị xử lý chính

Hình 3.5 Giao diện chương trình trên máy server - thuật tốn Dijkstra

Hƣớng dẫn sử dụng các chức năng chính

Hình 3.6 Hướng dẫn sử dụng các chức năng chính

Kết nối vào CSDL, tạo các luồng chờ client kết nối

Lấy 2 đỉnh từ trong input A, input B và tính tốn tìm đường đi Lưu các dữ liệu về

đường đi vào database

Gọi form chỉnh sửa input và sửa Số máy muốn chạy

song song Nhập Port đê client kết

66

Đơn vị xử lý con

Hình 3.7 Giao diện chương trình trên client - thuật tốn Dijkstra 3.2.3.2 Kết quả

Đánh giá thời gian chạy thuật Dijkstra:

Đỉnh Tuần

Tự(s)

Song Song(s)

2 Client 5 Client 10 Client

600 20.6 16.5 13.4 10.3 400 13.2 8.2 5.2 2.1 200 3.2 1.3 0.9 0.3 100 1.5 0.7 0.2 0.1

Một phần của tài liệu Mô hình tính toán lưới và ứng dụng giải một số bài toán trên đồ thị (Trang 75 - 78)