7. Cấu trúc báo cáo
3.2.3. Song song hoá thuật toán tìm cây khung nhỏ nhất
Do hai thuật toán Dijkstra và Prim gần giống nhau về mặt bản chất, đó là cùng tìm giá trị nhỏ nhất. đối với Prim đó là cạnh có trọng số nhỏ nhất, còn đối với Dijkstra là đỉnh có độ dài từ đỉnh nguồn đến nó nhỏ nhất. Nên về mặt song song hoá thuật toán Prim cũng tương tự như thuật toán Dijkstra.
Thuật toán
Giả sử ta có m BXL P, n là số đỉnh của đồ thị, thì mỗi BXL sẽ quản lý n/m số đỉnh, nếu n/m dư, thì P0, P1,…Pm-2 sẽ quản lý n/m đỉnh, và Pm-1 sẽ quản lý các đỉnh còn lại.
Mỗi Pi sẽ lưu lại một ma trận LPi với số cột là số đỉnh do Pi quản lý, và số hàng là số đỉnh của đồ thị.
Bước 1: Khởi tạo tập đỉnh T = V, Length[k] = ∞ với k, Length[i] = 0.
Phân chia dữ liệu trong ma trận trọng số L đến các bộ xử lý. Với mỗi bộ xử lý ta có một ma trận con tương đương với một ma trận con của L nhận dữ liệu. Mỗi Pi khác P0 sẽ lưu một mảng đỉnh riêng Vi cho riêng mình.
Bước 3: Gọi đỉnh được truyền đi là s.
Mỗi Pi sẽ cập nhật mảng Length[] với Length[k] = Min(Length[k], LP[s][k]) với mọi k thuộc về Vi.
Mỗi Pi sẽ tính toán Min Li và gửi về đỉnh và nhãn nhỏ nhất cho BXL chính.
Bước 4: BXL chính sẽ chọn đỉnh có Length nhỏ nhất gán cho s, loại s ra khỏi T, gán H[s][near[s]] = true. Nếu s là đỉnh cuối cùng thì ngừng truyền, H là cây khung nhỏ nhất. Kết thúc. Lặp lại bước 3.
3.2.4. Kết quả nghiên cứu
Cơ sở dữ liệu
Table Field Type
Edqes Node1 char(5) Node2 char(5) Time int(5) Name char(50) Nodes No char(5) Name char(50) Path_Input No char(5) Name char(50) Start char(5) End char(5) Path_Output No char(5) Length int(9) Path varchar(200)
Bảng 5. Cấu trúc Cơ Sở Dữ Liệu – Prim
Chương trình tự động thiết kế 4 cơ sở dữ liệu để thử nghiệm với tỉ lệ cạnh ~0.82.
Database Nodes Edqes
Netp4 800 543651
Netp3 500 218848
Netp2 300 75342
Netp1 100 8658
Giao diện
- Thiết kế giao diện cho Demo tuần tự
Hình 25. Giao diện Demo Prim tuần tự
- Thiết kế giao diện cho Server
- Thiết kế giao diện cho Client
Hình 27. Giao diện Demo Prim song song – Client
Đỉnh Cạnh Tuần
Tự(s)
Song Song(s)
2 Client 5 Client 10 Client
800 532729 60 55.5 50 47
500 207848 22 30 33 25
300 74792 7 15 18 15.5
100 8189 0 4 5.5 6
Kết quả thu được tương tự như kết quả thử nghiệm thuật toán Dijkstra song song.
Do điều kiện kỹ thuật không cho phép nên không thể thử nghiệm ở những đồ thị lớn hơn, vì vậy kết quả khi thực hiện có phần không tốt.
KẾT LUẬN
Tính toán song song đang ngày càng có nhiều ứng dụng trong thực tế. Đặc biệt là khi có nhiều tài nguyên máy tính dư thừa đang kết nối trên internet và nhiều máy tính để bàn có năng lực xử lý tính toán lớn. Trong lĩnh vực công nghệ thông tin http://www1.dantri.com.vn/vieclam/2007/8/194136.vip đang dự báo một nghề mới đang hình thành, đó là nghề “lập trình song song”, vì vậy việc đầu tư nghiên cứu các kỹ thuật và phương pháp lập trình song song là nhu cầu cần thiết.
Áp dụng tính toán song song luôn luôn cho phép tối ưu thời gian. Tuy nhiên chúng ta cần đầu tư nghiên cứu các thuật toán tuần tự để xây dựng được thuật toán song song có hiệu quả.
Dựa trên kiến thức đã tìm hiểu được về tính toán song song, cách thức phát triển trong môi trường hổ trợ tính toán song song, đề tài đã đạt được mục tiêu đề ra là nghiên cứu về tính tính toán song song và thực nghiệm trên thuật toán Dijkstra và thuật toán Prim tuần tự.
Đề tài có tiềm năng ứng dụng rất lớn, tính toán song song là phương pháp giải quyết bài toán thời gian tối ưu hiện nay. Đề tài sẽ tiếp tục cải tiến chương trình, tối ưu các thuật toán, nhằm đạt được kết quả tối nhất. Bên cạnh đó, mở rộng ra nhiều thuật toán khác trên đồ thị.
TÀI LIỆU THAM KHẢO Tài liệu tiếng Việt
[1] PGS. TSKH Trần Quốc Chiến, Giáo trình lý thuyết đồ thị và ứng dụng, Đại Học Đà Nẵng, 2007.
[2] Đoàn Văn Ban, Nguyễn Mậu Hân, Xử lý song song và phân tán, NXB KH&KT, 2006.
[3] ThS. Lê Văn Mỹ, Giáo trình lập trình mạng, Đại Học Đà Nẵng,
[4] Vương Thông, Ứng dụng tính toán song song trong nhận dạng mặt người, Luận văn thạc sỹ Đại Học Đà Nẵng, 2008, trang 1 – 45.
[5] Huỳnh Bá Thanh Tùng, Trần Việt Cường, Nghiên cứu tính toán lưới và thử nghiệm một số thuật toán lý thuyết đồ thị, Luận văn cử nhân Đại Học KHTN Tp.HCM, 2005, trang 115 – 128.
Tài liệu tiếng Anh
[1] Java Network Programming
Elliotte Rusty Harold
Tài liệu khác
[1] www.java2s.com
[2] www.cac.cornell.edu/VW/Parallel/tax.aspx
PHỤ LỤC
MỘT SỐ HÀM VÀ LỚP CHÍNH TRONG CHƯƠNG TRÌNH MÔ PHỎNG 6.1. Chương trình mô phỏng thuật toán Dijkstra tuần tự
Hàm/ Lớp Chức năng
Funclion init(Connect conn) Lấy dữ liệu từ database, khởi tạo giá trị ban đầu
Funclion Boolean Deplay(int a, int b) Trả về true nếu tìm thấy đường đi. Class Connect Tạo đối tượng kết nối cơ sở dữ liệu Class BackgroundConnect Điều khiển giao diện chính của
6.2. Chương trình mô phỏng thuật toán Dijkstra song song 6.2.1. Server 6.2.1. Server
Hàm/ Lớp Chức năng
Funclion boolean Process(String str) Chờ client kết nối, trả về true nếu đã đủ số client yêu cầu.
Funclion init(Connect conn) Lấy dữ liệu, phân rã, chuyển dữ liệu đến các client.
Function Deplay(int a, int b) Trả về true nếu tìm thấy đường đi. Class BackgroundServer Điều khiển giao diện chính của chương
trình.
Class Message Nhận và gửi thông điệp
6.2.2. Client
Hàm/ Lớp Chức năng
Funclion ListenProcessSend() Kết nối, lắng nghe và trả lời yêu cầu từ server
Funclion int[] MinNode(String test) Lấy dữ liệu, phân rã, chuyển dữ liệu đến các client.
Function String UpdateMinFindTrue(int a, int w)
Trả về message gửi cho server
Class BackgroundClient Điều khiển giao diện chính của chương trình.
6.3. Chương trình mô phỏng thuật toán Prim tuần tự
Hàm/ Lớp Chức năng
Funclion init(Connect conn) Lấy dữ liệu từ database, khởi tạo giá trị ban đầu
Funclion Boolean Deplay(int a) Trả về true nếu tìm thấy cây khung nhỏ nhất
Class Connect Tạo đối tượng kết nối cơ sở dữ liệu Class BackgroundConnect Điều khiển giao diện chính của
6.4. Chương trình mô phỏng thuật toán Prim song song 6.4.1. Server 6.4.1. Server
Hàm/ Lớp Chức năng
Funclion boolean Process(String str) Chờ client kết nối, trả về true nếu đã đủ số client yêu cầu.
Funclion init(Connect conn) Lấy dữ liệu, phân rã, chuyển dữ liệu đến các client.
Function Deplay(int a) Trả về true nếu tìm thấy cây khung nhỏ nhất.
Class BackgroundServer Điều khiển giao diện chính của chương trình.
Class Message Nhận và gửi thông điệp
6.4.2. Client
Hàm/ Lớp Chức năng
Funclion ListenProcessSend() Kết nối, lắng nghe và trả lời yêu cầu từ server
Funclion int[] MinNode(String test) Lấy dữ liệu, phân rã, chuyển dữ liệu đến các client.
Function String UpdateMinFindTrue(int a)
Trả về message gửi cho server Class BackgroundClient Điều khiển giao diện chính của
chương trình.