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

GIẢI MỘT SỐ BÀI TOÁN ĐỒ THỊ BẰNG MAPLE

19 714 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 19
Dung lượng 1,1 MB

Nội dung

Nhiều phép tính số học được thực hiện dựa trên thư viện số học NAG; trong Maple, các chương trình con NAG đã được mở rộng để cho phép độ chính xác ngẫu nhiên lớn.. Thủ tục là mộ

Trang 1

MỤC LỤC:

MỤC LỤC: 1

PHẦN I TÌM HIỂU VỀ LẬP TRÌNH SYMBOLIC (LẬP TRÌNH TÍNH TOÁN HÌNH THỨC) 4

I KHÁI NIỆM VỀ TÍNH TOÁN HÌNH THỨC 4

III GIỚI THIỆU MAPPLE – CÔNG CỤ LẬP TRÌNH SYMBOLIC 4

PHẦN II: GIẢI MỘT SỐ BÀI TOÁN ĐỒ THỊ BẰNG MAPLE 4

I SƠ LƯỢC VỀ ĐỒ THỊ: 4

1 Những khái niệm và tính chất cơ bản 5

1.1 Đồ thị vô hướng: 5

1.2 Đồ thị có hướng 5

2 Các bài toán về đường đi 5

II GIẢI MỘT SỐ BÀI TOÁN ĐỒ THỊ BẰNG MAPLE 6

1 Bài toán đường đi ngắn nhất: (Thuật toán Dijkstra: Tìm đường đi ngắn nhất) 6

1.1 Bài toán: 6

1.2 Phương pháp: 6

1.3 Thuật toán Dijkstra 6

1.4 Thủ tục: 8

1.5 Dữ liệu thử: 9

2 Bài toán tìm chu trình Euler 11

2.1 Bài toán 12

2.2 Điều kiện cần & đủ cho chu trình Euler: 12

1.3 Thuật toán: 12

1.4 Thủ tục: 13

1.5 Dữ liệu thử: 13

3 Bài toán Hamilton 15

3.1 Bài toán: 15

3.2 Mô tả: 15

3.3 Dữ liệu thử: 15

KẾT LUẬN 19

TÀI LIỆU THAM KHẢO 20

Trang 2

Lập trình tính toán hình thức với Tính toán số chính xác và gần đúng:Tính toán số học:

N, Z, Q, R, C Hoặc tính toán ký hiệu (symbolic computation) Với ngôn ngữ lập trình C#, VB,C++… Chúng ta sẽ khó khăn trong việc lập trình này Là một trong các Hệ đại số

máy tính có khả năng Khả năng tính toán hình thức: tính toán gần đúng, chính xác,

symbolicCó thư viện tính toán mạnh, và có thể bổ sung Ngoài sự tương tác, còn hỗ trợ

lập trình.Maple là một gói phần mềm toán học thương mại phục vụ cho nhiều mục đích Nó phát triển lần đầu tiên vào năm 1980 bởi Nhóm Tính toán Hình thức tại Đại học Waterloo ở Waterloo, Ontario, Canada việc lập trình trên trở nên dễ dàng và nhanh chóng hơn với những chức năng cốt lõi như Người dùng có thể nhập biểu thức toán học theo các ký hiệu toán học truyền thống Có thể dễ dàng tạo ra những giao diện người dùng tùy chọn Maple hỗ trợ cho cả tính toán số và tính toán hình thức, cũng như hiển thị Nhiều phép tính số học được thực hiện dựa trên thư viện số học NAG; trong Maple, các chương trình con NAG đã được mở rộng để cho phép độ chính xác ngẫu nhiên lớn Maple cũng có một ngôn ngữ lập trình cấp cao đầy đủ Cũng có giao diện cho những ngôn ngữ khác (C, Fortran, Java, MatLab, và Visual Basic) Cũng có một giao diện dành cho Excel 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ệnh củ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 đó, khi thực thi 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

