Phát biểu bài toán cây Steiner trên đồ thị I.2.. Các thuật toán tìm cây Steiner... Các thuật toán tìm cây Steiner• Thuật toán Floy-Warshall • Thuật toán Prim • Thuật toán Steiner... Xây
Trang 1ĐẠI HỌC ĐÀ NẴNGTRƯỜNG ĐẠI HỌC BÁCH KHOA
BÁO CÁO TIỂU LUẬN
TOÁN ỨNG DỤNG
GVHD: PGS TS Trần Quốc Chiến
HVTH: Nguyễn Thanh Trung
Trương Thị Minh Hậu
Lê Quang Vũ Nguyễn Thị Quỳnh Trang LỚP : Khoa học máy tính-K24 (T9/2011
Trang 2NỘI DUNG BÁO CÁO
BÀI TOÁN CÂY STEINER
Trang 3BÀI TOÁN CÂY STEINERI.1 Phát biểu bài toán cây Steiner trên đồ thị I.2 Các thuật toán tìm cây Steiner
Trang 4I.1 Phát biểu bài toán cây Steiner trên
đồ thị
• Cho đồ thị G=(V,E) có trọng số (V : tập
các đỉnh; E tập các cạnh của đồ thị) và tập
W V Tìm cây T =(W’, F) trong G nhỏ
nhất bao trùm tất cả các đỉnh của W Cây
Trang 5I.2 Các thuật toán tìm cây Steiner
• Thuật toán Floy-Warshall
• Thuật toán Prim
• Thuật toán Steiner.
Trang 6THUẬT TOÁN FLOY-WARSHALL
mọi cặp đỉnh trong đồ thị có hướng liên
Trang 7◦ Bước 1:
Ký hiệu D0 là ma trận xuất phát D0 =
[d0(i,j)] trong đó d0(i,j) = w(i,j) nếu tồn tại cung (i,j) và d0(i,j) = + nếu không tồn tại cung (i,j) (đặc biệt nếu không có khuyên tại i thì d0(i,i) = +).
P0 = [p0(i,j)] trong đó p0(i,j) = j nếu có cung
từ i đến j và p0(i,j) không xác định nếu không
có cung từ i đến j.
Gán k:=0.
THUẬT TOÁN FLOY-WARSHALL
Trang 8Với mọi cặp (i,j), i=1 n, j=1 n thực hiện:
Nếu dk-1(i,j) > dk-1(i,k) + dk-1(k,j) thì đặt
Quay lại bước (2).
THUẬT TOÁN FLOY-WARSHALL
Trang 9 Phương pháp xác định đường đi ngắn
Trang 10THUẬT TOÁN PRIM
Trang 11 Các bước:
Khởi tạo:
T là đồ thị gồm một đỉnh 1 và không có cạnh
Kiểm tra điều kiện kết thúc:
Nếu T có n-1 cạnh, Kết thúc Kết luận: T là cây phủ nhỏ nhất Ngược lại sang bước (3)
Ngược lại, kết thúc Kết luận đồ thị G không liên thông
THUẬT TOÁN PRIM
Trang 12• Đầu vào :
Trọng đồ liên thông G=(V,E,w) n đỉnh, và tập W
V m đỉnh, m < n
• Đầu ra :
Cây Steiner của W trong G
THUẬT TOÁN STEINER.
Trang 13• Các bước triển khai:
- Bước 1 Xây dựng trọng đồ đơn đủ G’=(V,F,w’) (bằng
thuật toán Floyd-Warshall), trong đó w’(u,v) là khoảng cách ngắn nhất từ u đến v với mọi cặp (u,v)
- Bước 2.Với mỗi S V-W , card(S) m-2, tìm cây phủ
nhỏ nhất của đồ thị <WS> sinh bởi WS trong G’
Trong các cây phủ đó tìm cây T’ có trọng số nhỏ nhất
(dùng thuật toán Prim)
- Bước 3 Xây dựng cây Steiner T từ T’ bằng cách thay mỗi
cạnh nối hai đỉnh trong G’ bằng đường đi nối chúng với nhau trong G Các đỉnh thuộc T mà không thuộc W là
những đỉnh Steiner
THUẬT TOÁN STEINER.
Trang 14THIẾT KẾ VÀ CÀI ĐẶT CHƯƠNG TRÌNH
• Thiết kế cấu trúc dữ liệu và thuật toán
• Cài đặt chương trình
Trang 15• Cấu trúc dữ liệu
Các khai báo cấu trúc dữ liệu cho bài toán.
Đồ thị G=(V, E,w) được lưu trữ bởi ma trận kề
G[Max][Max], với Max=100;
Trang 16CÁC THUẬT TOÁN
• Thuật toán
chương trình
chính
Trang 17• Hàm DocFile()
CÁC THUẬT TOÁN
Trang 18• Hàm Prim()
CÁC THUẬT TOÁN
Trang 19• Hàm Try(int i)
CÁC THUẬT TOÁN
Trang 20• Hàm CayPhu()
CÁC THUẬT TOÁN
Trang 21• Hàm Steiner()
CÁC THUẬT TOÁN
Trang 22CÀI ĐẶT CHƯƠNG TRÌNH
• Demo
Trang 23KẾT LUẬN
Với yêu cầu tìm hiểu và xây dựng giải thuật cho bài toán tìm cây Steiner trên đồ thị, nhóm đã tiến hành nghiên cứu cơ sở lý thuyết, các giải thuật và xây dựng chương trình để giải quyết bài toán.
Nắm các khái niệm cơ bản về đồ thị.
Phát biểu được bài toán Steiner trên đồ thị.
Thiết kế cấu trúc dữ liệu và giải thuật để tìm các điểm steiner và xây dựng cây Steiner trên đồ thị.
Cài đặt được chương trình trên ngôn ngữ C và thử nghiệm với
nhiều bộ dữ liệu khác nhau và cho kết quả đúng.
Chưa kiểm tra và bắt tất cả các lỗi nhập sai dữ liệu đầu vào.
Giao diện của chương trình text khá đơn
Kiểm tra và xử lý lỗi từ file dữ liệu vào.
Phát triển chương trình với giao diện đồ họa.