Song song hoá thuật toán tìm cây khung nhỏ nhất

Một phần của tài liệu NGHIÊN CỨU THUẬT TOÁN SONG SONG 10600811 (Trang 44)

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.

Một phần của tài liệu NGHIÊN CỨU THUẬT TOÁN SONG SONG 10600811 (Trang 44)