1. Trang chủ
  2. » Công Nghệ Thông Tin

Tiểu Luận Thuật Toán Prim

21 1,9K 53

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 215 KB

Nội dung

Bài tìm hiểu chi tiết kỹ càng về thuật toán Prim gôm có lịch sử thuật toán, mô tả thuật toán,chứng minh tính đúng đắn của thuậ toán, lưu đồ thuật toán, cài đặt thuật toán (code), Phần code rõ ràng có chú thích.

Fb.com/vanvananh.anan Bài toán tối ưu toán muôn thưở ngành tin học có ứng dụng rộng rãi đa dạng Các toán tối ưu thường xuất ngành kinh tế kĩ thuật lý mà giới có nhiều thuật toán để giải toán tối ưu Một số kể đến thuật toán Prim I GIỚI THIỆU THUẬT TOÁN PRIM Bài toán khung nhỏ Bài toán khung (cây bao trùm) nhỏ đồ thị số toán tối ưu đồ thị tìm ứng dụng nhiều lĩnh vực khác đời sống Để minh họa cho ứng dụng đó, tham khảo ba mô hình thực tế tiêu biểu toán: • Bài toán xây dựng hệ thống cable: Giả sử muốn xây dựng hệ thống cable điện thoại nối n điểm mạng viễn thông cho điểm mạng có đường truyền tin tới điểm khác Biết chi phí xây dựng hệ thống cable từ điểm i đến điểm j c[i,j] Hãy tìm cách xây dựng hệ thống mạng cable cho chi phí nhỏ • Bài toán xây dựng hệ thống đường sắt: Giả sử ta muốn xây dựng hệ thống đường sắt nối n thành phố cho hành khách từ thành phố đến thành phố lại Mặt khác quan điểm kinh tế đòi hỏi chi phí xây dựng hệ thống đường phải nhỏ Rõ ràng đồ thị mà đỉnh thành phố cạnh tuyến đường sắt nối thành phố tương ứng với phương án xây dựng tối ưu phải Vì vây, toán đặt dẫn toán tìm khung nhỏ đồ thị đầy đủ n đỉnh, đỉnh tương ứng với thành phố, với độ dài các cạnh chi phí xây dựngđường ray nối hai thành phố tương ứng (chú ý Fb.com/vanvananh.anan toán ta giả thiết không xây dựng tuyến đường sắt có nhà ga phân tuyến nằm thành phố) • Bài toán nối mạng máy tính: Cần nối mạng hệ thống gồm n máy tính đánh số từ đến n Biết chi phí nối máy i với máy j c[i,j], i,j = 1, 2, ,n ( thông thường chi phí phụ thuộc vào độ dài cáp nối cần sử dụng) Hãy tìm cách nối mạng cho tổng chi phí nối mạng nhỏ Và toán khung nhỏ phát biểu sau: Cho đồ thị G= đồ thị vô hướng liên thông với tập đỉnh V={1,2,3…,n} tập cạnh E gồm m cạnh Mỗi cạnh e đồ thị gán với sốc(e) gọi trọng số cạnh Giả sử H= khung đồ thị G Ta gọi độ dài c(H) khung H tổng độ dài cạnh : c(H)= ∑ e∈ Tc(e) Bài toán đặt là, số khung đồ thị tìm khung có độ dài nhỏ đồ thị Để giải toán tìm khung nhỏ nhất, liệt kê toàn khung chọn số khung liệt kê khung có độ dài nhỏ Tuy nhiên số khung đồ thị lại lớn cỡ n n-2 phương án hoàn toàn không khả thi cần với đồ thị với số đỉnh cỡ chục phương án trở nên vô dụng Rất may có hai thuật toán vô hiệu để giải toàn thuật toán Prim thuật toán Kruskal Chúng ta tìm hiểu thuật toán Prim Sự đời thuật toán Prim Thuật toán Prim mang tên người láng giềng gần nhất, hay phương pháp lân cận gần nhất,là thuật toán tham lam để tìm khung nhỏ đồ thị vô hướng có trọng số liên thông Nghĩa tìm tập hợp cạnh đồ thị tạo thành chứa tất đỉnh, cho tổng trọng số cạnh nhỏ Fb.com/vanvananh.anan Thuật toán tìm năm 1930 nhà toán học người Séc Vojtěch Jarník sau nhà nghiên cứu khoa học máy tính Robert C Prim năm 1957 lần độc lập Edsger Dijkstra năm 1959 Do có tên gọi thuật toán DJP, thuật toán Jarník, hay thuật toán Prim–Jarník II MÔ TẢ THUẬT TOÁN Ý tưởng Nạp dần đỉnh vào khung Mỗi lần chọn đỉnh chưa nạp đỉnh kề gần với đỉnh nạp Cụ thể sau: Bắt đầu từ đỉnh tùy ý đồ thị, nối đỉnh với đỉnh thứ hai cho trọng số cạnh nối hai đỉnh nhỏ Tiếp theo, từ hai đỉnh đó, tìm cạnh có độ dài nhỏ nhất, điều dẫn tới đỉnh thứ ba thu phận gồm đỉnh cạnh Quá trình tiếp tục ta nhận gồm n-1 cạnh, khung nhỏ cần tìm Ta thấy rõ qua ví dụ hình vẽ sau: 20 33 18 16 17 14 Bắt đầu từ đỉnh 5 Fb.com/vanvananh.anan Fb.com/vanvananh.anan Fb.com/vanvananh.anan Fb.com/vanvananh.anan Mô tả Begin Bước (Khởi tạo): VH = {s}; //Tập đỉnh khung thiết lập ban đầu s V=V\{s}; //Tập đỉnh V bớt s T=∅; //Tập cạnh khung thiết lập ban đầu ∅ D(H)=0;//Độ dài khung thiết lập Bước (Lặp): while(V≠∅) do{ e=; //cạnh có độ dài nhỏ thỏa mãn u∈V, v∈VH d(H)=d(H)+d(e);//thiết lập độ dài khung nhỏ T=T∪ {e};//Kết nạp e vào khung V=V\{u};//Tập đỉnh V bớt đỉnh u VH=VH∪{u};//Tập đỉnh VH thêm vào đỉnh u } Endwhile; Fb.com/vanvananh.anan Bước (Trả lại kết quả): if(|T|d[e] Đặt T2 đồ thị thu cách xóa e’ thêm e vào T1 Do T2 liên thông, có số cạnh T1, tổng trọng số cạnh không trọng số T1, nên bao trùm nhỏ G chứa e tất cạnh thuật toán chọn trước Cứ lặp lại lập luận nhiều lần, cuối ta thu bao trùm nhỏ G giống hệt T Vì T bao trùm nhỏ Ưu điểm so với Kruskal 10 Fb.com/vanvananh.anan Thuật toán Kruskal làm việc hiệu với đồ thị dày (số cạnh cỡ m≈n(n-1)/2) Trong trường hợp thuật toán Prim tỏ hiệu Tuy nhiên làm việc với đồ thị thưa người ta thường lựa chọn thuật toán Kruskal thay thuật toán Prim IV CÀI ĐẶT THUẬT TOÁN Lưu đồ thuật toán //lệnh if cần bổ sung i chạy i++ vào lưu đồ INPUT g[i][j],n N[],u=1,d[],vt[] Đ d[v]=35000 vt[u]=1 N[i]=14 int i=1 S i

Ngày đăng: 22/03/2017, 14:40

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w