Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 77 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
77
Dung lượng
784,5 KB
Nội dung
DANH MỤC HÌNH VẼ
Trang
Hình 1.1 Đồ thị hàm số y = sinx 4
Hình 1.2 Đồ thị biểu diễn ví dụ 1 5
Hình 1.3 Đồ thị biểu diễn ví dụ 2 6
Hình 1.4 Đồ thị biểu diễn ví dụ 3 6
Hình 1.5 Biểu diễn phẳng của Graph 7
Hình 1.6 Biểu diễn Graph con vàGraph thành phần 8
Hình 1.7 Biểu diễn bậc của đỉnh 9
Hình 1.8 Dãy cạnh kế tiếp 9
Hình 1.9 Biểu diễn cạnh có hướng 12
Hình 2.1 Ma trận kề đồ thị vô hướng không trọngsốvà đồ thị có hướng có
tróng số 14
Hình 2.2 Biểu diễn cài đặt đồ thị bằng danh sách cạnh trên mảng và trên danh
sách móc nối 17
Hình 2.3 Đồ thị vô hướng không trọngsố 20
Hình 2.4 Biểu diễn Graph bằng danh sách kề 22
Hình 2.5 Đồ thị vô hướng 24
Hình 2.6 Ma trận kề đồ thị trọngsố vô hướng và đồ thị trọngsố có hướng 31
Hình 2.7a Đồ thị trọngsố có hướng 31
Hình 2.7b Biểu diễn đồ thị trọngsố bằng danh sách lân cận kề 31
Hình 2.8 Đồ thị vô hướng có trọngsố ví dụ 4 33
Hình 2.9 Cây khung DFS(1) và cây khung BFS(1) 37
Hình 2.10 Đồ thị vô hướng có trọngsố ví dụ 5 40
MỤC LỤC
Trang
MỞ ĐẦU 1
Chương 1
MỘT SỐ VẤN ĐỀ VỀ LÝ THUYẾT GRAPH 4
1.1. Khái niệm cơ bản về graph 4
1.1.1. Những bài toán và vấn đề dẫn đến khái niệm graph [1] 4
1.1.2. Định nghĩa graphvà các khái niệm cơ bản 7
1.1.3. Graph con vàgraph thành phần 8
1.2. Phân loại graph 9
1.2.1. Graph vô hướng 9
1.2.2. Graph có hướng 12
1.3. Kết luận chương 1 13
Chương 2
MỘT SỐ THUẬT TOÁN CƠ BẢN TRÊN GRAPH 14
2.1. Biểu diễn graph trên máy tính 14
2.1.1. Biểu diễn bằng ma trận lân cận [6] 14
2.1.2. Biểu diễn bằng danh sách cạnh [6] 17
2.1.3. Biểu diễn danh sách lân cận [6] 19
2.2. Phép duyệt mộtgraph 24
2.2.1. Tìm kiếm theo chiều sâu 24
2.2.2. Tìm kiếm theo chiều rộng 26
2.2.3. Tìm đường đi và kiểm tra tính liên thông của đồ thị 28
2.3. Đồ thị trọngsố 30
2.3.1. Khái niệm 30
2.3.2. Biểu diễn đồ thị trọngsố 30
2.4. Đường đi trên đồ thị trọngsố 32
2.4.1. Thuật toán tìm đường đi ngắn nhất từ một đỉnh đến tất cả các đỉnh
khác 32
Độ phức tạp của giải thuật: Thuật toán Dijkstra tìm được đường đi ngắn
nhất trên đồ thị sau thời gian cỡ O(n2). [2] 33
Ví dụ 4: Cho đồ thị vô hướng có trọngsố G trong hình 2.8 dưới đấy. Tìm
đường đi ngắn nhất từ đỉnh 1 đến tất cả các đỉnh khác trong G 33
Ma trận trọngsố của đồ thị có dạng: 33
Kết quả tính toán theo thuật toán được trình bày trong bảng dưới đây.
Quy ước viết hai thành phần của nhãn theo thứ tự: d[v], Truoc[v]. Đỉnh
được đánh dấu ‘*’ là đỉnh được chọn để cố định nhãn ở bước lặp đang
xét, nhãn của nó không biến đổi ở các bước tiếp theo, vì thế ta đánh dấu
34
Bước lặp 34
Đỉnh 1 34
Đỉnh 2 34
Đỉnh 3 34
Đỉnh 4 34
Khởi tạo 34
0, 1 34
10, 1 34
6, 1 34
2, 1* 34
1 34
34
5, 4 34
3, 4 * 34
34
2 34
34
5, 4 * 34
34
34
34
Nhận xét: Từ bảng kết quả ta có thể truy xuất ra được đường đi từ đỉnh 1
tới tất cả các đỉnh còn lại trong đồ thị như sau: 34
Đường đi từ đỉnh 1 tới đỉnh 2: 34
Ta có đỉnh trước đỉnh 2 là Truoc[2] = 4 vậy 4 là đỉnh trước đỉnh 2 trên
đường đi này 34
Trước đỉnh 4 là Truoc[4] = 1 vậy 1 là đỉnh trước đỉnh 4 trên đường đi
này 34
Dừng, ta thu được đường đi ngắn nhất từ đỉnh 1 tới đỉnh 2 là: 34
1 – 4 – 2 với độ dài đường đi ngắn nhất là d[2] = 5 34
Tương tự ta có các đường đi sau: 34
Đường đi ngắn nhất từ đỉnh 1 đến đỉnh 3 là: 1 – 4 – 3 với độ dài đường đi
ngắn nhất là d[3] = 3 34
Đường đi ngắn nhất từ đỉnh 1 đến đỉnh 4 là: 1 – 4 với độ dài đường đi
ngắn nhất là d[4]=2 34
2.4.2. Thuật toán Floyd tìm đường đi ngắn nhất giữa tất cả các cặp đỉnh34
- Khởi tạo: 36
36
Nhận xét: Đường đi từ đỉnh 1 tới các đỉnh còn lại trong đồ thị: 36
Đường đi từ đỉnh 1 đến đỉnh 2: 36
Trước 2 là p[1,2]=4 vậy 4 là đỉnh trước 2 trên đường đi này. 36
Trước 4 là p[1,4]=0, vậy đỉnh 1 đứng trước đỉnh 4 trên đường đi này 36
Dừng, đường đi thu được là: 1 – 4 – 2 với độ dài đường đi là d[1,2] = 5 36
Tương tự ta tìm được đường đi ngắn nhất từ đỉnh 1 đến đỉnh 3 là: 1 – 4 – 3
với độ dài d[1,3] = 3. 36
Do p[1,4] = 0 nên đường đi từ đỉnh một tới đỉnh 4 là đường đi trực tiếp với
độ dài là p[1,4]= 2 36
Để tìm đường đi giữa tất cả cặp đỉnh còn lại trong đồ thị ta làm tương tự 36
2.5. Cây khung và cây khung với giá trị cực tiểu 37
2.6. Kết luận chương 2 45
Chương 3
ỨNG DỤNGGRAPH GIẢI MỘTSỐ BÀI TOÁN TRONG 47
CHƯƠNG TRÌNH TIN HỌC PHỔ THÔNG 47
3.1. Giới thiệu mộtsố bài toán về đồ thị trongchươngtrình tin học trung
học phổ thông 47
3.2. Mộtsố bài toán về phép duyệt đồ thị 47
3.2.1. Bài toán 1- Đếm số thành phần liên thông [4] 47
3.2.2. Bài toán 2 - Dự tiệc 50
3.2.3. Bài toán 3 - Bản đồ [2] 52
3.3. Mộtsố bài toán về đường đi trong đồ thị 53
3.3.1. Bài toán 1 - Đường đi [4] 53
3.3.2. Bài toán 2 - Du lịch [4] 56
3.3.3. Bài toán 3 - Đến trường [7] 58
3.4. Mộtsố bài toán về cây khung đồ thị 61
3.4.1. Bài toán 1 - Dự án 61
3.4.2. Bài toán 2 - Thay hệ thống [4] 64
3.4.3. Bài toán 3 – Bão Sơn Tinh 66
3.5. Kết luận chương 3 70
KẾT LUẬN 71
TÀI LIỆU THAM KHẢO 72
MỞ ĐẦU
1. Lý do chọn đề tài
Trên thực tế có nhiều bài toán liên quan tới một tập các đối tượng và
những mối liên hệ giữa chúng, đòi hỏi toán học phải đặt ra một mô hình biểu
diễn một cách chặt chẽ và tổng quát bằng ngôn ngữ ký hiệu, đó là đồ thị.
Những ý tưởng cơ bản của nó được đưa ra từ thế kỷ thứ XVIII bởi nhà toán
học Thụy Sĩ Leonhard Euler, ông đã dùng mô hình đồ thị để giải bài toán về
những cây cầu Konigsberg nổi tiếng. Mặc dù Lý thuyết đồ thị đã được khoa
học phát triển từ rất lâu nhưng lại có nhiều ứngdụng hiện đại. Đặc biệt trong
khoảng vài chục năm trở lại đây, cùng với sự ra đời của máy tính điện tử và
sự phát triển nhanh chóng của Tin học, Lý thuyết đồ thị càng được quan tâm
đến nhiều hơn. Đặc biệt là các thuật toán trên đồ thị đã có nhiều ứngdụng
trong nhiều lĩnh vực khác nhau như: Mạng máy tính, Lý thuyết mã, Tối ưu
hoá, Kinh tế học v.v
Một trong các mục tiêu khi đưa tin học vào nhà trường là nhằm giúp cho
học sinh có khả năng phân tích, tổng hợp, trừu tượng hóa, khái quát hóa vấn
đề và đặc biệt là phát triển tư duy. Hiện nay, có nhiều bài toán trongchương
trình trung học phổ thông được giải quyết nhờ vận dụng lý thuyết đồ thị. Để
tìm hiểu sâu về lý thuyết đồ thị vàứngdụng của nó trongchươngtrình tin học
phổ thông nên em đã chọn đề tài “Graph vàmộtsốứngdụngtrongchương
trình trung học phổ thông”.
2. Mục đích nghiên cứu
Tìm hiểu mộtsố vấn đề về Graph như các khái niệm cơ bản về Graph, phân
loại Graph… Để hiểu sâu sắc hơn lý thuyết Graph, cài đặt mộtsố thuật toán, từ
đó ứngdụng lý thuyết Graph vào chươngtrình tin học phổ thông để giải quyết
một số bài toán liên quan.
3. Nội dung tìm hiểu, nghiên cứu
• Mộtsố vấn đề về lý thuyết về Graph.
• Mộtsố thuật toán cơ bản trên Graph.
1
• Ứngdụng lý thuyết Graph vào giải quyết mộtsố bài toán cụ thể trong
chương trình tin học phổ thông.
4. Phương pháp nghiên cứu
• Nghiên cứu tài liệu: Nghiên cứu các tài liệu về lý thuyết đồ thị và các bài
toán liên quan.
• Phương pháp thực nghiệm: Lập trình kiểm thử, tìm hiểu thông tin trong
một số Website trên mạng.
• Tổng kết kinh nghiệm: Tổng kết các kiến thức đã học tập được.
• Tham khảo ý kiến chuyên gia: Tiếp thu ý kiến đóng góp của các thầy cô
và ý kiến của các bạn bè.
Cấu trúc của đề tài
Mở đầu: Nêu ra lý do chọn đề tài, phương pháp, nội dung tìm hiểu và mục
đích nghiên cứu, cấu trúc đề tài.
Chương 1: Mộtsố vấn đề về lý thuyết Graph.
Chương 2: Mộtsố thuật toán cơ bản trên Graph: Tìm hiểu và cài đặt
các thuật toán cơ bản trên Graph cụ thể như: biểu diễn Graph trên máy tính,
phép duyệt Graph, tìm đường đi và kiểm tra tính liên thông của Graph….Các
thuật toán được cài đặt trên ngôn ngữ lập trình Pascal.
Chương 3: Ứngdụng của Graph vào chươngtrình Tin học phổ thông:
Đưa ra và vận dụng lý thuyết Graph vào cài đặt mộtsố bài toán cụ thể trong
chương trình tin học phổ thông theo từng dạng: Bài toán duyệt đồ thị, bài toán
về đường đi trên đồ thị, bài toán về cây khung đồ thị.
Kết luận: Nêu ra những vấn đề đã tìm hiểu, mộtsố công việc chính đã
được thực hiện, hướng phát triển tiếp theo của đề tài trong tương lai.
Em xin chân thành cảm ơn Thầy giáo, TS Nguyễn Mạnh Đức - Giảng viên
Tin học, Khoa Toán, Đại học Sư phạm Thái Nguyên, người đã trực tiếp
hướng dẫn và tận tình chỉ bảo em trong suốt quá trình làm đề tài.
2
Em xin chân thành cảm ban chủ nhiệm Khoa Toán cùng các Thầy, Cô
trong khoa đã tạo điều kiện để em thực hiện đề tài này.
Tôi cũng xin cảm ơn các bạn sinh viên, người thân đã động viên, giúp đỡ
trong thời gian thực hiện đề tài.
Thái Nguyên, tháng 4 năm 2013
Sinh viên
Vi Văn Sơn
3
Chương 1
MỘT SỐ VẤN ĐỀ VỀ LÝ THUYẾT GRAPH
1.1. Khái niệm cơ bản về graph
1.1.1. Những bài toán và vấn đề dẫn đến khái niệm graph [1]
Hai chữ “đồ thị” vẫn thường xuyên xuất hiện trong toán học và cả trong
đời sống hàng ngày. Trong các giờ học toán, chúng ta có nói tới đồ thị của các
hàm số. Chẳng hạn, trong hình dưới có biểu diễn đồ thị của hàm số y=sinx.
Trong các công sở, các nhân viên phải
lập các biểu đồ theo dõi số lượng tiêu thụ
điện hoặc xăng dầu hàng tháng,và họ cũng
có thể gọi những biểu đồ đó là đồ thị
Tóm lại khái niệm đồ thị là một khái niệm
toán học khá quen thuộc đối với chúng ta
nhằm biểu diễn tương quan đi lại hai đối tượng hoặc nhiều đối tượng toán học
khác nhau.
Lý thuyết đồ thị (theo tiếng Anh và tiếng Đức đọc là: “graph”) nghiên cứu
những tính chất toán học, những quan hệ mà không phụ thuộc vào bản chất
riêng của những mối quan hệ này. Để tránh khỏi bị nhầm là đồ thị của hàm
số, ta sử dụng thuật ngữ “graph” trong tài liệu này ở các phần tiếp theo.
Graph là một mô hình toán học có thể dùng để giải quyết khá nhiều bài
toán và vấn đề toán học. Mộtgraph có thể hiểu đơn giản là một hệ thống các
đỉnh và các cạnh nối với nhau. Gần với mô hình lí thuyết graph là các bài toán
thoáng qua như những bài toán hình học mà thực chất việc giải quyết chúng
không thể chỉ sử dụng những kiến thức hình học thông thường. Trên mặt
phẳng, có những bài toán dường như là bài toán hình học như thế, nhưng
chúng ta có thể xem xét mộtsố ví dụ để thấy không chỉ có thể dùng kiến thức
hình học để giải quyết được chúng. Việc muốn giải quyết những bài toán này
4
Hình 1.1. Đồ thị hàm số y =sinx
cần đi sâu hơn nữa vào những mối quan hệ toán học của các đối tượng toán
học trong bài toán. Mộtsố ví dụ có nguồn gốc phát sinh từ các bài toán hình
học mà bản chất thực sự của nó là các bài toán về lí thuyết grap.
Ví dụ 1:
Có ba cái nhà và ba cái giếng. Mỗi nhà có ba đường đi từ nó tới ba cái
giếng đó. Hỏi có thể làm những con đường đi như vậy sao cho không có hai
con đường nào cắt nhau hay không?
Để giải quyết bài toán này, chúng ta có thể giả sử là các
nhà là các điểm A
1
, A
2
, A
3
trên mặt phẳng và các giếng là
các điểm B
1
, B
2
, B
3
nào đó. Các con đường đi là các đường
(liên tục) nối các đỉnh A
i
với các đỉnh B
i
.
Khi đó, câu hỏi của bài toán là liệu có những điểm A
i
tới các điểm B
i
trên mặt phẳng sao cho không có hai con đường nào cắt nhau
hay không? Bằng cách thiết lập mô hình này, chúng ta đã thiết lập mộtgraph
có 6 đỉnh và 9 cạnh.
Chúng ta thấy rằng để giải bài toán này, các kiến thức hình học không còn
giúp gì được cho chúng ta nữa. Bài toán đòi hỏi phải có kiến thức sâu sắc hơn
về mối quan hệ nào đó của quan hệ các đỉnh và các cạnh. [1]
Nhưng không phải chỉ với mộtsố bài toán hoặc mộtsố vấn đề toán học có
nguồn gốc hình học mới có thể đưa về mô hình đỉnh – cạnh như trên. Mô hình
đỉnh – cạnh của chúng ta tỏ ra là mô hình rất hiệu quả để nắm bắt được chính
xác bản chất toán học thật sự của nhiều đối tượng toán học. Các đỉnh được
biểu diễn cho các đại lượng tham gia và các cạnh nối chúng biểu diễn mối
quan hệ đi lại của chúng theo một tiêu chuẩn nào đó được đưa ra.
Ví dụ 2:
Hãy biểu thị graph quan hệ không nguyên tố cùng nhau của các sốtrong
tập hợp { 1, 2, 3, 4, 5, 6 }.
5
Hình 1.2. Đồ thị biểu
diễn ví dụ 1
[...]... graph đơn nếu nó không có khuyên và không có cạnh kép Ngoài ra, ta gọi graph điểm là graph có đúngmột đỉnh và không có cạnh nào Graph rỗng dùng để gọi mộtgraph không có đỉnh và cạnh nào cả 1.1.3 Graph con vàgraph thành phần Cho trước mộtgraph G với tập đỉnh X và tập cạnh E Mộtgraph G’ với tập đỉnh X’ và tập cạnh E’ được gọi là graph con của graph G nếu X’ ⊂ X và E’ ⊂ E Trong trường hợp X’ là tập con... niệm về đường đi và chu trìnhtrongGraph 13 Chương 2 MỘTSỐ THUẬT TOÁN CƠ BẢN TRÊN GRAPH 2.1 Biểu diễn graph trên máy tính Để giải quyết các bài toán về graph bằng máy tính, chúng ta cần phải lưu giữ graphtrong bộ nhớ Có nhiều biểu diễn cấu trúc được sử dụng để biểu diễn graph Việc lựa chọn cấu trúc nào là tùy thuộc vào các ứng dụngvà các phép xử lý cần tác động lên graphtrongứngdụng ấy Có hai... (p1 , p2 ,…, pk , p1) Số cạnh của chu trình được gọi là độ dài của chu trìnhvà thông thường hay được kí hiệu bởi l(C) Một khuyên lập thành một chu trình có độ dài 1 Mộtgraph cho trước chỉ có chu trình có độ dài 2 nếu như nó có cạnh kép Trongmộtgraph đơn mỗi chu trình có độ dài ít nhất là 3 Mộtgraph không đơn hiển nhiên luôn có ít nhất một chu trình (có độ dài 1 hoặc 2) Tronggraph đơn không phải... thì G’ được gọi là graph thành phần của G và còn được gọi là graph sinh Hình 1.6 Biểu diễn Graph con vàGraph thành phần bởi tập đỉnh X’ Graphtrong hình 1.6 có các cạnh được tô đậm là graph con của graph được biểu diễn trong hình Nếu thêm vào nó hai cạnh a và b thì ta được mộtgraph thành phần đã cho Graph rỗng là graph thành phần của mọi graph cho trước 8 1.2 Phân loại graph 1.2.1 Graph vô hướng 1.2.1.1... (liên hợp hướng vào trong) đối với đỉnh x là đỉnh xuất phát (đỉnh đích) của cung u 1.3 Kết luận chương 1 Trongchương này chúng ta đã tìm hiểu tổng quan một số vấn đề về lý thuyết đồ thị: Đưa ra một số bài và vấn đề dẫn đến khái niệm Graph, đưa ra khái niệm cơ bản về Graph, Phân loại Graph, Lý thuyết về Graph vô hướng, Graph có hướng… Trong đó có các khái niệm về bậc của đỉnh, chỉ số liên thông, khái... 1.2.1.5 Chu trình của graph Khi định nghĩa đường đi nối hai đỉnh a và b của một graph, ta luôn giả thiết rằng các đỉnh a và b này phải khác nhau Trong trường hợp a và b được nối với nhau bởi một cạnh, thì khi thêm cạnh (a, b) vào, ta thu được từ con đường đã cho một chu trình Như vậy chu trình là một dãy cạnh kế tiếp khép kín sao cho mỗi đỉnh của graph được đi qua không quá một lần Chu trình được kí... [6] Trong trường hợp graph có n đỉnh, m cạnh, ta có thể biểu diễn graph dưới dạng danh sách cạnh, trong cách biểu diễn này, người ta liệt kê tất cả các cạnh của graphtrongmột danh sách, mỗi phần tử của danh sách là một cặp (u, v) tương ứng với một cạnh của graph (Trong trường hợp graph có hướng thì mỗi cặp (u, v) tương ứng với một cung, u là đỉnh đầu và v là đỉnh cuối của cung) Danh sách được lưu trong. .. Tổng các số trên hàng i = tổng các số trên cột i = Bậc của đỉnh i = dG(i) Trong trường hợp G là graph đơn, ta có thể biểu diễn ma trận lân cận A tương ứng là các phần tử logic aij = 1 nếu (i, j) ∈ E và aij = 0 nếu (i, j) ∉ E Trong rất nhiều vấn đề ứng dụng của lý thuyết graph, mỗi cạnh e =(i, j) của graph được gán với một con số c(e) (còn viết là c(i, j)) gọi là trọngsố của cạnh e Graphtrong trường... ý rằng : trongmộtgraph đơn vô hướng với n đỉnh thì bậc của một đỉnh bất kì luôn là một số nguyên không âm không vượt n-1 1.2.1.2 Dãy cạnh kế tiếp Cho trước mộtgraph G với tập đỉnh V và tập cạnh E Hai cạnh của mộtgraph cho trước gọi là hai cạnh kề nhau nếu như chúng có một đỉnh chung Một dãy m cạnh ei = (Ai, Ai+1) với i=1, 2,…,m được gọi là một dãy Hình 1.8 Dãy cạnh kế tiếp cạnh nối tiếp và thường... rằng mộtgraph có thể có nhiều biểu diễn trên mặt phẳng khác nhau Trong hình 1.5 chúng ta có hai biểu diễn trên mặt phẳng khác nhau của mộtgraphGraph được phân loại theo tính chất cạnh của chúng Trong mỗi graph các cạnh của graph thẳng hay cong, dài hay ngắn, các đỉnh ở vị trí nào, đều không phải là điều quan trọng Mà điều quan trọng là graph có bao nhiêu cạnh và đỉnh nào được nối với đỉnh nào Mộtgraph . Pascal.
Chương 3: Ứng dụng của Graph vào chương trình Tin học phổ thông:
Đưa ra và vận dụng lý thuyết Graph vào cài đặt một số bài toán cụ thể trong
chương trình. lý thuyết đồ thị và ứng dụng của nó trong chương trình tin học
phổ thông nên em đã chọn đề tài Graph và một số ứng dụng trong chương
trình trung học