Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 13 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
13
Dung lượng
568,5 KB
Nội dung
Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHÓA LUẬN LẬP TRÌNH TÍNH TOÁN HÌNH THỨC ĐỀ TÀI LẬP TRÌNH SYMBOLIC CHO BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT THEO THUẬT TOÁN DIJKSTRA Nguyễn Tấn – CH1101038 1 Học viên : Nguyễn Tấn Mã số: CH1101038 Lớp : Cao học – Khóa 6 GVHD: PSG.TS Đỗ Văn Nhơn Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra MỤC LỤC Trang Mục lục 2 Lời mở đầu 3 Chương I: TỔNG QUAN VỀ PHẦN MỀM MAPLE 4 1) Giới thiệu Maple 2) Đặc điểm 4 4 Chương II: LẬP TRÌNH SYMBOLIC CHO BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT THEO THUẬT TOÁN DIJKSTRA 5 1) Bài toán tìm đường đi ngắn nhất 2) Thuật giải Dijkstra 3) Thủ tục tìm đường đi ngắn nhất theo thuật toán Dijkstra 5 5 6 Chương III: KẾT LUẬN 11 Tài liệu tham khảo 12 Nguyễn Tấn – CH1101038 2 Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra LỜI MỞ ĐẦU Ngày nay, với sự phát triển mạnh mẽ của công nghệ, cả thế giới đang chứng kiến sự bùng nổ như vũ bão của công nghệ thông tin. Cho đến nay công nghệ thông tin đã và đang xâm nhập vào tất cả các lĩnh vực khoa học, kinh tế, đời sống, … Trong khung cảnh đó, giáo dục và đào tạo được xem như “mảnh đất màu mỡ” để cho các ứng dụng, công cụ tiên tiến phát triển, mang đến những biến đổi sâu sắc có tính cách mạng trên quy mô toàn cầu trong giáo dục, đào tạo. Một trong những công cụ hữu ích, mạnh mẽ giúp việc dạy và học trở nên sinh động, trực quan và hiệu quả hơn chính là Maple. Nó đã thực sự trở nên hữu dụng trong việc dạy học một số môn tự nhiên như toán, lý, hóa, … Với những kiến thức đã được cung cấp trong môn học lập trình tính toán hình thức, em đã chọn đề tài “Lập trình Symbolic cho bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra” làm nội dung nghiên cứu. Để hoàn thành khóa luận này, em xin chân thành cảm ơn thầy PGS.TS.Đỗ Văn Nhơn, người đã chỉ dẫn tận tình, cung cấp thông tin, tư liệu cũng như những bài giảng có giá trị để giúp em hoàn thành đề tài. Việc đầu tư nghiên cứu đề tài còn nhiều hạn chế, chỉ mang tính chất một bài khóa luận môn học, chỉ tìm hiểu và minh họa một bài toán cụ thể. Do đó không thể nào tránh được những thiếu sót. Kính mong sự thông cảm và chia sẻ của thầy. Thành phố Hồ Chí Minh, tháng 01 năm 2013. Nguyễn Tấn – CH1101038 3 Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra CHƯƠNG I: TỔNG QUAN VỀ PHẦN MỀM MAPLE 1. GIỚI THIỆU MAPLE Phần mềm Maple là kết quả của nhóm các nhà khoa học trường Đại học Waterloo - Canada và là một trong những bộ phần mềm toán học được sử dụng rộng rãi nhất hiện nay. MAPLE là phần mềm có một môi trường tính toán khá phong phú, hỗ trợ hầu hết các lĩnh vực của toán học như: Giải tích số, đồ thị, đại số hình thức do đó ta dễ dàng tính được các giá trị gần đúng, rút gọn biểu thức, giải phương trình, bất phương trình, hệ phương trình, tính giới hạn, đạo hàm, tích phân của hàm số, vẽ đồ thị, tính diện tích, thể tích, biến đổi ma trận, khai triển các chuỗi, tính toán thống kê, xử lý số liệu, số phức, phương trình vi phân, phương trình đạo hàm riêng và lập trình giải các bài toán với cấu trúc chương trình đơn giản. Ngoài ra, với phần mềm này ta dễ dàng biên soạn các sách giáo khoa điện tử với chức năng Hyperlink tạo các siêu văn bản rất đơn giản mà không cần đến sự hỗ trợ của bất kỳ một phần mềm nào khác (chẳng hạn PageText, Word, Frontpage ). Với các chức năng trên, MAPLE là công cụ đắc lực hỗ trợ cho những người làm toán. 2. ĐẶC ĐIỂM - Maple là một hệ thống tính toán trên các ký hiệu và biểu thức toán học. - Có thể thực hiện hầu hết các phép toán cơ bản của chương trình toán đại học và sau đại học. Tính toán được nghiệm chính xác và gần đúng của một lớp rộng các bài toán lý thuyết và ứng dụng. - Cung cấp các công cụ minh họa hình học thuận tiện bao gồm: đồ thị, hình vẽ tĩnh và động của các đường và mặt được cho bởi các hàm tùy ý trong nhiều hệ tọa độ khác nhau. - Một ngôn ngữ lập trình đơn giản và mạnh mẽ có khả năng chuyển đổi sang các ngôn ngữ lập trình khác. - Cho phép trích xuất dữ liệu ra các định dạng khác nhau như Latex, word, HTML, … - Một công cụ biên soạn giáo trình điện tử và trình diễn bài giảng thuận tiện. Nguyễn Tấn – CH1101038 4 Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra CHƯƠNG II: LẬP TRÌNH SYMBOLIC CHO BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT THEO THUẬT TOÁN DIJKSTRA 1) BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT Bài toán tìm đường đi ngắn nhất là tìm đường đi trong một đồ thị có trọng số (chiều dài) nối 2 đỉnh x và y đã cho trước với đặc tính là tổng các trọng số của tất cả các cạnh là nhỏ nhất trong tất cả các đường đi từ đỉnh x đến đỉnh y. Nguyên lý tối ưu là nếu tồn tại một đường đi ngắn nhất từ đỉnh i đến đỉnh j và đỉnh k nằm trên con đường đi này thì ta phải có các đường đi từ đỉnh i đến đỉnh k và đường đi từ đỉnh k đến đỉnh j là những đường đi ngắn nhất. 2) THUẬT GIẢI DIJKSTRA G: đồ thị với x là đỉnh bắt đầu. weight: là thủ tục trả về trọng số của cạnh. L(v): là bảng các khoảng cách tạm từ x mà lưu chiều dài đường đi ngắn nhất được tìm thấy từ x đến v. K(v): là bảng chứa đỉnh trước v trong đường đi ngắn nhất từ x đến v. P: là tập chứa đỉnh gần nhất k đối với x. Q: là tập đỉnh bổ sung cho P v và u là các biến tạm được dùng trong vòng lặp chạy qua các đỉnh. Bước 1: Kiểm tra If không tồn tại một cạnh từ đỉnh u tới đỉnh v then Return infinity else return trọng số của cạnh đó. Bước 2: Khởi tạo P:={}; # P rỗng Q:={tất cả các đỉnh}; L:=table(); Nguyễn Tấn – CH1101038 5 Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra K:=table(); For v in tất cả các đỉnh của đồ thị G do L(v): = infinity; # Tập tất cả L(v) đến infinity end do; Bước 3: L[x]:=0; # Khoảng cách ban đầu là 0 u:=x; # x là đỉnh đầu tiên đưa vào P While L[u] < infinity do Chuyển u vào P và loại nó khỏi Q; If Q rỗng then Dừng; # Cập nhật các trọng số tạm trên các đỉnh nếu có đường đi ngắn nhất từ x tới v If L[u]+weight(G,u,v) < L[v] then L[v]:=L[u]+weight(G,u,v); K[v]:=u; #Tìm đỉnh với khoảng cách tạm ngắn nhất từ x u:=Q[1]; for v in Q do If L[v]<L[u] then u:=v; return [L,K]; # Trả về một mảng mà các phần tử của nó là bảng L và K 3) THỦ TỤC TÌM ĐƯỜNG ĐI NGẮN NHẤT THEO THUẬT TOÁN DIJKSTRA * Khai báo sử dụng thư viện networks: > Nguyễn Tấn – CH1101038 6 Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra * Thủ tục tìm đường đi ngắn nhất: Nguyễn Tấn – CH1101038 7 Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra # Cập nhật trọng số trên các đỉnh tạm thời # Cập nhật đường đi ngắn nhất từ x đến v Nguyễn Tấn – CH1101038 8 Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra #Tìm một đỉnh với khoảng cách tạm thời ngắn nhất từ x Nguyễn Tấn – CH1101038 9 Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra * Thủ tục đưa ra đường đi ngắn nhất giữa hai đỉnh u và v: * Khai báo đồ thị với các đỉnh và cạnh: * Khai báo trọng số cho các cạnh của đồ thị: * Vẽ đồ thị: Nguyễn Tấn – CH1101038 10 [...]... trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra CHƯƠNG III: KẾT LUẬN Maple là một công cụ mạnh mẽ và hữu ích cho việc lập trình tính toán hình thức Symbolic Thông qua công cụ này, ta có thể lập trình giải quyết những bài toán mà nếu sử dụng các ngôn ngữ lập trình khác sẽ gặp nhiều khó khăn và tốn nhiều thời gian trong việc tính toán, xử lý Với ví dụ minh họa tìm đường đi ngắn. .. đường đi ngắn nhất theo thuật toán Dijkstra sử dụng Maple nêu trên, một lần nữa có thể khẳng định rằng Maple đã, đang và sẽ tiếp tục là công cụ hỗ trợ, giải quyết đắc lực cho việc lập trình, tính toán hình thức và ứng dụng giải quyết được nhiều bài toán phức tạp Việc tìm hiểu và nghiên cứu về đề tài Lập trình Symbolic cho bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra chỉ là mức độ tìm hiểu,.. .Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra * Đỉnh bắt đầu: Ta truyền tham số dothi và biến S (đỉnh bắt đầu) vào hàm Dijkstra, kết quả lưu vào mảng ngannhat * Đỉnh kết thúc: Vòng lặp sẽ được thực hiện cho đến khi đỉnh cuối A được truyền vào và hàm Dijkstra sẽ thực hiện và đưa ra đường đi ngắn nhất Đường đi ngắn nhất từ đỉnh S đến đỉnh A Nguyễn Tấn – CH1101038 11 Lập. .. dụ giải quyết bài toán với việc lập trình Symbolic bằng việc sử dụng công cụ Maple Do đó, bài luận này còn rất nhiều thiếu sót cũng như những hạn chế của nó Song việc tìm hiểu đề tài cũng mở ra thêm nhiều hướng nghiên cứu sâu hơn bằng việc sử dụng một công cụ lập trình tính toán hình thức Nguyễn Tấn – CH1101038 12 Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra TÀI LIỆU... đường đi ngắn nhất theo thuật toán Dijkstra TÀI LIỆU THAM KHẢO [1] TS Đỗ Văn Nhơn, Bài giảng Lập trình tính toán hình thức, Trường Đại học CNTT TP.HCM [2] Phần mềm Maple 16 [2] Phạm Huy Đi n, Tính toán, lập trình và giảng dạy toán học trên Maple, NXB KH và KT, 2002 [3] http://www-rohan.sdsu.edu/~ituba/math3134s05 /dijkstra/ dijkstra.html Nguyễn Tấn – CH1101038 13 . II: LẬP TRÌNH SYMBOLIC CHO BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT THEO THUẬT TOÁN DIJKSTRA 5 1) Bài toán tìm đường đi ngắn nhất 2) Thuật giải Dijkstra 3) Thủ tục tìm đường đi ngắn nhất theo thuật toán. II: LẬP TRÌNH SYMBOLIC CHO BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT THEO THUẬT TOÁN DIJKSTRA 1) BÀI TOÁN TÌM ĐƯỜNG ĐI NGẮN NHẤT Bài toán tìm đường đi ngắn nhất là tìm đường đi trong một đồ thị có trọng. giáo trình đi n tử và trình diễn bài giảng thuận tiện. Nguyễn Tấn – CH1101038 4 Lập trình Symbolic - Bài toán tìm đường đi ngắn nhất theo thuật toán Dijkstra CHƯƠNG II: LẬP TRÌNH SYMBOLIC CHO BÀI