Tim đường ngắn nhất

14 168 0
Tim đường ngắn nhất

Đ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

SỞ GIÁO DỤC VÀ ĐÀO TẠO THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG CAO ĐẲNG KỸ THUẬT LÝ TỰ TRỌNG -oOo KHOA CÔNG NGHỆ THÔNG TIN LÝ THUYẾT ĐỒ THỊ Thuật Toán Bellman-Ford ĐỀ TÀI: Tìm đường ngắn Giáo viên hướng dẫn Thực Hoàng Tuấn Thành Vũ Thị Thái Linh Võ Đình Phù Phạm Cao Hoàng Tuấn o0o 2013 LỜI NÓI ĐẦU Đầu tiên cho phép nhóm chúng em cám ơn quý thầy cô tận tình hướng dẫn giúp nhóm chúng em hoàn tất đề tài mình, đạt số kết tốt Tuy nhiên, bên cạnh kết tốt đó, đề tài nhóm em không tránh khỏi sai sót, hạn chế Kính mong quý thầy cô thong cảm góp ý để đề tài nhóm chúng em hoàn thiện Những ý kiến đóng góp quý thầy cô học kinh nghiệm quý giá cho chúng em tương lai để giúp chúng em hoàn thiện đề tài Nhóm xin chân thành cám ơn quý thầy cô tạo điều kiện thuận lợi thời gian thực đề tài Nhóm thực MỤC LỤC I Gới thiệu thuật toán 1:Thuật toán Bellman-Ford thuật toán tính đường ngắn nguồn đơn đồ thị có hướng có trọng số (trong số cung có trọng số âm) Thuật toán Dijkstragiải toán nhiên Dijkstra có thời gian chạy nhanh đơn giản đòi hỏi trọng số cung phải có giá trị không âm 2:Thuật toán Bellman Ford chạy thời gian O(V·E), V số đỉnh E số cung đồ thị 2,Tư tưởng thuật toán [1] - Bước 1: Khởi tạo ∏(0,x)=0; ∏(0,i)=+∞, ∀i≠x k=1 - Bước 2: Với i∈X ta đặt: ∏(k,i)=min({∏(k-1,i)}∪{∏(k-1,j)+L[j][i]}) - Bước 3: Nếu ∏(k,i)=∏(k-1,i) với i∈X ∏(k,i) độ dài đường ngắn từ x đến i Ngược lại k3 1->4 mà không cần làm lại Nội dung thuật toán function BellmanFord(danh_sách_đỉnh, danh_sách_cung, nguồn) // hàm yêu cầu đồ thị đưa vào dạng danh sách đỉnh, danh sách cung // hàm tính giá trị khoảng_cách đỉnh_liền_trước đỉnh, // cho giá trị đỉnh_liền_trước lưu lại đường ngắn // bước 1: khởi tạo đồ thị for each v in danh_sách_đỉnh: if v is nguồn then khoảng_cách(v):= else khoảng_cách(v):= vô đỉnh_liền_trước(v):= null // bước 2: kết nạp cạnh for i from to size(danh_sách_đỉnh): for each (u,v) in danh_sách_cung: if khoảng_cách(v) > khoảng_cách(u) + trọng_số(u,v): khoảng_cách(v):= khoảng_cách(u) + trọng_số(u,v) đỉnh_liền_trước(v):= u // bước 3: kiểm tra chu trình âm for each (u,v) in danh_sách_cung: if khoảng_cách(v) > khoảng_cách(u) + trọng_số(u,v): error "Đồ thị chứa chu trình âm" 3,Chứng minh tính đắn Tính đắn thuật toán chứng minh quy nạp Thuật toán phát biểu xác theo kiểu quy nạp sau: 3.1:Bổ đề Sau i lần lặp vòng for: Nếu Khoảng_cách(u) giá trị vô lớn, độ dài đường từ s tới u; Nếu có đường từ s tới u qua nhiều i cung, Khoảng_cách(u) có giá trị không vượt độ dài đường ngắn từ s tới u qua tối đa i cung 3.2:Chứng minh Trường hợp bản: Xét i=0 thời điểm trước vòng for chạy lần Khi đó, với đỉnh nguồn khoảng_cách(nguồn) = 0, điều Đối với đỉnh u khác,khoảng_cách(u) = vô cùng, điều đường từ nguồn đến u qua cung Trường hợp quy nạp: 1: Chứng minh câu Xét thời điểm khoảng cách tới đỉnh cập nhật công thức khoảng_cách(v) := khoảng_cách(u) + trọng_số(u,v) Theo giả thiết quy nạp,khoảng_cách(u) độ dài đường từ nguồn tới u Do đó, khoảng_cách(u) + trọng_số(u,v) độ dài đường từ nguồn tới u tới v 2: Chứng minh câu 2: Xét đường ngắn từ nguồn tới u qua tối đa i cung Giả sử v đỉnh liền trước u đường Khi đó, phần đường từ nguồn tới v đường ngắn từnguồn tới v qua tối đa i-1 cung Theo giả thuyết quy nạp, khoảng_cách(v) sau i-1 vòng lặp không vượt độ dài đường Do đó, trọng_số(v,u) + khoảng_cách(v) có giá trị không vượt độ dài đường từ s tới u Trong lần lặp thứ i, khoảng_cách(u) lấy giá trị nhỏ khoảng_cách(v) + trọng_số(v,u) với v Do đó, sau ilần lặp, khoảng_cách(u) có giá trị không vượt độ dài đường ngắn từ nguồn tới u qua tối đa i cung Khi i số đỉnh đồ thị, đường tìm đường ngắn toàn cục, trừ đồ thị có chu trình âm Nếu tồn chu trình âm mà từ đỉnh nguồn đến không tồn đường nhỏ (vì lần quanh chu trình âm lần giảm trọng số đường) 4:ứng dụng đinh tuyến 4.A:Ứng dụng định tuyến Một biến thể phân tán thuật toán Bellman-Ford dùng giao thức định tuyến vector khoảng cách, chẳng hạn giao thức RIP (Routing Information Protocol) Đây biến thể phân tán liên quan đến nút mạng (các thiết bị định tuyến) hệ thống tự chủ (autonomous system), ví dụ tập mạng IP thuộc sở hữu nhà cung cấp dịch vụ Internet(ISP) Thuật toán gồm bước sau: Mỗi nút tính khoảng cách tất nút khác hệ thống tự chủ lưu trữ thông tin bảng Mỗi nút gửi bảng thông tin cho tất nút lân cận 3 Khi nút nhận bảng thông tin từ nút lân cận, tính tuyến đường ngắn tới tất nút khác cập nhật bảng thông tin Nhược điểm thuật toán Bellman-Ford cấu hình • • • Không nhân rộng tốt Các thay đổi tô-pô mạng không ghi nhận nhanh cập nhật lan truyền theo nút Đếm dần đến vô (nếu liên kết hỏng nút mạng hỏng làm cho nút bị tách khỏi tập nút khác, nút tiếp tục ước tính khoảng cách tới nút tăng dần giá trị tính được, xảy việc định tuyến thành vòng tròn) 4.B:Minh họa hình Tìm đường ngắn từ đỉnh B tới đỉnh D đồ thị G [3] Đồ thị G - Bước 0: Ta đánh dấu đỉnh xuất phát = 0, đinh lại vô cực Bước - Bước 1: Tại đỉnh A có đỉnh B vào có chi phí (2) < chi phí trước (∞) => cập nhật lại chi phí đỉnh A Tại đỉnh C có đỉnh B vào có chi phí (6) < chi phí trước (∞) => cập nhật lại chi phí đỉnh C Bước - Bước 2: Tại đỉnh C có đỉnh A vào có chi phí (5) < chi phí trước (6) => cập nhật lại chi phí đỉnh C Tại đỉnh D có đỉnh C vào có chi phí (8) < chi phí trước (∞) => cập nhật lại chi phí đỉnh D Bước - Bước 3: Tại đỉnh D có đỉnh C vào có chi phí (7) < chi phí trước (8) => cập nhật lại chi phí đỉnh D Bước - Bước 4: Bước giống bước nên thuật toán dừng Bước - Kết luận: Có đường ngắn từ B->D: B->A->C->D - Lưu ý: - Nếu Bước không giống bước => kết luận đường ngắn từ B->D 5:Cài đặt public void bellmanFord(int Diem_dau) { for (int i = 0; i < sodinh; i++) { khoangcach[i] = matrantrongso[Diem_dau, i]; Truoc[i] = Diem_dau; } for (int i = 0; i < sodinh - 2; i++) { for (int u = 0; u < sodinh; u++) { for (int v = 0; v < sodinh; v++) { int tmp = khoangcach[u] + matrantrongso[u, v]; if (khoangcach[v] > tmp) { khoangcach[v] = tmp; Truoc[v] = u; } } } } 6:Phân công Người thực hiện: Phạm Cao Hoàng Tuấn STT Công việc Họp nhóm: • Chọn dề tài • Phân tích nội dung đề tài • Phân tích thuật toán Tìm tài liệu tham khảo Thực code: • Thực khâu đưa liệu vào chuyển vào mảng chiều đê xử lý • Tích hợp hàm • Đưa vào hàm vẽ Họp nhóm bàn báo cáo: • Xây dựng dàn thuyết trình • Thông qua ý kiến thành viên • Thống phần thuyết trình Phối hợp với nhóm hoàn thành thuyết trình Báo cáo hoàn tất nộp cho giáo viên hướng dẫn Kết hoạt động Đã hoàn thành Đã hoàn thành (họp nhóm facebook) Đã hoàn thành (họp nhóm facebook) Đã hoàn thành Đã hoàn thành Đã hoàn thành Người thực hiện: Hoàng Tuấn Thành STT Công việc Họp nhóm: • Chọn dề tài • Phân tích nội dung đề tài • Phân tích thuật toán Tìm tài liệu tham khảo Kết hoạt động Đã hoàn thành Đã hoàn thành Thực code: • Xử lý tìm thành phần liên thông • Cải tiến hàm vẽ (vẽ hình sau xét) Họp nhóm bàn báo cáo: • Xây dựng dàn thuyết trình • Thông qua ý kiến thành viên • Thống phần thuyết trình Phối hợp với nhóm hoàn thành thuyết trình Báo cáo hoàn tất nộp cho giáo viên hướng dẫn (họp nhóm facebook) Đã hoàn thành (họp nhóm facebook) Đã hoàn thành Đã hoàn thành Đã hoàn thành Người thực hiện:Võ Đình Phú STT Công việc Họp nhóm: • Chọn dề tài • Phân tích nội dung đề tài • Phân tích thuật toán Tìm tài liệu tham khảo Thực code: • Sửa chữa lỗi phần lấy liệu vào đưa vào mảng Họp nhóm bàn báo cáo: Kết hoạt động Đã hoàn thành Đã hoàn thành (họp nhóm facebook) Đã hoàn thành (họp nhóm facebook) Đã hoàn thành Xây dựng dàn thuyết trình • Thông qua ý kiến thành viên • Thống phần thuyết trình Phối hợp với nhóm hoàn thành thuyết trình Báo cáo hoàn tất nộp cho giáo viên hướng dẫn • Đã hoàn thành Đã hoàn thành II.Nhận xét đánh giá - [...]... dữ liệu vào và chuyển vào mảng 2 chiều đê xử lý • Tích hợp các hàm của nhau • Đưa vào hàm vẽ Họp nhóm bàn về bài báo cáo: • Xây dựng dàn bài thuyết trình • Thông qua ý kiến của từng thành viên • Thống nhất các phần trong bài thuyết trình Phối hợp với nhóm hoàn thành bài thuyết trình Báo cáo hoàn tất nộp cho giáo viên hướng dẫn Kết quả hoạt động Đã hoàn thành Đã hoàn thành (họp nhóm trên facebook) Đã... Thực hiện code: • Xử lý và tìm thành phần liên thông • Cải tiến hàm vẽ (vẽ ra hình sau khi xét) Họp nhóm bàn về bài báo cáo: • Xây dựng dàn bài thuyết trình • Thông qua ý kiến của từng thành viên • Thống nhất các phần trong bài thuyết trình Phối hợp với nhóm hoàn thành bài thuyết trình Báo cáo hoàn tất nộp cho giáo viên hướng dẫn (họp nhóm trên facebook) Đã hoàn thành (họp nhóm trên facebook) Đã hoàn thành... Kết quả hoạt động Đã hoàn thành Đã hoàn thành (họp nhóm trên facebook) Đã hoàn thành (họp nhóm trên facebook) Đã hoàn thành Xây dựng dàn bài thuyết trình • Thông qua ý kiến của từng thành viên • Thống nhất các phần trong bài thuyết trình Phối hợp với nhóm hoàn thành bài thuyết trình Báo cáo hoàn tất nộp cho giáo viên hướng dẫn • 5 6 Đã hoàn thành Đã hoàn thành II.Nhận xét và đánh giá

Ngày đăng: 13/06/2016, 18:39

Từ khóa liên quan

Mục lục

  • I. Gới thiệu thuật toán

    • Người thực hiện: Hoàng Tuấn Thành

    • Người thực hiện:Võ Đình Phú

    • II.Nhận xét và đánh giá

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan