ĐẠ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Ậ
Trang 1ĐẠ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
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
Trang 2MỤC LỤC
Trang
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
Trang 3LỜ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
Trang 4CHƯƠ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
Trang 5CHƯƠ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();
Trang 6K:=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:
>
Trang 7* Thủ tục tìm đường đi ngắn nhất:
Trang 8# 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
Trang 9#Tìm một đỉnh với khoảng cách tạm thời ngắn nhất từ x
Trang 10* 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ị:
Trang 11* Đỉ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
Trang 12CHƯƠ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 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, khái quát và đưa ra một
ví 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
Trang 13TÀ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
NXB KH và KT, 2002
[3] http://www-rohan.sdsu.edu/~ituba/math3134s05/dijkstra/dijkstra.html