Em xin chân thành cảm ơn PGS.TS Đỗ Văn Nhơn – Giảng viên môn học “Lập trình Symbolic” đã truyền đạt những kiến thức vô cùng quý báu giúp chúng em có thể tìm hiểu

và lập trình tính toán hình thức trở nên dễ dàng và logic

Em cũng xin chân thành cám ơn ban cố vấn học tập và ban quản trị chương trình đào tạo thạc sĩ Công nghệ thông tin qua mạng của Đại Học Quốc Gia TPHCM đã tạo điều kiện

về tài liệu tham khảo để có thể hoàn thành môn học này

Học viên

Tạ Lê Thủy Tiên

Trang 3

PHẦN I TÌM HIỂU VỀ LẬP TRÌNH SYMBOLIC (LẬP TRÌNH TÍNH TOÁN

HÌNH THỨC)

Các yêu cầu tính toán hình thức:

Tính toán số chính xác và gần đúng:

Tính toán số học: N, Z, Q, R, C Tính toán ký hiệu (symbolic computation)

Computation System)

Các đặc trưng CAS

Khả năng tính toán hình thức: tính toán gần đúng, chính xác, symbolic

Có thư viện tính toán mạnh, và có thể bổ sung

Ngoài sự tương tác, còn hỗ trợ lập trình

Phân loại

Các hệ thống chuyên dùng cho từng lĩnh vực đặc biệt:

 Group Theory : GAP, Lie

 Cơ học : Cartan, FeynCalc

 Hình học đại số : CASA, GANITH

 v.v

Các hệ tổng quát:

 Matlab

 Mathematica

 Maple

 v.v

Maple :

Maple là một ngôn ngữ mô phỏng toán học (Maple chỉ là một tên riêng ở Canada, không phải là Mathematics Pleasure như nhiều người thường nghĩ) Kiểu tính toán của Maple được biết dưới nhiều tên khác nhau như : Algebraic manipulation,

Symbolic computation, Computer algebra … Đặc điểm cơ bản của một ngôn ngữ như thế là nó có khả năng, một cách ẩn hoặc hiện, tiến hành các tính toán mà các phần

tử không nhất thiết phải được gán giá trị Một đặc điểm khác là nó có khả năng hình thành các phép đơn giản, rút gọn các biểu thức, và các phép biến đổi khác, thực hiện trên các phần tử chưa được gán giá trị

Trang 4

PHẦN II: GIẢI MỘT SỐ BÀI TOÁN ĐỒ THỊ BẰNG MAPLE

1 Những khái niệm và tính chất cơ bản

1.1 Đồ thị vô hướng:

Đồ thị vô hướng G = (V, E) gồm:

V là tậphợp khác rỗng mà các phầntử của nó g ọi là đỉnh(vertex) của G

E là tập hợp gồm các cặp không sắp thứ tự của haiđ ỉnh Mỗi phần tử của E được gọi là một cạnh(edge) của G Ký hi ệu uv

1.2 Đồ thị có hướng

Đa đồ thị có hướng G =(V,E) gồm:

V là tập hợp khác rỗng mà các phần tử của nó gọi làđỉnh của G

E là tập hợp gồm các cặp có sắp thứ tự của hai đỉnh Mỗi phần tử của E được gọi là một cung(cạnh)của G Ký hi ệu uv

Ta nói cung uv đi từ u đến v, cung uv kề với u,v

2 Các bài toán về đường đi.

Bài toán bảy cây cầu Euler 

Cây bao trùm nhỏ nhất (Minimum spanning tree)

Bài toán đường đi ngắn nhất

Các thuật toán quan trọng nhất giải quyết bài toán này là:

Thuật toán Dijkstra 

Thuật toán Bellman-Ford — giải bài toán nguồn đơn trong trường hợp trọng số có thể có giá trị âm

Giải thuật tìm kiếm A* giải bài toán nguồn đơn sử dụng heuristics để tăng tốc độ tìm kiếm

Thuật toán Floyd-Warshall — giải bài toán đường đi ngắn nhất cho mọi cặp đỉnh

