1. Trang chủ
  2. » Luận Văn - Báo Cáo

ỨNG DỤNG MAPPLE ĐỂ GIẢI BÀI TOÁN TÌM ĐƯỜNG ĐI EULER VÀ ĐƯỜNG ĐI HALMITON TRONG ĐỒ THỊ VÔ HƯỚNG

15 570 0

Đ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 15
Dung lượng 380 KB

Nội dung

CHƯƠNG TRÌNH ĐÀO TẠO THẠC SĨ CNTT QUA MẠNGCHUYÊN ĐỀ LẬP TRÌNH SYMBOLIC CHO TRÍ TUỆ NHÂN TẠO BÁO CÁO ỨNG DỤNG MAPPLE ĐỂ GIẢI BÀI TOÁN TÌM ĐƯỜNG ĐI EULER VÀ ĐƯỜNG ĐI HALMITON TRONG ĐỒ THỊ

Trang 1

CHƯƠNG TRÌNH ĐÀO TẠO THẠC SĨ CNTT QUA MẠNG

CHUYÊN ĐỀ

LẬP TRÌNH SYMBOLIC CHO TRÍ TUỆ NHÂN TẠO

BÁO CÁO

ỨNG DỤNG MAPPLE ĐỂ GIẢI BÀI TOÁN TÌM ĐƯỜNG ĐI EULER VÀ

ĐƯỜNG ĐI HALMITON TRONG ĐỒ THỊ VÔ HƯỚNG

tháng 01 năm 2013

Trang 2

GIỚI THIỆU

Maple là một hệ thống tính toán trên các biểu thức đại số và minh họa hình học mạnh

mẽ của công ty Warterloo Maple Inc (http://www.maplesoft.com), ra đời năm 1991,

đã phát triển đến phiên bản 11 (đến 4/2007) Maple chạy trên tất cả các hệ điều hành,

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 phổ thông và đại học Ưu điểm đó khiến ngày càng có nhiều nước trên thế giới lựa chọn sử dụng Maple trong dạy-học toán tương tác trước đòi hỏi của thực tiễn và sự phát triển của giáo dục

Có thể nêu vắn tắt các chức năng cơ bản của Maple như 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ệc đượ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ị 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 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ư LaTex, 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 và sinh viên trong việc tự học;

Trong phần báo cáo này em có cài đặt “ỨNG DỤNG MAPPLE ĐỂ GIẢI BÀI TOÁN TÌM ĐƯỜNG ĐI EULER VÀ ĐƯỜNG ĐI HALMITON TRONG ĐỒ THỊ VÔ HƯỚNG”, nhằm hiểu rõ hơn về Mapple và sau này có thể ứng dụng Mapple vào trong trong việc triển khai các dự án về giáo dục

Trang 3

MỤC LỤC

PHÂN TÍCH YÊU CẦU 4

1 ĐỊNH NGHĨA VỀ CHU TRÌNH VÀ ĐƯỜNG ĐI EULER 4

2 ĐỊNH LÝ EULER VỀ CHU TRÌNH VÀ ĐƯỜNG ĐI EULER 4

3 CÁC TÍNH CHẤT KHÁC 5

4 ĐƯỜNG ĐI HAMILTON 5

CÁC THỦ TỤC TRONG BÀI TOÁN 5

1 Thủ tục khởi tạo ban đầu: 5

2 Thủ tục tìm chu trình Euler 6

3 Thủ tục tìm chu trình đường đi Euler 8

4 Thủ tục tìm tất cả đường đi Hamilton trong đồ thị G 10

DỮ LIỆU THỬ NGHIỆM 13

TÀI LIỆU THAM KHẢO 15

Trang 4

PHÂN TÍCH YÊU CẦU

1 Định nghĩa về chu trình và đường đi Euler

1 Đường đi Euler (tiếng Anh: Eulerian path, Eulerian trail hoặc Euler walk)

trong đồ thị vô hướng là đường đi của đồ thị đi qua mỗi cạnh của đồ thị đúng một lần

2 Chu trình Euler (tiếng Anh: Eulerian cycle, Eulerian circuit hoặc Euler tour)

trong đồ thị vô hướng) là một chu trình đi qua mỗi cạnh của đồ thị đúng một lần

3 Đồ thị gọi là đồ thị Euler khi nó chứa chu trình Euler, và được gọi là nửa

Euler khi nó chứa đường đi Euler.

4 Đối với các đồ thị có hướng, các thuật ngữ đường đi và chu trình được thay

bằng đường đi có hướng và chu trình có hướng.

2 Định lý Euler về chu trình và đường đi Euler

1 Đồ thị vô hướng liên thông G=(X, E) có chu trình Euler khi và chỉ khi G không

có đỉnh bậc lẻ

2 Đồ thị vô hướng liên thông G=(X, E) có đường đi Euler khi và chỉ khi G có không quá hai đỉnh bậc lẻ Nếu G có hai đỉnh bậc lẻ thì đường đi Euler có hai đầu đường đi nằm ở hai đỉnh bậc lẻ

Phát biểu lại định lý 1: Một đa đồ thị không có điểm cô lập có chu trình Euler nếu và chỉ nếu đồ thị là liên thông và mỗi đỉnh của nó đều có bậc chẵn

Trang 5

3 Các tính chất khác

1 Một đồ thị vô hướng là đồ thị Euler nếu nó liên thông và có thể phân tích thành các chu trình có các cạnh rời nhau

4 Đồ thị có hướng là Euler nếu nó liên thông và có thể phân tích thành các chu trình có hướng với các cung rời nhau

4 Đường đi Hamilton

