Tải bản đầy đủ (.ppt) (24 trang)

Slide tiểu luận môn toán ứng dụng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (284.53 KB, 24 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA

BÁO CÁO TIỂU LUẬN
TOÁN ỨNG DỤNG

LỚP

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
: Khoa học máy tính-K24 (T9/2011


NỘI DUNG BÁO CÁO
1

BÀI TOÁN CÂY STEINER

2

THIẾT KẾ VÀ CÀI ĐẶT CHƯƠNG TRÌNH

3

DEMO VÀ KẾT LUẬN


BÀI TỐN CÂY STEINER


I.1. Phát biểu bài tốn cây Steiner trên đồ thị
I.2. Các thuật tốn tìm cây Steiner


I.1. Phát biểu bài tố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
T gọi là Cây Steiner của W, và W’-W gọi
là các điểm Steiner của W ứng với cây T.


I.2. Các thuật tốn tìm cây Steiner
• Thuật tốn Floy-Warshall
• Thuật tốn Prim
• Thuật tốn Steiner.


THUẬT TỐN FLOY-WARSHALL
 Thuật tốn tìm đường đi ngắn nhất giữa
mọi cặp đỉnh trong đồ thị có hướng liên
thơng có trọng số.
 Giải thuật :
• Đầu vào
◦ Đồ thị liên thơng G=(V,E), V= {1, 2, ... , n}, có trọng số
với mọi cung (i,j).




Đầu ra

◦ Ma trận D=[d(i,j)], trong đó d(i,j) là chiều dài đường đi ngắn
nhất từ i đến j với mọi cặp (i,j).
◦ Ma trận P=[p(i,j)] dùng để xác định đường đi ngắn nhất.


THUẬT TOÁN FLOY-WARSHALL
◦ 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ó khun 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
Bước 2:
 Nếu k = n, kết thúc. D = Dn là ma trận độ dài đường đi ngắn
nhất, P = Pn.
 Ngược lại tăng k lên 1 đơn vị (k:=k+1) và sang (3).

 Bước 3
 Tính ma trận Dk và Pk theo Dk-1 và Pk-1:
Vớ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
dk(i,j) := dk-1(i,k) + dk-1(k,j)

pk(i,j) := pk-1(i,k)

Ngược lại đặt
dk(i,j) := dk-1(i,j)

pk(i,j) := pk-1(i,j)

 Quay lại bước (2).


THUẬT TOÁN FLOY-WARSHALL
 Phương pháp xác định đường đi ngắn
nhất từ đỉnh i đến đỉnh j :
Đường đi ngắn nhất từ i đến j gồm dãy các
đỉnh
i , i1 , i2 , i3 , ... , ik , ik+1 , ... , im , j
thỏa mãn

i1 = p(i,j) , i2 = p(i1,j) , ... , ik+1 = p(ik,j) , ...
, p(im,j) = j


THUẬT TỐN PRIM
Tìm cây phủ nhỏ nhất
Giải thuật
• Đầu vào:
– Đồ thị G=(V,E) với trọng số.

– Các đỉnh ký hiệu là: 1, 2, ... , n
– Trọng số của cạnh (i,j), (i,j)E, ký hiệu là cij
• Đầu ra:
Cây phủ nhỏ nhất T, hoặc kết luận đồ thị không
liên thông.


THUẬT TOÁN PRIM
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)
Thêm cạnh:
Ký hiệu M là tập
M = { (i,j)E  iT & j T }
Tìm cạnh (k,h)M sao cho
ckh = min{cij  (i,j)M}
Nếu ckh < , thêm cạnh (k,h) và đỉnh h vào T, sang
bước (2).
Ngược lại, kết thúc. Kết luận đồ thị G không liên thông.


THUẬT TỐN STEINER.
• Đầ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 TỐN STEINER.
• 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ị <WS> sinh bởi WS 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.


THIẾT KẾ VÀ CÀI ĐẶT CHƯƠNG TRÌNH

• Thiết kế cấu trúc dữ liệu và thuật tốn
• Cài đặt chương trình


THIẾT KẾ VÀ CÀI ĐẶT CHƯƠNG TRÌNH
• 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;
G=aij với i=1..n, j=1..n (n số đỉnh của đồ thị G);
trong đó:

aij = trọng số cạnh nối trực tiếp từ i đến j , aij là
số nguyên (int)
aij = ∞ nếu giữa i và j không nối trực tiếp với
nhau


CÁC THUẬT TỐN

• Thuật tốn
chương trình
chính


CÁC THUẬT TỐN

• Hàm DocFile()


CÁC THUẬT TỐN

• Hàm Prim()


CÁC THUẬT TỐN

• Hàm Try(int i)


CÁC THUẬT TỐN


• Hàm CayPhu()



×