Niên Luận 1 GVHD:K.S Lê Thị Phương DungLỜI NÓI ĐẦU Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu đờivà có nhiều ứngdụng hiện đại.Những tư tưởng cơ bản của lý thuyết đồ thị đươ
Trang 1Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
ĐÁNH GIÁ KẾT QUẢ THỰC HIỆN NIÊN LUẬN 1
(Học kỳ 2, Niên khóa 2010-2011)
GIÁO VIÊN HƯỚNG DẪN:
SINH VIÊN THỰC HIỆN:
Trang 2Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
I.HÌNH THỨC(Tối đa 0,5 điểm)
Bìa(Tối đa 0,25 điểm)
Trang 3Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Các tiêu đề: Trường ĐHCT, Khoa CNTT
Loại niên luận: 1, Tên đề tài
Giáo viên hướng dẫn: chức danh, họ tên
Thông tin về các sinh viên thực hiện: họ tên, mã số, lớp
Năm thực hiện
Bố cục (tối đa 0.25 điểm)
Nhận xét của giáo viên hướng dẫn và giáo viên chấm
Mục lục: cấu trúc chương, mục và tiểu mục
Phụ lục (nếu có)
Tài liệu tham khảo
Trang 4Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
II NỘI DUNG (Tối đa 3,5 điểm)
Tổng quan (tối đa 0,5 điểm)
Mô tả bài toán, mục tiêu cần đạt được (0,25 điểm)
Hướng giải quyết và kế hoạch thực hiện (0,25 điểm)
Lý thuyết (tối đa 0,5 điểm)
Các khái niệm sử dụng trong đề tài
Kết quả vận dụng lý thuyết vào đề tài
Ứng dụng (tối đa 2,0 điểm)
Phân tích yêu cầu bài toán, xây dựng các cấu trúc dữ liệu
cần thiết (tối đa 0,5 điểm)
Giải thuật (Lưu đồ-Ngôn ngữ giả) (1,0 điểm)
Trang 5Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Giới thiệu chương trình (0,5 điểm)
Kết luận (tối đa 0,5 điểm)
Nhận xét kết quả đạt được
Hạn chế
Hướng phát triển
III CHƯƠNG TRÌNH DEMO (Tối đa 5,0 điểm)
Giao diện thân thiện với người dùng (1.0 điểm)
Hướng dẫn sử dụng (0,5 điểm)
Kết quả thực hiện đúng với kết quả của phần ứng dụng (3,5
Trang 6Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
điểm)
Ghi chú: Điểm trong khung “các sinh viên thực hiện” là điểm kết quả cuối cùng
của từng sinh viên trong quá trình
thực hiện niên luận 1
Nếu sinh viên demo chương trình và trả lời vấn đáp không đạt yêu cầu của giáo viên hướng dẫn thì sinh viên sẽ nhận điểm F cho học phần này
Cần Thơ, ngày … tháng … năm ….
GIÁO VIÊN CHẤM
Trang 7Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Trang 8Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Trang 9Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
………
………
………
………
………
………
………
………
………
………
………
Trang 10Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
………
………
………
………
………
………
………
………
………
………
………
Trang 11Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
………
………
………
………
………
………
………
………
………
………
………
Cần Thơ, ngày … tháng … năm ….
Trang 12Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Giáo viên hướng dẫn
K.S Lê Thị Phương Dung
MỤC LỤC
MỤC LỤC
LỜI NÓI ĐẦU……….6
Trang 13Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
I GIỚI THIỆU TỔNG QUAN ĐỀ TÀI………7
I.1 Tổng quan về bài toán đường đi ngắn nhất……….7
I.1.1 Phát biểu bài toán……… 7
I.1.2.Thuật toán Dijkstra………7
II.CÁC MỤC TIÊU CẦN ĐẠT………7
III KẾ HOẠCH THỰC HIỆN……… 8
Chương II:MỘT SỐ KHÁI NIỆM TRONG ĐỀ TÀI……… 9
I KHÁI NIỆM VỀ ĐỒ THỊ ……….9
II.BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH……….11
II.1.Ma trận liền kề ( Ma trận kề )………11
II.2.Danh sách cạnh……… 13
III.CÁC THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ………14
Trang 14Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
III.1Thuật toán tìm kiếm theo chiều sâu(Depth First Search)……… 14
III.2 Thuật toán tìm kiếm theo chiều rộng(Breadth First Search)……….15
III.3.Độ phức tạp tính toán của DFS và BFS……… 16
IV TÍNH LIÊN THÔNG CỦA ĐỒ THỊ……… 16
IV.1.Định Nghĩa……… 16
IV1.2.Đối với đồ thị vô hướng G=(V,E)……….16
IV.1.3.Đối với đồ thị có hướng G=(V,E)………17
IV.2Tính liên thông trong đồ thị vô hướng……….18
V.CÁC THAO TÁC CƠ BẢN VỀ ĐỒ HOẠ……….19
V.1.Khái niệm về đồ hoạ……….19
V.1.2.Khởi động hệ thống đồ hoạ……….20
Trang 15Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
V.1.3.Lỗi đồ hoạ………22
V.1.4.Mẫu và màu……….22
V.1.5.Vẽ………22
Chương III:ỨNG DỤNG THUẬT TOÁN DIJKSTRA GIẢI QUYẾT BÀI TOÁN ĐƯỜNG ĐI NGẮN NHẤT………23
I.Thuật toán Dijkstra……… 23
II.Lưu đồ thuật toán Dijkstra……… 24
III.MỘT SỐ HÀM CON……….25
III.1Hàm nhập ma trận……… 25
III.2.Hàm xuất ma trận……… 25
III.3.Hàm khởi tạo ma trận……….26
III.4.Hàm thêm cung……… 26
Trang 16Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
III.5.Hàm xoá cung………26
IV.HƯỚNG DẪN SỬ DỤNG CHƯƠNG TRÌNH DEMO………26
CHƯƠNG IV: KẾT LUẬN………29
I.KẾT QUẢ ĐẠT ĐƯỢC……….29
II.HẠN CHẾ……… 29
III.HƯỚNG KHẮC PHỤC VÀ PHÁT TRIỂN……….29 TÀI LIỆU THAM KHẢO
Trang 17Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Trang 18Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Trang 19Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Trang 20Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
LỜI NÓI ĐẦU
Lý thuyết đồ thị là một lĩnh vực nghiên cứu đã có từ lâu đờivà có nhiều ứngdụng hiện đại.Những tư tưởng cơ bản của lý thuyết đồ thị đươc đề xuất từ nhữngnăm đầu của thế kỷ 18 bởi nhà toán họ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ề các cái cầu ở thàng phốKonigsberg
Đồ thị được sử dụng để giải quyết các bài toán trong nhiều lĩnh vực khácnhau Chẳng hạn , đồ thị có thể sử dụng để xác định các mạch vòng trong vấn đềgiải tích mạch điện.Chúng ta có thể phân biệt các hợp chất hoá học hữu cơ khácnhau với cùng công thức phân tử nhưng khác nhau về cấu trúc phân tử nhờ đồ
Trang 21Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
được với nhau hay không nhờ mô hình đồ thị của mạng máy tính Đồ thị có trọng
số trên các cạnh có thể sử dụng để giải các bài toán như : tìm đường đi ngắn nhấtgiữa hai thành phố trong cùng một mạng giao thông Chúng ta còn sử dụng đồ thị
để giải các bài toán về lập lịch,thời khoá biểu,và phân bố tần số cho các trạm phátthanh và truyền hình
Mục đích ta tìm hiểu là nhằm giới thiệu các khái niệm cơ bản,về đồ thị cóhướng và đồ thị vô hướng,các cách biểu diễn đồ thị,các phương pháp tìm kiếmtrên đồ thị(tìm theo chiều rộng và chiều sâu)và tính liên thông,các giải thuật cóliên quan về đồ thị và vận dụng giải thuật điển hình Dijkstra để tìm đường đi ngắnnhất trên đồ thị có hướng,bên cạnh đó là giới thiệu một số thao tác cơ bản về đồhoạ
Trang 22Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Trang 23Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
CHƯƠNG I:GIỚI THIỆU
I GIỚI THIỆU TỔNG QUAN ĐỀ TÀI
I.1 Tổng quan về bài toán đường đi ngắn nhất:
I.1.1 Phát biểu bài toán
Trang 24Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Cho G=(X,E) là một đồ thị có hướng.Ta định nghĩa ánh xạ trọng lượngnhư sau:
Mục đích của bài toán đường đi ngắn nhất là tìm đường đi P từ i đến j
mà có trọng lượng nhỏ nhất trong số tất cả những đường đi có thể có
Nhận xét:
Trang 25Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Khi làm bài toán đường đi ngắn nhất thì chúng ta có thể bỏ bớt các cạnhsong song và chỉ chừa lại các cạnh có trọng lượng nhỏ nhất trong các cạnhsong song
Đối với các khuyên có trọng lượng không âm có thể bỏ đi mà không ảnhhưởng đến kết quả bài toán.Đối với các khuyên có trong lượng âm ta có thể
đi đến kết luận bài toán không có lời giải
Do các nhận xét vừa nêu,có thể xem dữ liệu nhập vào của bài toánđường đi ngắn nhất là ma trận L được định nghĩa như sau:
Trọng lượng cạnh nhỏ nhất nối i đến j nếu có,
Trang 26Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Li,j { 0 nếu không có cạnh nối i đến j
Trong quá trình trình bày thuật toán,để cho tổng quát,giá trị 0 trong ma trận
L có thể được thay thế bằng +∞.Tuy nhiên khi cài đặt chương trình chúng
ta vẫn có thể dùng 0 thay vì +∞ bằng cách đưa thêm một số lênh kiểm tratrong chương trình
I.1.2.Thuật toán Dijkstra
-Xét đồ thị G=(X,E) có trọng với X={1,2,…,n} và giả sử các cạnh
không âm
Trang 27Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
-Dữ liệu nhập cho thuật toán là ma trận trọng lượng L(với qui ước
Lh,k=+∞ nếu không có cạnh nối từ đỉnh h đến đỉnh k) và hai đỉnh i,j chotrước
-Dữ liệu xuất là đường đi ngắn nhất từ i đến j
Trang 28Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Công Việc
Phân tích đề tài phác thảo giải thuật, xác định các hàm cài đặt,
Trang 29Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Viết hàm main, bổ sung một số tính năng phụ cho chương trình Tuần 7Kiểm tra toàn bộ chương trình, chạy thử, chỉnh sửa Tuần 8
Trang 30Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
III.KẾ HOẠCH THỰC HIỆN
Trang 31Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
CHƯƠNG II:MỘT SỐ KHÁI NIỆM TRONG ĐỀ TÀI
Có thể phân loại đồ thị theo đặc tính và số lượng của tập các cạnh E:
Cho đồ thị G = (V, E) Định nghĩa một cách hình thức
Trang 32Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
1. G được gọi là đơn đồ thị nếu giữa hai đỉnh u, v của V có nhiềunhất là 1 cạnh trong E nối từ u tới v
G được gọi là đa đồ thị nếu giữa hai đỉnh u, v của V có thể có nhiều hơn 1
cạnh trong E nối từ u tới v (Hiển nhiên đơn đồ thị cũng là đa đồ thị)
G được gọi là đồ thị vô hướng nếu các cạnh trong E là không định hướng, tức
là cạnh nối hai đỉnh u, v bất kỳ cũng là cạnh nối hai đỉnh v, u Hay nói cáchkhác, tập E gồm các cặp (u, v) không tính thứ tự (u, v)≡(v, u)
G được gọi là đồ thị có hướng nếu các cạnh trong E là có định hướng, có thể
có cạnh nối từ đỉnh u tới đỉnh v nhưng chưa chắc đã có cạnh nối từ đỉnh v tớiđỉnh u Hay nói cách khác, tập E gồm các cặp (u, v) có tính thứ tự: (u, v) ≠ (v, u).Trong đồ thị có hướng, các cạnh được gọi là các cung Đồ thị vô hướng cũng có
Trang 33Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
thể coi là đồ thị có hướng nếu như ta coi cạnh nối hai đỉnh u, v bất kỳ tươngđương với hai cung (u, v) và (v, u)
Ví dụ:
Trang 34Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Trang 35Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Đơn đồ thị
Trang 36Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Đa đồ thị Hình 1:Phân loại đồ thị
Như trên định nghĩa đồ thị G = (V, E) là một cấu trúc rời rạc, tức là các tập V
và E hoặc là tập hữu hạn, hoặc là tập đếm được, có nghĩa là ta có thể đánh số thứ
Trang 37Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
tự 1, 2, 3 cho các phần tử của tập V và E Hơn nữa, đứng trên phương diện ngườilập trình cho máy tính thì ta chỉ quan tâm đến các đồ thị hữu hạn (V và E là tậphữu hạn) mà thôi, chính vì nếu không chú thích gì thêm thì khi nói tới đồ thị, tahiểu rằng đó là đồ thị hữu hạn
Cạnh liên thuộc, đỉnh kề, bậc
• Đối với đồ thị vô hướng G = (V, E) Xét một cạnh e ∈ E, nếu e = (u, v) thì tanói hai đỉnh u và v là kề nhau (adjacent) và cạnh e này liên thuộc (incident) vớiđỉnh u và đỉnh v
• Với một đỉnh v trong đồ thị, ta định nghĩa bậc (degree) của v, ký hiệu deg(v) là
số cạnh liên thuộc với v Dễ thấy rằng trên đơn đồ thị thì số cạnh liên thuộc với vcũng là số đỉnh kề với v
Trang 38Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Định lý: Giả sử G = (V, E) là đồ thị vô hướng với m cạnh, khi đó tổng tất cả các
bậc đỉnh trong V sẽ bằng 2m:
∑ deg(v) = 2m
v∈V
Chứng minh: Khi lấy tổng tất cả các bậc đỉnh tức là mỗi cạnh e = (u, v) bất kỳ sẽ
được tính một lần trong deg(u) và một lần trong deg(v) Từ đó suy ra kết quả
Hệ quả: Trong đồ thị vô hướng, số đỉnh bậc lẻ là số chẵn.
Đối với đồ thị có hướng G = (V, E) Xét một cung e ∈E, nếu e = (u, v) thì tanói u nối tới v và v nối từ u, cung e là đi ra khỏi đỉnh u và đi vào đỉnh v Đỉnh ukhi đó được gọi là đỉnh đầu, đỉnh v được gọi là đỉnh cuối của cung e
Định nghĩa đường đi,chu trinh
Trang 39Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Định nghĩa: Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên
dương, trên đồ thị vô hướng G=(V,E) là dãy
x o , x 1 , , x n-1 , x n
trong đó u=x 0 , v=x n , ( x i , x i+1 )E , i= 0, 1, 2 , , n-1
Đường đi nói trên còn có thể biểu diễn dưới dạng các cạnh:
(x 0 , x 1 ) , ( x 1 , x 2 ), , ( x n-1 , x n ).
Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi Đường đi có đỉnh đầu trùng với đỉnh cuối ( tức là u=v) được gọi là chu trình Đường đi hay
chu trình được gọi là đơn nếu như không có cạnh nào bị lặp lại.
Ví dụ: Trên đồ thị vô hướng cho trong hình 2: a,d,c,f,e là đường đi đơn độ dài 4
Còn d,e,c,a không là đường đi do (e,c) không phải là cạnh của đồ thị Dãy b,c,f,e,b
Trang 40Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
là chu trình độ dài 4 Đường đi a,b,e,d,a,b có độ dài là 5 không phải là đường đi đơn, do cạnh (a,b) có mặt trong nó hai lần
Hình 2:Đường đi trên đồ thị
II BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH
II.1 Ma trận liền kề ( Ma trận kề )
Trang 41Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Giả sử G = (V, E) là một đơn đồ thị có số đỉnh (ký hiệu |V|) là n, Không mấttính tổng quát có thể coi các đỉnh được đánh số 1, 2, , n Khi đó ta có thể biểudiễn đồ thị bằng một ma trận vuông A = [aij] cấp n Trong đó:
• aij = 1 nếu (i, j) ∈E
• aij = 0 nếu (i, j) ∉ E
• Quy ước aii = 0 với mọi i;
Đối với đa đồ thị thì việc biểu diễn cũng tương tự trên, chỉ có điều nếu như (i,j) là cạnh thì không phải ta ghi số 1 vào vị trí aij mà là ghi số cạnh nối giữađỉnh i và đỉnh j
Ví dụ:
Trang 42Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Trang 43Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
1
Trang 44Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Trang 45Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
1
Trang 46Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Hình 3:Ma trận liền kề Các tính chất của ma trận liền kề:
1 Đối với đồ thị vô hướng G, thì ma trận liền kề tương ứng là ma trận đối xứng(aij = aji), điều này không đúng với đồ thị có hướng
2 Nếu G là đồ thị vô hướng và A là ma trận liền kề tương ứng thì trên ma trận A: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 = deg(i)
Trong trường hợp G là đơn đồ thị, ta có thể biểu diễn ma trận liền kề A tương ứng
là các phần tử logic aij = TRUE nếu (i, j) ∈E và aij = FALSE nếu (i, j) ∉ E
Ưu điểm của ma trận liền kề:
• Đơn giản, trực quan, dễ cài đặt trên máy tính
• Để kiểm tra xem hai đỉnh (u, v) của đồ thị có kề nhau hay không, ta chỉ việc
Trang 47Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
Nhược điểm của ma trận liền kề:
Bất kể số cạnh của đồ thị là nhiều hay ít, ma trận liền kề luôn luôn đòi hỏi n2 ônhớ để lưu các phần tử ma trận, điều đó gây lãng phí bộ nhớ dẫn tới việc khôngthể biểu diễn được đồ thị với số đỉnh lớn
Với một đỉnh u bất kỳ của đồ thị, nhiều khi ta phải xét tất cả các đỉnh v khác kềvới nó, hoặc xét tất cả các cạnh liên thuộc với nó Trên ma trận liền kề việc đóđược thực hiện bằng cách xét tất cả các đỉnh v và kiểm tra điều kiện auv ≠ 0 Nhưvậy, ngay cả khi đỉnh u là đỉnh cô lập (không kề với đỉnh nào) hoặc đỉnh treo (chỉ
kề với 1 đỉnh) ta cũng buộc phải xét tất cả các đỉnh và kiểm tra điều kiện trên dẫntới lãng phí thời gian
II 2 Danh sách cạnh
Trang 48Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
III CÁC THUẬT TOÁN TÌM KIẾM TRÊN ĐỒ THỊ
III.1 Thuật toán tìm kiếm theo chiều sâu(Depth First Search)
Tư tưởng của thuật toán có thể trình bày như sau: Trước hết, mọi đỉnh x kềvới S tất nhiên sẽ đến được từ S Với mỗi đỉnh x kề với S đó thì tất nhiên nhữngđỉnh y kề với x cũng đến được từ S Điều đó gợi ý cho ta viết một thủ tục đệ quyDFS(u) mô tả việc duyệt từ đỉnh u bằng cách thôngbáo thăm đỉnh u và tiếp tục quátrình duyệt DFS(v) với v là một đỉnh chưa thăm kề với u
• Để không một đỉnh nào bị liệt kê tới hai lần, ta sử dụng kỹ thuật đánh dấu, mỗilần thăm một đỉnh, ta đánh dấu đỉnh đó lại để các bước duyệt đệ quy kế tiếp khôngduyệt lại đỉnh đó nữa
Trang 49Niên Luận 1 GVHD:K.S Lê Thị Phương Dung
• Để lưu lại đường đi từ đỉnh xuất phát S, trong thủ tục DFS(u), trước khi gọi đệquy DFS(v) với v là một đỉnh kề với u mà chưa đánh dấu, ta lưu lại vết đường đi
từ u tới v bằng cách đặt TRACE[v] := u, tức là TRACE[v] lưu lại đỉnh liền trước vtrong đường đi từ S tới v Khi quá trình tìm kiếm theo chiều sâu kết thúc, đường đi
từ S tới F sẽ là: F ← p1 = Trace[F] ← p2 = Trace[p1] ← ← S
procedure DFS(u∈V);
begin
< 1 Thông báo tới được u >;
< 2 Đánh dấu u là đã thăm (có thể tới được từ S)>;
< 3 Xét mọi đỉnh v kề với u mà chưa thăm, với mỗi đỉnh v đó >;
begin
Trace[v] := u; {Lưu vết đường đi, đỉnh mà từ đó tới v là u}