của đồ thị, mỗi đỉnh đúng một lần Một Chu trình Hamilton là một đường đi

Hamilton sau đi qua tất cả các đỉnh của đồ thị thì trở về đỉnh xuất phát

Một đồ thị có chu trình Hamilton được gọi là đồ thị Hamilton, đồ thị có đường đi Hamilton được gọi là đồ thị nửa Hamilton

Bài toán tìm đường đi và chu trình như vậy được gọi là bài toán Hamilton Bài toán Hamilton là NP đầy đủ

Các thủ tục trong bài toán

1 Thủ tục khởi tạo ban đầu:

> Init:=proc()

restart;

interface( warnlevel = 0 );

with(networks);

#with(LinearAlgebra);

end:

Trang 6

2 Thủ tục tìm chu trình Euler

> Euler:=proc(G::graph)

local H,V,E,vStart,ECycle,C,S,cycleFound,i,j,k;

H:=duplicate(G);

V:=vertices(G);

E:=edges(G);

vStart:=V[1];

ECycle:=[];

while E<>{} do

i:=vStart;

C:=[i];

cycleFound:=false;

while not cycleFound do

#Tim dinh j ke can i, neu j=vStart -> duoc 1 chu trinh

S:=neighbors(i,H);

for j in S do

if j<>vStart then break; fi;

od;

#Them dinh j vao C, roi xoa canh (i,j)

if j=vStart then cycleFound:=true;

else C:=[op(C),j];

Trang 7

fi;

#for k in E do

# if {i,j}=ends(k,H) then

k:=edges({i,j},H,all)[1];

E:=E minus {k};

delete(k,H);

# break;

# fi;

#od;

i:=j;

#Neu tim duoc 1 chu trinh C thi them vao ECycle,

if cycleFound then

#Them chu trinh C vao ECycle tai vi tri vStart

if ECycle=[] then ECycle:=C;

else

i:=1;

while ECycle[i]<>vStart do i:=i+1; od;

ECycle:=[op(1 i-1,ECycle), op(C), op(i nops(ECycle), ECycle)];

fi:

#Tim dinh vStart ke tiep neu con chu trinh

if E<>{} then

Trang 8

V:={};

for i in E do V:=V union ends(i,H) od;

V:=V intersect convert(ECycle,set);

vStart:=V[1];

fi;

fi;

od;

od;

ECycle:=[op(ECycle),ECycle[1]];

return ECycle;

end:

3 Thủ tục tìm chu trình đường đi Euler

> EulerRouting:=proc(G::graph)

local Result,i,vOdd,H,tmp;

if connectivity(G)=0 then

printf("do thi khong lien thong");

return NULL;

fi;

vOdd:={};

for i in vertices(G) do

if vdegree(i,G) mod 2 = 1 then vOdd:=vOdd union {i} fi;

Trang 9

od;

if nops(vOdd)=2 then

H:=duplicate(G);

connect({vOdd[1]},{vOdd[2]},H);

tmp:=Euler(H);

i:=1;

while {tmp[i],tmp[i+1]}<>vOdd do i:=i+1 od;

Result:=[op(i+1 nops(tmp)-1,tmp),op(1 i,tmp)];

printf("Duong di Euler : ");

lprint(Result);

elif nops(vOdd)=0 then

Result:=Euler(G);

printf("Chu trinh Euler tim duoc :");

lprint(Result);

else

printf("Do thi khong co duong di Euler");

fi;

end:

4 Thủ tục tìm tất cả đường đi Hamilton trong đồ thị G

> Hamilton:=proc(Grph::graph)

local R,C,Try,Found,i;

Trang 10

C:=[];

#Found:=false;

Try:=proc(G::graph,v)

local H,S,i,j;

Result:=[op(Result),v];

S:=neighbors(v,G);

H:=duplicate(G);

delete({v},H);

if nops(vertices(H))=1 then

#Found:=true;

#Result:=[op(Result),S[1]];

if edges({S[1],Result[1]},Grph)<>{} then

C:=[op(C),[op(Result),S[1],Result[1]]];

else

R:=[op(R),[op(Result),S[1]]];

fi;

#lprint([op(Result),S[1]]);

return;

elif connectivity(H)=0 then

return;

Trang 11

else

for i in S do

Try(H,i);

Result:=[op(1 nops(Result)-1,Result)];

od;

fi;

end:

for i in vertices(Grph) do

Found:=false;

Result:=[];

Try(Grph,i);

#if Found then

od;

if C<>[] then

printf("Chu trinh Hamilton : ");

for i in C do lprint(i) od;

fi;

if R<>[] then

printf("Duong di Hamilton : ");

for i in R do lprint(i) od;

fi;

Trang 12

if (C=[]) and (R=[]) then

printf("Khong co chu trinh-duong di Hamilton!")

fi;

end:

Trang 13

Dữ liệu thử nghiệm

> new(G):

addvertex({a,b,c,d,g},G):

addedge([{a,b},{a,d},{b,c},{c,d},{b,d},{b,d},{c,g}],G):

draw(G);

EulerRouting(G):

Trang 14

> V:={a,b,c,d,f}:

E:=[{a,b},{a,c},{a,f},{b,c},{d,f},{b,d}]:

G:=graph(V,E):

draw(G);

Hamilton(G);

Trang 15

TÀI LIỆU THAM KHẢO

[1] Tài Liệu lập trình Symbolic – PGS.TS Đỗ văn Nhơn – ĐHCNTT TP.HCM

[2] Sử dụng Mapple để dạy – học Toán trong môi trường tương - Nguyễn Chánh Tú (Khoa Toán, ĐHSP Huế)

Ngày đăng: 10/04/2015, 00:51

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w