DÙNG MAPLE GIẢI MỘT SỐ BÀI TOÁN CƠ BẢN VỀ ĐỐ THỊMỞ ĐẦU: Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu và có nhiều ứng dụng trong ngành công nghệ thông tin.. - Giải bài toán tô
Trang 1MỤC LỤC
MỞ ĐẦU: 2
1 Giới thiệu mapple – công cụ lập trình symbolic 2
Mapple có các chức năng cơ bản sau: 3
Một số lệnh để lập trình: 3
2 Chương trình: 4
3 Dữ liệu thử: 19
4 Kết luận 29
Tài liệu tham khảo: 29
Trang 2DÙNG MAPLE GIẢI MỘT SỐ BÀI TOÁN CƠ BẢN VỀ ĐỐ THỊ
MỞ ĐẦU:
Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu và có nhiều ứng dụng trong ngành công nghệ thông tin Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất vào những năm đầu của thế kỷ 18 bởi nhà toán học lỗi lạc người Thụy Sỹ: Leonhard Euler Chính ông là người đã sử dụng đồ thị để giải bài toán nổi tiếng về 7 cái cầu ở thành phố Konigberg
Những ứng dụng cơ bản của đồ thị như:
- Xác định tính liên thông trong một mạng máy tính: hai máy tính nào đó có thể truyền dữ liệu cho nhau được không
- Tìm đường đi ngắn nhất trên mạng giao thông
- Giải các bài toán tối ưu: lập lịch, phân bố tần số cho các trạm phát thanh, truyền hình
- Giải bài toán tô màu trên bản đồ: tìm số màu ít nhất để tô các quốc gia sao cho hai quốc gia kề nhau phải được tô khác màu
- …
1 Giới thiệu mapple – công cụ lập trình symbolic
Maple là một hệ thống tính toán trên các biểu thức đại số và minh hoạ toán học mạnh mẽ của công ty Warterloo Maple Inc (http://www.maplesoft.com) Maple ra đời năm 1991 đến nay đã phát triển đến phiên bản 15 Maple có cách càiđặt đơn giản, chạy được trên nhiều hệ điều hành, có cấu trúc linh hoạt để sử dụng tối ưu cấu hình máy và có trình trợ giúp (help) rất dễ sử dụng Từ phiên bản 7, Maple cung cấp ngày càng nhiều các công cụ trực quan, các gói lệnh tự học gắn liền với toán học phổ thông và đại học Ưu điểm đó làm cho nhiều người trên thế giới lựa chọn sử dụng Maple cùng các phần mềm toán học khác áp dụng trong dạy học toán và các công việc tính toán đòi hỏi của thực tiễn và sự phát triển của giáo dục
Có thể nhận thấy rằng ngoài các tính năng tính toán và minh hoạ rất mạnh
mẽ bằng các câu lệnh riêng biệt (thường chỉ cho ta kết quả cuối cùng), Maple còn
là một ngôn ngữ lập trình hướng thủ tục (procedure) Thủ tục là một dãy các lệnhcủa Maple theo thứ tự mà người lập trình định sẵn để xử lí một công việc nào đó,
Trang 3khi thực hiện thủ tục này Maple sẽ tự động thực hiện các lệnh có trong thủ tục đó một cách tuần tự và sau đó trả lại kết quả cuối cùng.
Mapple có các chức năng cơ bản sau:
Là một hệ thống tính toán trên các biểu thức đại số
Có thể thực hiện được hầu hết các phép toán cơ bản trong chương trình toán đại học và sau đại học
Cung cấp các công cụ minh họa hình học thuận tiện gồm: vẽ đồ thị động và tĩnh của các đường và mặt được cho bởi các hàm tùy ý và trong các hệ tọa độ khác nhau
Là một ngôn ngữ lập trình đơn giản và mạnh mẽ, có khả năng tương tác với các ngôn ngữ lập trình khác
Cho phép trích xuất ra các định dạng khác nhau như word, HTML…
Một công cụ biên soạn giáo án và bài giảng điện tử, thích hợp với các lớp học tương tác trực tiếp
Một trợ giáo hữu ích cho học sinh sinh viên trong việc tự học
Một số lệnh để lập trình:
Lệnh IF:
if <dieukien> then <cac_cau_lenh>
| elif <dieukien> then <cac_cau_lenh> |
| for <name> | | in < bieu_thuc > | | while < bieu_thuc > |
do < cac_cau_lenh > end do;
Thủ tục:
Trang 5if type(G,[set(Dinh),set(Canh)])=false and type(G,[set(Dinh),Canh])=false and type(G,[Dinh,set])=false then return false;
Trang 9and type(tapcanh,Canh) = false then
print("Canh them vao khong hop le.");
Trang 11tapcanhbandau:=tapcanhbandau minus {i};
if type(d,Dinh)=false and type(d,set(Dinh))=false then
print("Dinh them vao khong hop le"); return G;
end if;
if type(d,Dinh) then tapdinh:={d}; else tapdinh:=d; end if;
return taodothi([dinh(G) union tapdinh,canh(G)]);
end proc;
# Thủ tục xóa đỉnh trong đồ thị
xoadinh:=proc(G::Dothi,d)
local tapdinh,i,j,D;
if type(d,Dinh)=false and type(d,set(Dinh))=false then
print("Dinh can xoa khong hop le"); return G;
Trang 12if i[1]=dinh then ketqua:={op(ketqua),i[2]};end if;
if type(i,set) then if i[2]=dinh thenketqua:={op(ketqua),i[1]}; end if; end if;
if index[i]=d then dau:=i; end if;
if index[i]=c then cuoi:=i; end if;
end do;
duongdi:=array(1 n);
for i from 1 to n do duongdi[i]:=0;end do;
chuanbi:={dau};
Trang 13dinhke:=timdinhke(D,dinh) minus daduyet;
for i in dinhke do duongdi[i]:=dinh;end do;
chuanbi:=chuanbi union dinhke;
Trang 14if (op(1,j)=i and ember(op(2,j),
tapdinh)) or (op(2,j)=i and member(op(1,j),tapdinh)) then
Trang 17if type(c,Canh)=false then print("Canh khong hop le");
return false; end if;
if member(c,canh(G))=false then
Trang 18print("Canh khong thuoc Do Thi");
if op(1,c)=d or op(2,c)=d then
if op(1,c)=d then dnext:=op(2,c);
else dnext:=op(1,c); end if;
Trang 19if lacau(H,c)=false or baccuadinh(H,d)=1 then
Trang 25Ví dụ 3
G3:=[{a,b,c,d,1},{{b,c},[a,b],[c,a],{1,b}}];
> G:=taodothi(G3); vedothi(G); loaidothi(G);
> G:=xoadinh(G,a): G:=themcanh(G,{[b,d],{c,d}}): vedothi(G);
> lienthong(G);
> G:=xoacanh(G,[d,c]); vedothi(G);
Trang 29Tuy nhiên, do còn nhiều hạn chế như bản thân không nhiều thời gian trongviệc học tập sử dụng chương trình nên bài tập này còn đơn giản và nhiều sai sót.Nhưng qua đó cũng giúp cho em hiểu thêm về một công cụ hỗ trợ tính toán mạnh
mẽ với thư viện phong phú để có thể giải quyết các bài toán một cách dễ dàng
Tài liệu tham khảo:
Trang 30[1] PGS.TS Đỗ Văn Nhơn, Tập tài liệu giảng dạy môn Lập trình Symbolic cho
Trí tuệ nhân tạo, Đại học Công nghệ thông tin – Đại học Quốc gia TP.HCM.
[2] PGS.TS Đỗ Văn Nhơn, Giáo trình Toán rời, Đại học Công nghệ thông tin –Đại học Quốc gia TP.HCM
[3] Tập tài liệu giảng dạy môn Toán rời rạc của thầy TS Nguyễn Viết Đông – Đại
học Khoa học tự nhiên – Đại học Quốc gia TP.HCM
[4] Nguyễn Ngọc Trung, Giáo trình Maple, Đại Học Sư Phạm Tp Hồ Chí Minh[5] Nguyễn Ngọc Trung, Lý thuyết đồ thị, Đại Học Sư Phạm Tp Hồ Chí Minh[6] http://mapplesoft.com
[7] Mục Help của chương trình Mapple v.13.