Thuật toán Johnson — giải bài toán đường đi ngắn nhất cho mọi cặp đỉnh, có thể nhanh hơn thuật toán Floyd-Warshall trên các đồ thị thưa

Trang 5

i := 0

S := V\{u 0 }

L(u 0 ) := 0

Với mọi v ∈ S, L(v) := ∞ và được đánh dấu bởi (∞,-)

Nếu n = 1 thì xuất d(u 0 ,u 0 ) = 0 = L(u 0 ) Bước 2:

Với mọi v ∈ S và kề với u i  (nếu đồ thị có hướng thì v là đỉnh sau của u i ), L(v) := min{L(v), L(u i ) + w(u i v)}

Xác định k := min{L(v), v ∈ S}

Nếu k = L(v j ) thì xuất d(u 0 ,v j ) = k và đánh dấu v j  bởi (L(v j ),u i )

u i+1  := v j

S := S\{u i +1}

Bước 3:

Xác định tuần tự các đỉnh có khoảng cách đến u0 từ nhỏ đến lớn

1 Trước tiên đỉnh có khoảng cách nhỏ nhất đến u0 là u0

2 Trong V\{u0} tìm đỉnh có khoảng cách đến u0 nhỏ nhất (đỉnh này phải là một trong các đỉnh kề với u0), giả sử đó là u1

3 Trong V\{u0, u1} tìm đỉnh có khoảng cách đến u0 nhỏ nhất (đỉnh này phải

là một trong các đỉnh kề với u0 hoặc u1), giả sử đó là u2

4 Tiếp tục như trên cho đến bao giờ tìm được khoảng cách từ u0 đến mọi đỉnh

Nếu G có n đỉnh thì: 0 = d(u0,u0) < d(u0,u1) ≤ d(u0,u2) ≤ … ≤ d(u0,un-1)

Lý thuyết nhiễu (Perturbation theory); tìm đường đi ngắn nhất địa phương (trong trường

hợp xấu nhất

Bài toán người đưa thư Trung Hoa 

Bài toán người bán hàng 

1 Bài toán đường đi ngắn nhất: (Thuật toán Dijkstra: Tìm đường đi ngắn nhất) 1.1 Bài toán:

Cho G = (V, E) đơn, liên thông, có trọng số dương (w(uv) > 0 với mọi u khác v) Tìm đường đi ngắn nhất từ u0 đến v và tính khoảng cách d(u0,v)

1.2 Phương pháp:

1.3 Thuật toán Dijkstra

Trang 6

Mã giả:

Dijkstra(G, w, s)

for each vertex v in V[G]

previous[v] := undefined

d[s] := 0

S := empty set

Q := V[G]

while Q is not an empty set

u := Extract_Min(Q)

S := S union {u}

for each edge (u,v) outgoing from u

if d[u] + w(u,v) < d[v]

d[v] := d[u] + w(u,v)

previous[v] := u

S := empty sequence

u := t

while defined previous[u]

insert u to the beginning of S

u := previous[u]

Trang 7

1.4 Thủ tục:

Trang 8

1.5 Dữ liệu thử:

a Gọi thủ thủ tục:

Cách 1: DijkstrasAlgorithm(G, s, t)

Cách 2: DijkstrasAlgorithm(G, s)

G: -một đồ thị

s, t: -đỉnh của đồ thị G

b Mô tả:

 Nếu G là một đồ thị không có trọng số, tất cả các cạnh được cho là để có trọng số 1

 Nếu G là một đồ thị có trọng số, DijkstrasAlgorithm ('G', 's', 't') trả về trọng con đường ngắn nhất từ đỉnh s đến đỉnh t trong đồ thị G Nếu một đường đi từ s đến t tồn tại, đầu ra là một danh sách có dạng [[s, ,t],w],

Mà [s, , t] là đường dẫn và w là trọng lượng của con đường đó Nếu không có đường dẫn như vậy tồn tại đầu ra là: 

 Trong cách gọi thứ hai không có đỉnh đích được đưa ra, đây là cách ngắn cho DijkstrasAlgorithm (G, s, Vertices (G)) tìm con đường với ngắn nhất từ s đến mỗi đỉnh trong G là đầu ra

Trang 9

c Chạy thử dữ liệu:

Bước 1: Đưa vào đồ thị C6.

> C6 := Graph( { [{1,2},1], [{2,3},3], [{3,4},7], [{4,5},3], [{5,6},3], [{1,6},3]} );

Kết quả:

Bước 2: Gọi thủ tục DijkstrasAlgorithm

> DijkstrasAlgorithm(C6, 1, 4);

Kết quả:

Bước 3: Vẽ đồ thị

> DrawGraph(C6);

Trang 10

Gọi thủ tục vối cách 2:

Bước 1: Đưa vào đồ thị C6.

> C6 := Graph( { [{1,2},1], [{2,3},3], [{3,4},7], [{4,5},3], [{5,6},3], [{1,6},3]} );

Kết quả:

Bước 2: Gọi thủ tục DijkstrasAlgorithm

> DijkstrasAlgorithm(C6, 1);

> G := Graph( { [[1,2],2],[[1,3],2],[[2,3],2],[[3,1],2], [[4,5],2], [[5,6],2],[[6,4],2] } );

Bước 3: Vẽ đồ thị

> DrawGraph(G);

Trang 11

2 Bài toán tìm chu trình Euler

2.1 Bài toán

Đường đi Eule r là đường đi qua tất cả các cạnh (cung) đúng một lần Chu trình Euler là chương trình đi qua tất cả các cạnh đúng một lần

Đường đi Euler

2.2 Điều kiện cần & đủ cho chu trình Euler:

Một đa đồ thị có chu trình Euler nếu và chỉ nếu mỗi đỉnh có số bậc chẵn

I.3 Thuật toán:

Thuật toán được sử dụng để xây dựng các con đường Euler Tim kiếm theo chiều sâu(depth-first-search) Phức tạp  O (n + m)

 trong đó n = | V | và m = | E |

Input: G: đa đồ thị có bậc các đỉnh là chẵn Output: C: chu trình Euler

C = chọn 1 chu trình bất kỳ;

H = G đã xóa đi cạnh của C;

while (H còn cạnh) do

C’= chu trình trong H nhưng đi qua đỉnh trong C;

H= G đã xóa đi cạnh của C;

while (H còn cạnh) do

C’= chu trình trong H nhưng có đi qua đỉnh trong C;

H=H đã xóa cạnh C’và đỉnh treo

C=C cộng thêm C’được chèn phù hợp;

end

Trang 13

I.5 Dữ liệu thử:

 Euler(G)

 Euler(G, T)

 G: Đồ thị

 T: (T Được sử dụng như là một mô tả hình thức ngắn của các cạnh trong

một đồ thị đi qua một chuỗi đỉnh / danh sách theo thứ tự nhất định.)

 Euler trả về đúng nếu đồ thị đầu vào là một đồ thị Euler,trả về false nếu không phải

 Có đường đi Euler nếu tồn tại các cạnh trong một đồ thị đi qua một chuỗi đỉnh / danh sách theo thứ tự nhất định, ngược lại trả về false

Chạy thủ tục cách 1:

Bước 1: Tạo một đồ thị

Tạo một đồ thị vô hướng không có trọng số có 4 đỉnh 6 cạnh

>

)

Bước 2: Tìm đường đi Euler

Tìm đường đi Euler đồ thị vô hướng không có trọng số có 4 đỉnh 6 cạnh

> Euler(CompleteGraph(4));

Kết quả: Không có

Chạy thủ tục cách 2:

Bước 1: Tạo một đồ thị

Tạo một đồ thị vô hướng không có trọng số có 5 đỉnh 10 cạnh

> Euler(CompleteGraph(5));

Bước 2: Tìm đường đi Euler

Tìm đường đi Euler đồ thị vô hướng không có trọng số có 5 đỉnh 10 cạnh

Trang 14

Kết quả: Có

> T;

Các cạnh trong một đồ thị đi qua một chuỗi đỉnh / danh sách theo thứ tự

Tức là: các cạnh([1,2],[2,3],[3,1],[1,4],[4,2],[2,5],[5,3],[3,4],[4,5],[5,1])

3 Bài toán Hamilton

3.1 Bài toán:

 Đường đi qua tất cả các đỉnh của đồ thị mỗi đỉnh đúng một lần được gọi

là đường đi Hamilton Chu trình bắt đầu từ một đỉnh v nào đó qua tất cả các đỉnh còn lại mỗi đỉnh đúng một lần rồi quay trở về vđược gọi là chu trình Hamilton. Đồ thị G được gọi là đồ thị Hamilton nếu nó chứa chu trình Hamilton và gọi là đồ thị nữa Hamilton nếu nó có đường đi Hamilton

3.2 Mô tả:

,Maple cung cấp lệnh IsHamiltonian để xác định có hoặc không có đồ thị chứa một mạch Hamilton Lệnh này chấp nhận một yêu cầu và một đối số tùy chọn Đối số bắt buộc, tất nhiên, là một đồ thị Nếu một tên biến được cung cấp như là đối số thứ hai, sau đó Maple sẽ lưu trữ các mạch

Hamilton trong biến, mà sau đó bạn có thể sử dụng như là đối số thứ hai

để HighlightTrail

3.3 Dữ liệu thử:

Gọi thủ thủ tục:

IsHamiltonian(G) IsHamiltonian(G, C)

Mô tả:

Trả về true nếu đồ thị là Hamilton và false nếu không phải

Nếu G là Hamilton và C tên được quy định như một đối số thứ hai, sau đó C được chỉ định một danh sách các đỉnh của một chu trình Hamilton của đồ thị bắt đầu và kết thúc với đỉnh đầu tiên trong G Ví dụ, nếu đồ thị G là tam giác đồ thị tạo ra với Graph ({{1,2}, {1,3}, {2,3}}),

Trang 15

      [1, 2, 3, 1]

Thuật toán cho các đồ thị có hướng và nó bỏ qua các trọng số cạnh của đồ thị

Chạy thử dữ liệu:

Bước1:Tạo đồ thị P

Lệnh PetersenGraph(); một đồ thị vô hướng unweighted với 10 đỉnh và

15 cạnh

> with(SpecialGraphs):

> P := PetersenGraph();

Bước2:

> IsHamiltonian(P);

Kết quả: Không là Hamilton

Thêm một cạnh vào P

Lệnh AddEdge thêm một hoặc nhiều cạnh một đồ thị vô hướng

Tạo ra một đồ thị vô hướng vô hướng với 10 đỉnh và cạnh 16

> AddEdge(P, {1,3});

Kết quả: Đồ thị P vo hướng có 10 đỉnh và 16 cạnh Bước2:

> IsHamiltonian(P, 'C');

> C;

Trang 16

> H3 := HypercubeGraph(3); # 3-Chiều khối lập phương

> IsHamiltonian(H3, 'C');

> C;

Tô màu đường đi Hamilton

> HighlightTrail(H3, C, red);

Vẽ đồ thị

> DrawGraph(H3);

Trang 17

> infolevel[IsHamiltonian] := 2;

> IsHamiltonian(H3);

> K33 := CompleteGraph(3,3);

Trang 18

Sau nhiều lần cải tiến và phát triển qua nhiều phiên bản khác nhau và ngày càng được hoàn thiện 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. 

Trang 19

TÀI LIỆU THAM KHẢO

1 Slide bài giảng “lập trình symbolic” của thầy PGS.TS Đỗ Văn Nhơn

2 Phần help trong maple

3 Bài giảng Lý thuyết đồ thi của thầy PGS.TS Đỗ Văn Nhơn

4 http://highered.mcgrawhill.com/sites/0073383090/student_view0/ exploring_discrete_mathematics_using_maple.html

5 http://www.cecm.sfu.ca/CAG/code/

6 Internet

Ngày đăng: 10/04/2015, 01:26

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w