Các cạnh của đồ thị được có thể được lưu trong một danh sách riêng có thể cài đặt bằng mảng array hoặc danh sách liên kết động linked list, trong đó mỗi phần tử ghi thông tin về một cạnh
Trang 1PDF được tạo bằng bộ công cụ mã nguồn mở mwlib Xem http://code.pediapress.com/ để biết thêm thông tin.
PDF generated at: Wed, 14 May 2014 15:48:20 UTC
Trang 3Luồng trong mạng 103
Định lý luồng cực đại lát cắt cực tiểu 106
Chú thích
Nguồn, giấy phép, và người đóng góp vào hình 121
Giấy phép Bài viết
Trang 4Đại cương
Lý thuyết đồ thị
Hình vẽ một đồ thị có 6 đỉnh và 7 cạnh
Trong toán học và tin học, lý thuyết đồ thị nghiên cứu các tính chất
của đồ thị Một cách không chính thức, đồ thị là một tập các đối tượng
được gọi là các đỉnh (hoặc nút) nối với nhau bởi các cạnh (hoặc cung)
Cạnh có thể có hướng hoặc vô hướng Đồ thị thường được vẽ dưới
dạng một tập các điểm (các đỉnh nối với nhau bằng các đoạn thẳng (các
cạnh)
Đồ thị biểu diễn được rất nhiều cấu trúc, nhiều bài toán thực tế có thể
được biểu diễn bằng đồ thị Ví dụ, cấu trúc liên kết của một website có
thể được biểu diễn bằng một đồ thị có hướng như sau: các đỉnh là các
trang web hiện có tại website, tồn tại một cạnh có hướng nối từ trang A
tới trang B khi và chỉ khi A có chứa 1 liên kết tới B Do vậy, sự phát triển của các thuật toán xử lý đồ thị là một trong
các mối quan tâm chính của khoa học máy tính
Cấu trúc đồ thị có thể được mở rộng bằng cách gán trọng số cho mỗi cạnh Có thể sử dụng đồ thị có trọng số để biểudiễn nhiều khái niệm khác nhau Ví dụ, nếu đồ thị biểu diễn một mạng đường giao thông, các trọng số có thể là độdài của mỗi con đường Một cách khác để mở rộng đồ thị cơ bản là qui định hướng cho các cạnh của đồ thị (như đối
với các trang web, A liên kết tới B, nhưng B không nhất thiết cũng liên kết tới A) Loại đồ thị này được gọi là đồ thị
có hướng Một đồ thị có hướng với các cạnh có trọng số được gọi là một lưới
Các lưới có nhiều ứng dụng trong khía cạnh thực tiễn của lý thuyết đồ thị, chẳng hạn, phân tích lưới có thể dùng để
mô hình hoá và phân tích mạng lưới giao thông hoặc nhằm "phát hiện" hình dáng của Internet - (Xem thêm các ứng
dụng đưới đây Mặc dù vậy, cũng nên lưu ý rằng trong phân tích lưới, thì định nghĩa của khái niệm "lưới" có thể khácnhau và thường được chỉ ra bằng một đồ thị đơn giản.)
Lịch sử
Một trong những kết quả đầu tiên trong lí thuyết đồ thị xuất hiện trong bài báo của Leonhard Euler về Bảy cây cầu ở
Königsberg, xuất bản năm 1736 Bài báo này cũng được xem như một trong những kết quả topo đầu tiên trong hình
học, tức là, nó không hề phụ thuộc vào bất cứ độ đo nào Nó diễn tả mối liên hệ sâu sắc giữa lí thuyết đồ thị và tôpôhọc
Năm 1845, Gustav Kirchhoff đưa ra Định luật Kirchhoff cho mạch điện để tính điện thế và cường độ dòng điện trongmạch điện
Năm 1852 Francis Guthrie đưa ra bài toán bốn màu về vấn đề liệu chỉ với bốn màu có thể tô màu một bản đồ bất kìsao cho không có hai nước nào cùng biên giới được tô cùng màu Bài toán này được xem như đã khai sinh ra lí thuyết
đồ thị, và chỉ được giải sau một thế kỉ vào năm 1976 bởi Kenneth Appel và Wolfgang Haken Trong khi cố gắng giảiquyết bài toán này, các nhà toán học đã phát minh ra nhiều thuật ngữ và khái niệm nền tảng cho lí thuyết đồ thị
Trang 5Các cấu trúc dữ liệu đồ thị
Có nhiều cách khác nhau để lưu trữ các đồ thị trong máy tính Sử dụng cấu trúc dữ liệu nào thì tùy theo cấu trúc của
đồ thị và thuật toán dùng để thao tác trên đồ thị đó Trên lý thuyết, người ta có thể phân biệt giữa các cấu trúc danhsách và các cấu trúc ma trận Tuy nhiên, trong các ứng dụng cụ thể, cấu trúc tốt nhất thường là kết hợp của cả hai
Người ta hay dùng các cấu trúc danh sách cho các đồ thị thưa (sparse graph), do chúng đòi hỏi ít bộ nhớ Trong khi
đó, các cấu trúc ma trận cho phép truy nhập dữ liệu nhanh hơn, nhưng lại cần lượng bộ nhớ lớn nếu đồ thị có kíchthước lớn
Các cấu trúc danh sách
• Danh sách liên thuộc (Incidence list) - Mỗi đỉnh có một danh sách các cạnh nối với đỉnh đó Các cạnh của đồ thị
được có thể được lưu trong một danh sách riêng (có thể cài đặt bằng mảng (array) hoặc danh sách liên kết động (linked list)), trong đó mỗi phần tử ghi thông tin về một cạnh, bao gồm: cặp đỉnh mà cạnh đó nối (cặp này sẽ có
thứ tự nếu đồ thị có hướng), trọng số và các dữ liệu khác Danh sách liên thuộc của mỗi đỉnh sẽ chiếu tới vị trí củacác cạnh tương ứng tại danh sách cạnh này
• Danh sách kề (Adjacency list) - Mỗi đỉnh của đồ thị có một danh sách các đỉnh kề nó (nghĩa là có một cạnh nối từ
đỉnh này đến mỗi đỉnh đó) Trong đồ thị vô hướng, cấu trúc này có thể gây trùng lặp Chẳng hạn nếu đỉnh 3 nằmtrong danh sách của đỉnh 2 thì đỉnh 2 cũng phải có trong danh sách của đỉnh 3 Lập trình viên có thể chọn cách sửdụng phần không gian thừa, hoặc có thể liệt kê các quan hệ kề cạnh chỉ một lần Biểu diễn dữ liệu này thuận lợicho việc từ một đỉnh duy nhất tìm mọi đỉnh được nối với nó, do các đỉnh này đã được liệt kê tường minh
Các cấu trúc ma trận
• Ma trận liên thuộc (Incidence matrix) - Đồ thị được biểu diễn bằng một ma trận kích thước p × q, trong đó
p là số đỉnh và q là số cạnh, chứa dữ liệu về quan hệ giữa đỉnh và cạnh Đơn giản nhất:
nếu đỉnh là một trong 2 đầu của cạnh , bằng 0 trong các trường hợp khác
• Ma trận kề (Adjaceny matrix) - một ma trận N × N, trong đó N là số đỉnh của đồ thị Nếu có một cạnh nào đó nối
đỉnh với đỉnh thì phần tử bằng 1, nếu không, nó có giá trị 0 Cấu trúc này tạo thuận lợi cho việc tìm
các đồ thị con và để đảo các đồ thị
• Ma trận dẫn nạp (Admittance matrix) hoặc ma trận Kirchhoff (Kirchhoff matrix) hay ma trận Laplace
(Laplacian matrix) - được định nghĩa là kết quả thu được khi lấy ma trận bậc (degree matrix) trừ đi ma trận kề.
Do đó, ma trận này chứa thông tin cả về quan hệ kề (có cạnh nối hay không) giữa các đỉnh lẫn bậc của các đỉnhđó
Trang 6một tính chất thì toàn bộ đồ thị cũng có tính chất đó Chẳng hạn như một đồ thị là không phẳng nếu như nó chứa một
đồ thị hai phía đầy đủ (complete bipartite graph ) hoặc nếu nó chứa đồ thị đầy đủ Tuy nhiên, bài toán
tìm đồ thị con cực đại thỏa mãn một tính chất nào đó thường là bài toán NP-đầy đủ (NP-complete problem).
• Bài toán đồ thị con đầy đủ lớn nhất (clique problem) (NP-đầy đủ)
• Bài toán tập con độc lập (independent set problem) (NP-đầy đủ)
Tô màu đồ thị
• Định lý bốn màu (four-color theorem)
• Định lý đồ thị hoàn hảo mạnh (strong perfect graph theorem)
• Bài toán Erdős-Faber-Lovász conjecture (hiện chưa ai giải được)
• Bài toán total coloring conjecture (hiện chưa ai giải được)
• Bài toán list coloring conjecture (hiện chưa ai giải được)
Các bài toán đường đi
• Bài toán bảy cây cầu Euler (Seven Bridges of Königsberg) còn gọi là "Bảy cây cầu ở Königsberg"
• Cây bao trùm nhỏ nhất (Minimum spanning tree)
•• Cây Steiner
•• Bài toán đường đi ngắn nhất
• Bài toán người đưa thư Trung Hoa (còn gọi là "bài toán tìm hành trình ngắn nhất")
• Bài toán người bán hàng (Traveling salesman problem) (NP-đầy đủ) cũng có tài liệu (tiếng Việt) gọi đây là "Bài
toán người đưa thư"
Luồng
•• Định lý luồng cực đại lát cắt cực tiểu
•• Reconstruction conjecture
Visibility graph problems
•• Museum guard problem
Các bài toán phủ
Các bài toán phủ là các thể hiện cụ thể của các bài toán tìm đồ thị con Chúng có quan hệ chặt chẽ với bài toán đồ thịcon đầy đủ hoặc bài toán tập độc lập
• Bài toán phủ tập (Set cover problem)
• Bài toán phủ đỉnh (Vertex cover problem)
Trang 7(transportation network).
Lý thuyết đồ thị còn được dùng trong nghiên cứu phân tử Trong vật lý vật chất ngưng tụ, cấu trúc ba chiều phức tạpcủa các hệ nguyên tử có thể được nghiên cứu một cách định lượng bằng cách thu thập thống kê về các tính chất lýthuyết đồ thị có liên quan đến cấu trúc tô pô của các nguyên tử Ví dụ, các vành đường đi ngắn nhất Franzblau
(Franzblau's shortest-path rings).
Các lĩnh vực con
Lý thuyết đồ thị rất đa dạng và có nhiều lĩnh vực con Trong đó có:
• Lý thuyết đồ thị đại số (Algebraic graph theory)
• Lý thuyết đồ thị tô pô (Topological graph theory)
• Lý thuyết đồ thị hình học (Geometric graph theory)
• Lý thuyết đồ thị cực trị (Extremal graph theory)
• Lý thuyết đồ thị mê-tríc (Metric graph theory)
• Lý thuyết đồ thị xác suất (Probabilistic graph theory)
Trang 8Lý thuyết đồ thị 5
Tham khảo
[1] http:/ / www1 cs columbia edu/ ~sanders/ graphtheory/ people/ alphabetic html
Liên kết ngoài
• Sách trực tuyến về Lý thuyết đồ thị (http://www.math.uni-hamburg.de/home/diestel/books/graph.theory/)
• Hướng dẫn về lý thuyết đồ thị (http://www.utm.edu/departments/math/graph/)
• Bài giảng của một môn học về các thuật toán đồ thị (http://www.cs.wpi.edu/~dobrush/cs507/presentation/
2001/Project10/ppframe.htm)
• Dữ liệu test chuẩn cho các bài toán đồ thị con đầy đủ lớn nhất (Maximum Clique), tập con độc lập lớn nhất
(Maximum Independent Set), phủ đỉnh nhỏ nhất (Minimum Vertex Cover) và tô mầu đỉnh (Vertex Coloring)
(http://www.nlsde.buaa.edu.cn/~kexu/benchmarks/graph-benchmarks.htm)
• Sưu tập ảnh số 1: một số mạng lưới thực (http://www.nd.edu/~networks/gallery.htm)
• Các tạp chí lý thuyết đồ thị (http://www1.cs.columbia.edu/~sanders/graphtheory/writings/journals.html)
Thuật ngữ lý thuyết đồ thị
Lưu ý: Danh sách thuật ngữ lý thuyết đồ thị này chỉ là điểm khởi đầu cho những người mới nhập môn làm quen với
một số thuật ngữ và khái niệm cơ bản Bài này không trình bày các định nghĩa chính thức của các khái niệm và thuậtngữ này
Ví dụ một đồ thị đơn với tập đỉnh V = {1, 2, 3, 4, 5, 6} và tập cạnh E
= Bản mẫu:1,2, {1,5}, {2,3}, {2,5}, {3,4}, {4,5}, Bản mẫu:4,6.
B
• Bậc (degree hoặc valency)
Bậc của đỉnh v trong đồ thị G, ký hiệu d G (v), là
số cạnh liên thuộc với v, trong đó, khuyên được
tính hai lần Một đỉnh có bậc 0 là đỉnh cô lập.Đỉnh có bậc 1 là một đỉnh treo hay lá Trong đồthị ví dụ, các đỉnh 1 và 3 có bậc là 2, các đỉnh 2,
4 và 5 có bậc bằng 3, đỉnh 6 có bậc 1
Nếu tập cạnh E là hữu hạn thì tổng giá trị bậc của
các đỉnh gọi là bậc của đồ thị Bậc của đồ thị
• Bất biến đồ thị (graph invariant)
là một tính chất của một đồ thị G, thường là một số hoặc một đa thức chỉ phụ thuộc vào lớp đẳng cấu của G Ví
dụ: bậc của đồ thị
Trang 9• Cặp ghép: (matching): một cặp ghép M của đồ thị G = (V,E) là một tập các cạnh đôi một không kề nhau của G.
• Cặp ghép hoàn hảo (perfect matching): là cặp ghép phủ tất cả các đỉnh của đồ thị Nghĩa là mỗi đỉnh của đồ
thị đều liên thuộc với đúng một cạnh của cặp ghép
• Cặp ghép lớn nhất, Cặp ghép tối đa: là cặp ghép chứa nhiều cạnh nhất có thể Có thể có nhiều cặp ghép tối
đa
• Cấp (order) của một đồ thị là số đỉnh của nó, nghĩa là |V(G)|.
• Cầu: là một cạnh mà nếu loại bỏ nó thì đồ thị tăng số thành phần liên thông.
• Cây: là một đồ thị đơn liên thông phi chu trình.
• Cây bao trùm(cây khung): là một đồ thị con bao trùm có dạng cây Chỉ có đồ thị liên thông mới có cây bao
trùm
• Cây (có gốc): thường được coi như các đồ thị đơn có hướng phi chu trình với các cung hướng từ phía gốc ra
phía lá Với mỗi cung, đỉnh tại gốc cung được gọi là đỉnh cha hoặc cha, các đỉnh tại điểm cuối của cung được
gọi là đỉnh con hoặc con của đỉnh tại gốc cung.
• Cây con: một cây con của đồ thị G là một đồ thị con có dạng cây.
• Cây k-ary:(ví dụ: nhị phân, tam phân ) là cây có gốc mà mỗi đỉnh trong đều có không quá k con.
Cây đơn phân chỉ là một đường đi.
Cây nhị phân là cây mà mỗi đỉnh có không quá 2 con.
Cây nhị phân đầy đủ là cây mà mỗi đỉnh trong có đúng 2 con.
• Chỉ số clique: Chỉ số clique ω(G) của đồ thị G là bậc của đồ thị con đầy đủ lớn nhất của G.
• Chỉ số độc lập: Chỉ số độc lập của đồ thị G, ký hiệu α(G), là kích thước của tập độc lập lớn nhất của G.
• Chu trình trong đồ thị: là một đường đi đóng trong đồ thị Đồ thị chỉ gồm một chu trình với n đỉnh được gọi là đồ
thị vòng, ký hiệu C n,
• Chu trình bao trùm: là cách gọi khác của chu trình Hamilton.
• Chu trình chẵn: là chu trình có độ dài chẵn.
• Chu trình có hướng: là một chu trình đơn mà mọi cung trong đó đều cùng hướng, nghĩa là mọi đỉnh đều có
bậc trong và bậc ngoài bằng 1 Có thể gọi đơn giản là chu trình khi ngữ cảnh rõ ràng.
• Chu trình đơn: là chu trình đi qua mỗi đỉnh không quá một lần Trong đồ thị ở hình trên, (1, 5, 2, 1) là một
chu trình đơn Nếu không chỉ rõ, chu trình thường được hiểu là một chu trình đơn.
• Chu trình Euler: là chu trình qua tất cả các cạnh, mỗi cạnh đúng một lần.
• Chu trình lẻ: là chu trình có độ dài lẻ.
• Chu vi nhỏ (girth): Chu vi nhỏ của một đồ thị là độ dài của chu trình đơn ngắn nhất của đồ thị.
• Chu vi lớn (circumference): Chu vi lớn của một đồ thị là độ dài của chu trình đơn dài nhất của đồ thị Đối với đồ
thị không có chu trình, chu vi lớn và chu vi nhỏ được định nghĩa bằng giá trị vô cùng ∞
• Chuỗi bậc (degree sequence): là danh sách các bậc của một đồ thị sắp xếp theo thứ tự giảm dần (ví dụ, d1 ≥ d2 ≥
… ≥ d n ) Một chuỗi giảm dần các số tự nhiên được coi là hiện thực được (realizable) nếu nó là chuỗi bậc của
Trang 10Thuật ngữ lý thuyết đồ thị 7một đồ thị nào đó.
• Cung: là cạnh có hướng.
D
• Dẫn xuất (induced)
Đồ thị con H của đồ thị G được coi là dẫn xuất nếu: với mỗi cặp đỉnh x và y của H, xy là một cạnh của H khi
và chỉ khi xy là một cạnh của G Nếu H được chọn dựa trên tập đỉnh S là tập con của V(G), thì H còn được ký
hiệu là G[S] và được coi là dẫn xuất từ S.
Đ
•• Đẳng cấu
Hai đồ thị G và H được coi là đẳng cấu, ký hiệu G ~ H, nếu có một quan hệ tương ứng một-một giữa hai tập đỉnh của hai đồ thị sao cho hai đỉnh của đồ thị G kề nhau khi và chỉ khi các đỉnh tương ứng của chúng trong đồ thị H cũng kề nhau.
• Đỉnh: Xem Đồ thị Đỉnh được vẽ dưới dạng một nút hoặc một điểm Tập đỉnh của đồ thị G thường được ký hiệu
là V(G), hoặc V khi không có nguy cơ hiểu nhầm.
• Đỉnh cha: Xem Cây (có gốc)
• Đỉnh con: Xem Cây (có gốc)
• Đỉnh cắt (cut vertex): là một đỉnh mà nếu loại bỏ nó thì đồ thị tăng số thành phần liên thông.
• Đỉnh gốc: là một đỉnh đặc biệt của cây có gốc Trong trường hợp này, cây là đồ thị có hướng, đỉnh gốc là đỉnh
duy nhất có bậc trong bằng 0
• Đỉnh lá: Đỉnh có bậc 1, còn được gọi là lá Thường dùng cho cây có gốc, khi đó lá là đỉnh không có con.
• Đỉnh phát (source): là đỉnh có bậc trong bằng 0.
• Đỉnh thu (sink): là đỉnh có bậc ngoài bằng 0.
• Đỉnh trong (internal vertex): Đỉnh không phải là đỉnh lá.
• Đồ thị: Gồm một tập các đỉnh được nối với nhau bằng các cạnh Xem chi tiết tại Đồ thị (toán học) Nếu không
không được chỉ rõ trong ngữ cảnh, đồ thị được hiểu là đồ thị đơn.
• Đa đồ thị: Đồ thị có đa cạnh nhưng không có khuyên Có tài liệu quy định là: đồ thị có đa cạnh và có khuyên.
• Đồ thị cha: Một đồ thị cha của G là một đồ thị chứa G với danh nghĩa một đồ thị con Ta nói rằng đồ thị G
chứa đồ thị H nếu có một đồ thị con nào đó của G chính là H hoặc đẳng cấu với H (tùy theo yêu cầu của hoàn
cảnh)
• Đồ thị chính quy: là đồ thị có bậc của tất cả các đỉnh bằng nhau.
•• Đồ thị có hướng
• Đồ thị có trọng số: Trong đồ thị có trọng số, mỗi cạnh được gắn nhãn là một số, số này được gọi là trọng số
của đỉnh Nói cách khác, đồ thị coa trọng số là một đồ thị cùng với một ánh xạ từ tập các cạnh vào tập số thực.Khi không chỉ rõ, một đồ thị luôn được coi là đồ thị không có trọng số
• Đồ thị con: Một đồ thị con của đồ thị G là một đồ thị mà tập cạnh và tập đỉnh của nó là các tập con của các
thành phần tướng ứng của G.
• Đồ thị con bao trùm (spanning subgraph): Đồ thị con H là một đồ thị con bao trùm của đồ thị G nếu tập đỉnh
của H trùng với tập đỉnh của G Ta nói rằng H bao trùm G.
• Đồ thị đầy đủ: Đồ thị đầy đủ bậc n, ký hiệu K n , là một đồ thị đơn gồm n đỉnh trong đó hai đỉnh bất kỳ đều
được nối với nhau bởi một cạnh Có tất cả n(n-1)/2 cạnh Đồ thị ví dụ không phải đồ thị đầy đủ.
• Đồ thị đơn: là đồ thị không có đa cạnh và không có khuyên.
• Đồ thị Euler có hướng: là một đồ thị có hướng mà mỗi đỉnh đều có bậc trong bằng bậc ngoài.
Trang 11• Đồ thị phổ dụng (universal graph): Đồ thị phổ dụng của một lớp đồ thị K là một đồ thị đơn nhỏ nhất mà mọi
đồ thị là phần tử của K đều là đồ thị con của nó.
• Đồ thị rỗng: là đồ thị không có cạnh và không có đỉnh Hoặc, nó là một đồ thị không có cạnh nhưng có một số đỉnh bất kỳ, khi đó, nó được gọi là đồ thị rỗng đỉnh (Không có sự thống nhất giữa các tài liệu).
• Đồ thị vòng: là đồ thị chứa một chu trình duy nhất đi qua tất cả các đỉnh, mỗi đỉnh đều có bậc đúng bằng 2.
• Đồ thị vô hạn: là đồ thị có vô hạn cạnh hoặc vô hạn đỉnh hoặc cả hai.
• Đồ thị vô hướng: là đồ thị gồm toàn các cạnh không có hướng.
•• Độ dài
Độ dài của một đường đi là số cạnh mà nó đi qua Đường đi P n có độ dài n - 1 Trong đồ thị ví dụ, (1, 2, 5, 1,
2, 3) là đường đi có độ dài 5, còn (5, 2, 1) là đường đi đơn có độ dài 2
Độ dài của một chu trìnhlà số cạnh của nó, số này cũng bằng số đỉnh nó đi qua (tính cả bội, nếu một đỉnh được
đi qua nhiều lần) C n có độ dài n Khác với đường đi, chu trình không được phép có độ dài 0 Các chu trình độ
dài 1 là các khuyên Các chu trình độ dài 2 là các cặp đa cạnh Trong đồ thị ví dụ, (1, 2, 3, 4, 5, 1) là chu trình
độ dài 5
•• Độc lập
Hai đường đi được coi là độc lập nếu chúng không có chung đỉnh nào, ngoại trừ đỉnh đầu và đỉnh cuối.
Một đỉnh cô lập hoặc đỉnh độc lập là đỉnh không liên thuộc với một cạnh nào, cũng có nghĩa là đỉnh có bậc 0.
Một tập độc lập, hay tập ổn định, là tập các đỉnh đôi một không kề nhau Đồ thị con dẫn xuất từ một tập độc
lập là một đồ thị rỗng Trong ví dụ trên, các đỉnh 1, 3 và 6 hợp thành một tập độc lập; các đỉnh 3, 5 và 6 hợpthành một tập độc lập khác
Số độc lập (indepndence number) của một đồ thị là số cực đại các đỉnh của tập độc lập ứng với đồ thị đó
•• Đồng cấu
Một đồ thị G được coi là đồng cấu với đồ thị H nếu có một ánh xạ từ V(G) tới V(H) sao cho: nếu hai đỉnh kề nhau trong G thì các đỉnh tương ứng của nó cũng kề nhau trong đồ thị H.
• Đường đi (walk/path): là một chuỗi luân phiên giữa đỉnh và cạnh, bắt đầu và kết thúc bởi một đỉnh Trong đó,
mỗi đỉnh là đỉnh đầu cuối của hai cạnh đứng liền trước và liền sau trong chuỗi, các đỉnh đứng liền trước và liền
sau một cạnh là các đỉnh đầu cuối của cạnh đó Khi có hai cạnh giống nhau trên chuỗi có thể loại bỏ bớt các cạnhtrùng nhau, sao cho không có cạnh nào của đồ thị cómặt quá một lần trên đường đi Một đường đi được coi là
đónghay một chu trình nếu đỉnh đầu và đỉnh cuối trùng nhau, được coi là mở nếu đỉnh đầu và đỉnh cuối khác
nhau Đường đi qua n đỉnh được ký hiệu là P n
• Đường đi có hướng: là một đường đi đơn trong đó mọi cung đều theo cùng một hướng, nghĩa là mọi đỉnh trên
đó đều có bậc trong và bậc ngoài bằng 1 Trong đồ thị có hướng, đỉnh v được coi là đến được từ đỉnh u nếu có
một đường đi có hướng xuất phát từ u và kết thúc tại v Có thể gọi đơn giản là đường đi khi ngữ cảnh rõ ràng.
• Đường đi đơn:là đường đi trong đó mỗi đỉnh chỉ được đi qua nhiều nhất một lần.
• Đường đi Euler (Eulerian path): là đường đi qua tất cả các cạnh, mỗi cạnh đúng một lần Đồ thị ví dụ không
có đường đi Euler
Trang 12Thuật ngữ lý thuyết đồ thị 9
• Đường đi Hamilton (Hamiltonian path): là đường đi đơn qua tất cả các đỉnh trong đồ thị Đồ thị ví dụ có
đường đi Hamilton
Hai đỉnh u và v được coi là kề nhau, kí hiệu u ↓ v, nếu có một cạnh nối chúng Trong đồ thị ví dụ, các đỉnh 1 và 2 kề
nhau, nhưng các đỉnh 2 và 4 không kề
•• Khoảng cách
Khoảng cách d G (u, v) giữa hai đỉnh (không nhất thiết phân biệt u và v trong đồ thị G là độ dài đường đi ngắn nhất giữa chúng Có thể bỏ chỉ số dưới G nếu không sợ hiểu nhầm Khi u và v là một, khoảng cách giữa chúng bằng 0 Khi giữa u và v không có đường đi, khoảng cách giữa chúng là vô cùng ∞.
Nếu giữa hai điểm bất kỳ của một đồ thị đều có thể thiết lập một đường đi từ đỉnh này đến đỉnh kia, đồ thị
được coi là liên thông; nếu không, đồ thị được coi là không liên thông Một đồ thị được coi là hoàn toàn
không liên thông nếu không có đường đi giữa hai đỉnh bất kỳ trong đồ thị Đây chỉ là một cái tên khác để
miêu tả một đồ thị rỗng hoặc một tập độc lập
Một đồ thị có hướng được coi là liên thông mạnh nếu từ mọi đỉnh đều đến được mọi đỉnh khác Ngược lại, đồ thị có hướng được coi là liên thông yếu nếu đồ thị vô hướng nền tảng của nó là đồ thị liên thông.
• Lưới (còn gọi là mạng, mạng lưới)
Trong một số tài liệu về lý thuyết đồ thị, thuật ngữ lưới (network) được coi là từ đồng nghĩa với đồ thị có
trọng số Một lưới có thể có hướng hoặc vô hướng Lưới có thể chứa các đỉnh (nút) đặc biệt, chẳng hạn đỉnh phát hoặc đỉnh thu.
Trang 13thị con dẫn xuất đều có một nhân.
• Nhúng: (embedding)
• Phép nhúng thực hiện trên (cho kết quả là đồ thị ) là một hàm đơn ánh từtới sao cho mỗi cạnh trong tương ứng với một đường đi (các đường đi này đôi một không chung
cạnh) trong đồ thị
• Một đồ thị được coi là nhúng được trên một bề mặt nếu khi vẽ đồ thị trên đó, các đỉnh và cạnh của nó có thể
được sắp xếp trên đó sao cho không có hai cạnh nào cắt nhau
• Nút (knot)
trong một đồ thị có hướng, nút là một tập các đỉnh và cung với tính chất: mọi đỉnh trong nút đều có cung từ đó
đi ra, và mọi cung xuất phát từ các đỉnh trong nút đều có đích là các đỉnh nằm trong nút Do đó, không thể rakhỏi nút nếu đi theo hướng của các cung
Trong trường hợp đồ thị là sơ đồ sử dụng tài nguyên (general resource graph), một nút là điều kiện đủ cho
Cho hai đỉnh và , là một phản cạnh của đồ thị nếu không phải là cạnh của
Nghĩa là: hoặc không có cạnh nào nối hai đỉnh, hoặc chỉ có một cung từ tới nếu là đồ thị cóhướng
• Phần bù (complement)
Phần bù của một đồ thị G là một đồ thị có cùng tập đỉnh như G nhưng lại có tập cạnh thỏa mãn điều kiện:
xy là một cạnh của khi và chỉ khi xy không phải là cạnh của G.
Trang 14Thuật ngữ lý thuyết đồ thị 11
Q
•• Quan hệ liên thuộc
Quan hệ giữa cạnh và đỉnh là một trong hai đầu của cạnh đó
Sắc số χ(G) của một đồ thị G là số nhỏ nhất các màu cần thiết để tô màu đồ thị đó, nghĩa là tô màu các đỉnh
của nó sao cho hai đỉnh kề nhau có màu khác nhau
Tập láng giềng, còn gọi là tập láng giềng (mở) của một đỉnh v, ký hiệu N G (v), bao gồm tất cả các đỉnh kề với
v không kể v Nếu kể cả v, tập này được gọi là tập láng giềng đóng, ký hiệu N G [v] Nếu không nói rõ, một tập láng giềng được coi là mở Chỉ số dưới G thường được bỏ qua nếu không gây nhầm lẫn Trong đồ thị ví dụ,
đỉnh 1 có hai hàng xóm: các đỉnh 2 và 5 Đối với đồ thị đơn, số láng giềng của một đỉnh trùng với bậc của đỉnhđó
• Tập thống trị (dominating set)
Một tập thống trị của một đồ thị là một tập con của tập đỉnh, trong đó hợp của các tập láng giềng đóng của các
đỉnh trong tập con đó bao gồm tất cả các đỉnh của đồ thị
•• Tập ổn định
Xem Độc lập.
• Tập ổn định trong cùng nghĩa với tập độc lập.
• Tập ổn định ngoài cùng nghĩa với tập thống trị.
•• Thành phần liên thông
Quan hệ liên thông trong đồ thị vô hướng là quan hệ tương đương, quan hệ này chia tập các đỉnh của đồ thị
thành các lớp tương đương, mỗi lớp được gọi là một thành phần liên thông của một đồ thị.
•• Thành phần liên thông mạnh
Thành phần liên thông mạnh của một đồ thị có hướng là một đồ thị con, trong đó từ mỗi đỉnh của nó đều có
đường đi đến mọi đỉnh khác
•• Thống trị
Trang 15số Chẳng hạn, thuật toán Dijkstra chỉ dùng được cho các trọng số dương Trọng số của đường đi hoặc trọng
số của cây trong một đồ thị có trọng số là tổng trọng số của các cạnh được chọn Đôi khi một cạnh không tồn
tại được gán một trọng số đặc biệt để biểu diễn giá trị vô cùng Từ chi phí đôi khi được dùng để chỉ trọng số.
Tham khảo
• Bollobás, Béla (1998) Modern Graph Theory New York: Springer-Verlag ISBN 0-387-98488-7 [Nhiều chủ đề
nâng cao kèm thêm tổng quan về quá trình phát triển tai cuối mỗi chương.]
• West, Douglas B (2001) Introduction to Graph Theory (2ed) Upper Saddle River: Prentice Hall ISBN
0-13-014400-2 [Nhiều minh họa, tham khảo, và bài tập Hướng dẫn hoàn chỉnh nhất về chủ đề này.]
• Eric W Weisstein "Graph." From MathWorld—A Wolfram Web Resource http://mathworld.wolfram.com/
Graph.html
• Zaslavsky, Thomas Glossary of signed and gain graphs and allied areas Electronic Journal of Combinatorics,
Dynamic Surveys in Combinatorics, # DS 8 http://www.combinatorics.org/Surveys/
Đồ thị (lý thuyết đồ thị)
Bài này chỉ viết về các định nghĩa cơ bản Để hiểu rộng hơn, xin xem lý thuyết đồ thị Về ý nghĩa biểu diễn hàm số trên hệ tọa độ, xem đồ thị hàm số.
Một đồ thị vô hướng với 6 đỉnh (nút) và 7 cạnh.
Trong toán học và tin học, đồ thị là đối tượng nghiên cứu cơ bản của
lý thuyết đồ thị Một cách không chính thức, đồ thị là một tập các đối
tượng gọi là đỉnh nối với nhau bởi các cạnh Thông thường, đồ thị
được vẽ dưới dạng một tập các điểm (đỉnh, nút) nối với nhau bởi các
đoạn thẳng (cạnh) Tùy theo ứng dụng mà một số cạnh có thể có
hướng
Các định nghĩa
Trong các tài liệu, các định nghĩa trong lý thuyết đồ thị được phát biểu
theo nhiều kiểu Dưới đây là kiểu truyền thống của cuốn từ điển bách khoa này
Trang 16• E, tập các cặp không thứ tự chứa các đỉnh phân biệt, được gọi là cạnh Hai
đỉnh thuộc một cạnh được gọi là các đỉnh đầu cuối của cạnh đó.
Trong nhiều tài liệu, tập các cạnh bao gồm cả các cặp đỉnh không phân biệt,
các cạnh này được gọi là các khuyên V (và E) thường là các tập hữu hạn, phần
lớn các kết quả nghiên cứu đã biết không đúng (hoặc khác) khi áp dụng cho đồ
thị vô hạn (infinite graph) vì nhiều luận cứ không dùng được trong trường hợp
vô hạn
Đồ thị có hướng
Đồ thị có hướng G là một cặp có thứ tự G:=(V, A), trong đó
• V, tập các đỉnh hoặc nút,
• A, tập các cặp có thứ tự chứa các đỉnh, được gọi là các cạnh có hướng hoặc
cung Một cạnh e = (x, y) được coi là có hướng từ x tới y; x được gọi là
điểm đầu/gốc và y được gọi là điểm cuối/ngọn của cạnh.
Đồ thị đơn và Đa đồ thị
Đồ thị đơn là đồ thị mà không có khuyên và không có cạnh song song Đa đồ
thị là đồ thị mà không thỏa đồ thị đơn.Đa đồ thị có hướng là một đồ thị có
hướng, trong đó, nếu x và y là hai đỉnh thì đồ thị được phép có cả hai cung (x, y) và (y, x).Đồ thị đơn có hướng (hoặc Đơn đồ thị có hướng) là một đồ thị có hướng, trong đó, nếu x và y là hai đỉnh thì đồ thị chỉ được phép có tối
đa một trong hai cung (x, y) hoặc (y, x).
Quiver thường được coi là một đồ thị có hướng Nhưng trong thực hành, nó là một đồ thị có hướng với các không
gian vector (vector space) gắn với các đỉnh và các biến đổi tuyến tính gắn với các cung.
Đồ thị hỗn hợp
Đồ thị hỗn hợp G là một bộ ba có thứ tự G:= (V,E,A) với V, E và A được định nghĩa như trên.
Các định nghĩa khác
Như đã được định nghĩa ở trên, các cạnh của đồ thị vô hướng có hai đầu là hai đỉnh phân biệt; E và A là các tập hợp
(với các phần tử phân biệt) Nhiều ứng dụng cần các khái niệm rộng hơn, và các thuật ngữ cũng khác nhau Một
khuyên (loop) là một cạnh (vô hướng hoặc có hướng) nối từ một đỉnh về chính nó; Kiểu cạnh này có được chấp nhận
hay không là tùy ở ứng dụng Trong ngữ cảnh này, một cạnh nối hai đỉnh phân biệt được gọi là một liên kết (link).
Đôi khi, E và A được phép là các đa tập hợp (multiset), khi đó giữa hai đỉnh có thể có nhiều hơn một cạnh Có thể cho phép giữa hai đỉnh có nhiều cạnh bằng cách cho E là một tập hợp độc lập với V, và xác định các điểm đầu của mỗi cạnh bằng một quan hệ liên thuộc (incidence relation) giữa V và E Đối với đồ thị có hướng, ta áp dụng tương tự cho tập hợp cạnh có hướng A, tuy nhiên, phải có hai quan hệ liên thuộc, một cho đỉnh đầu và một cho đỉnh cuối của
mỗi cung Trong các sách, tùy theo ý của tác giả hoặc theo yêu cầu của chủ đề cụ thể mà từ "đồ thị" có thể hàm ý cho phép hoặc không cho phép khuyên hay đa cạnh Nếu đồ thị không cho phép đa cạnh (và không cho phép khuyên
nếu là đồ thị có hướng), đồ thị được gọi là đồ thị đơn Mặt khác, nếu cho phép đa cạnh (và đôi khi cả khuyên), đồ thị được gọi là đa đồ thị Đôi khi, từ giả đồ thị (pseudograph) còn được dùng để hàm ý cả đa cạnh và khuyên đều
Trang 17Trong một đồ thị có trọng số, mỗi cạnh được gắn với một giá trị nào đó, được gọi là trọng số, độ dài, chi phí, hoặc
các tên khác tùy theo ứng dụng; các đồ thị như vậy được dùng trong nhiều ngữ cảnh, chẳng hạn trong các bài toán tối
ưu hóa đường đi như bài toán người bán hàng
Ví dụ
Hình bên là một biểu diễn đồ họa của đồ thị sau
• V:={1,2,3,4,5,6}
• E:=Bản mẫu:1,2,{1,5},{2,3},{2,5},{3,4},{4,5},Bản mẫu:4,6
Đôi khi, thông tin "đỉnh 1 được nối với đỉnh 2" được ký hiệu là 1 ~ 2
• Trong lý thuyết phạm trù (category theory) một phạm trù có thể được coi là một đa đồ thị có hướng với các đối tượng là các đỉnh và các morphism là các cạnh có hướng Khi đó, các hàm tử (functor) giữa các phạm trù là một
số (nhưng không nhất thiết tất cả) digraph morphism
• Trong Khoa học máy tính đồ thị có hướng được dùng để biểu diễn các ô-tô-mát hữu hạn (finite state machine) và
nhiều cấu trúc rời rạc khác
• Một quan hệ đôi (binary relation) R trên tập X là một đồ thị đơn có hướng Hai đỉnh x,y của X được nối với nhau bởi một cung nếu xRy.
Trang 18Đồ thị (lý thuyết đồ thị) 15
Các dạng đồ thị quan trọng
• Trong một đồ thị đầy đủ mỗi cặp đỉnh đều được nối với nhau bằng một cạnh, nghĩa là đồ thị chứa tất cả các cạnh
có thể
• Một đồ thị phẳng có thể được vẽ trên mặt phẳng sao cho không có hai cạnh nào cắt nhau
• Cây là một đồ thị liên thông không có chu trình
• Đồ thị hai phía (Bipartite graph)
• Đồ thị hoàn hảo (Perfect graph)
• Đồ thị đường (Line graph) (tạo đồ thị mới bằng cách chuyển cạnh thành đỉnh và tạo các cạnh tương ứng)
• Đồ thị đối ngẫu (Dual graph) (tạo đồ thị mới từ một đồ thị phẳng bằng cách tạo một đỉnh cho mỗi miền mặt phẳng
và các cạnh được nối giữa hai đỉnh tương ứng với hai miền kề nhau)
• Đồ thị bù (Complement graph)
Các phép toán hai ngôi
• Tích Đề-các của đồ thị (Cartesian product of graphs)
• Tích Ten-xơ của đồ thị (Tensor product of graphs)
Các suy rộng
Trong siêu đồ thị (hypergraph), một cạnh có thể nối nhiều hơn hai đỉnh.
Một đồ thị vô hướng có thể được coi là một phức đơn hình (simplicial complex) bao gồm các đơn hình 1 chiều (các
cạnh) và các đơn hình 0 chiều (các đỉnh) Như vậy, đa hình là suy rộng của đồ thị do chúng cho phép các đơn hìnhnhiều chiều hơn
Mỗi đồ thị đều cho một matroid, nhưng nói chung, không thể tạo lại đồ thị từ matroid của nó, do đó, matroid khôngphải là suy rộng của đồ thị
Trong lý thuyết mô hình (model theory), một đồ thị chỉ là một cấu trúc Nhưng khi đó, không có giới hạn về số cạnh:
nó có thể là một số đếm bất kỳ
Trang 19hơn Ma trận liên thuộc là một biểu diễn ma trận khác cho đồ thị.
Quan hệ giữa một đồ thị và ma trận kề của nó được nghiên cứu trong lý thuyết phổ đồ thị (spectral graph theory)[1]
Khái niệm
•• Xét đồ thị G=(X, U) (có hướng hay vô hướng)
• Giả sử tập X gồm n đỉnh và được sắp thứ tự X={ }, tập U gồm n cạnh và được sắp thứ tự U={
}
Quy tắc[2]
Ma trận kề của đồ thị G, ký hiệu B(G), là một ma trận nhị phân cấp n x n được định nghĩa như sau: B=( ) với:
• B=( = 1 nếu có cạnh nối tới
• B=( = 0 nếu không có cạnh nối tới
Nếu G là đồ thị vô hướng, ma trận liên thuộc của đồ thị G, ký hiệu A(G), là ma trận nhị phân cấp nxm được địnhnghĩa như sau: A=( )
• A=( ) = 1 nếu có cạnh nối tới
• A=( ) = 0 nếu không có cạnh nối tới
Trang 20• Còn lại các cặp đỉnh không có cạnh nối với nhau => = = 0
•• Kết quả sau khi biểu diễn đồ thị G sang ma trận kề:
Trang 21Đồ thị G
• Trong đó dòng và cột màu vàng là danh sách các đỉnh của đồ thị vô hướng G
Biểu diễn đồ thị có hướng
Trang 22Ma trận kề 19
• 2 và 3 có cạnh nối và 2 đi vào 3 =>
• 3 và 1 có cạnh nối và 3 đi vào 1 =>
• 4 và 1 có cạnh nối và 4 đi vào 1 =>
• Còn lại các cặp đỉnh không có cạnh nối thì
•• Kết quả sau khi biểu diễn đồ thị G sang ma trận kề:
Đồ thị G
Tính chất
•• Rõ ràng ma trận kề của đồ thị vô hướng là ma trận đối xứng, tức là:
Ngược lại, mỗi (0,1)-ma trận đối xứng cấp n sẽ tương ứng, chính xác đến cách đánh số đỉnh (còn nói là: chính xác đến đẳng cấu), với một đơn đồ thị vô hướng n đỉnh.
•• Ma trận kề của đồ thị có hướng không phải là ma trận đối xứng
• Đối với đồ thị vô hướng, tổng các phần từ trên dòng i (cột j) của ma trận kề chính bằng bậc của đỉnh i (đỉnh j).
• Đối với đồ thị có hướng, tổng các phần tử trên dòng i (cột i) sẽ là bán bậc ra (bán bậc vào) của đỉnh i của đồ thị.
Trang 23có thể được dùng như các bất biến đẳng cấu của đồ thị Cho trước hai ma trận kề, có thể xây dựng lại ma trận hoán vị
đã được sử dụng: xem chi tiết tại Ma trận hoán vị
Tuy nhiên, cần lưu ý rằng điều ngược lại không đúng: hai đồ thị có thể có bộ giá trị riêng giống nhau nhưng chúngkhông đẳng cấu Phép nhân với ma trận hoán vị có thể được coi là việc gắn nhãn mới cho các cạnh
Nếu A là ma trận kề của đồ thị có hướng hoặc vô hướng G, thì ma trận A n (ma trận tích của n lần A) có một ý nghĩa thú vị: ô tại hàng i và cột j cho biết số đường đi (có hướng hoặc vô hướng) có độ dài n từ đỉnh i tới đỉnh j.
Ma trận I − A (trong đó I ký hiệu ma trận đơn vị n×n) là nghịch đảo được khi và chỉ khi đồ thị G không có chu trình
có hướng Khi đó, ma trận nghịch đảo (I − A)−1 có ý nghĩa sau: ô tại hàng i và cột j cho biết số đường đi có hướng từ đỉnh i tới đỉnh j (giá trị này luôn hữu hạn nếu đồ thị không có chu trình có hướng) Điều này có thể được giải thích bằng cấp số nhân (geometric series) của các ma trận:
(I − A)−1 = I + A + A2 + A3 +
tương ứng với thực tế rằng số đường đi từ i tới j bằng số đường đi độ dài 0 cộng với số đường đi độ dài 1 cộng với số
đường đi độ dài 2 v.v Đường chéo chính của mọi ma trận kề tương ứng của đồ thị không có khuyên gồm toàn các ôchứa giá trị 0
Ma trận kề của đồ thị phân đôi
Một ma trận kề A của một đồ thị phân đôi gồm r và s đỉnh có dạng:
Trong đó B là một ma trận r × s và O là một ma trận toàn-số-0 Rõ ràng là ma trận B là đại diện duy nhất cho đồ thị phân đôi Ta có G = (U, V, E) là một đồ thị phân đôi với các phần và Ma trận
phân đôi là ma trận B r × s 0-1 trong đó khi và chỉ khi
Nếu G là một đa đồ thị phân đôi hoặc đồ thị trọng số phân đôi thì các thành phần chứa giá trị tương ứng là bậccủa các đỉnh hoặc trọng số của cạnh
Các biến thể
Ma trận kề (0,−1,1) của một đồ thị đơn có aii = 0 và a ij = −1 nếu ij là một cạnh và bằng 1 nếu không phải là cạnh.
Đồ thị này được dùng trong nghiên cứu các đồ thị chính quy mạnh (strongly regular graph) và các two-graph (đồ thị
đôi???).
Các thỏa hiệp trong vai trò cấu trúc dữ liệu
Khi được sử dụng với vai trò cấu trúc dữ liệu, đối thủ chính của ma trận kề là danh sách kề Do mỗi ô trong ma trận
kề chỉ đòi hỏi một bit, nên chúng có thể được biểu diễn bằng một cách rất gọn, chỉ chiếm n2/8 byte bộ nhớ liên tục,
trong đó n là số đỉnh Ngoài việc tiết kiệm bộ nhớ, lưu trữ gọn gàng này còn khuyến khích locality of reference (tính
địa phương của các truy nhập đến bộ nhớ).
Trang 24Ma trận kề 21
Mặt khác, khi dùng cho đồ thị thưa, danh sách kề lại thắng thế, do chúng không lưu trữ các cạnh không tồn tại Sử
dụng cài đặt danh sách liên kết đơn giản trên một máy tính 32-bit, một danh sách kề cho một đồ thị vô hướng cần
khoảng 16e byte, trong đó e là số cạnh của đồ thị.
Lưu ý rằng một đồ thị có thể có nhiều nhất n2 cạnh (kể cả các khuyên) Giả sử d = e/n2 ký hiệu mật độ của đồ thị Ta có: 16e > n2/8, có nghĩa là danh sách kề chiếm nhiều không gian hơn khi d > 1/128 Do đó, chỉ nên dùng danh sách
kề với đồ thị thưa
Bên cạnh thỏa hiệp về không gian bộ nhớ, các cấu trúc dữ liệu khác nhau còn tạo thuận lợi cho các thao tác dữ liệukhác nhau Với một danh sách kề, ta dễ dàng tìm mọi đỉnh kề với một đỉnh cho trước; ta chỉ cần đọc danh sách kềcủa đỉnh đó Với một ma trận kề, ta phải duyệt toàn bộ một hàng, việc đó cần thời gian O(n) Còn nếu ta lại muốnbiết giữa hai đỉnh cho trước có cạnh nối hay không, điều này có thể được xác định ngay lập tức với một ma trận kề,trong khi đó với một danh sách kề, việc này đòi hỏi thời gian tỷ lệ thuận với bậc nhỏ nhất của các đỉnh trong đồ thị
Tham khảo
[1]
[1] CHUNG, Fan RK Spectral Graph Teory Amer Mathematical Society, 1997.
[2] Trần Đan Thư - Dương Anh Đức, Lý Thuyết Đồ Thị, Đại Học Khoa Học Tự Nhiên - DHQGTP.HCM, thánh 9 năm 2008
[3] Chartrand, G.,http:/ / www amazon com/ exec/ obidos/ ASIN/ 0486247759/ ref=nosim/ weisstein-20/[Introductory Graph Theory], New
York: Dover, p 218, 1985.
Tài liệu
• Thomas H Cormen, Charles E Leiserson, Ronald L Rivest, and Clifford Stein Introduction to Algorithms,
Second Edition MIT Press and McGraw-Hill, 2001 ISBN 0262032937 Section 22.1: Representations of graphs,
pp. 527–531
Các chủ đề chính trong toán học
Nền tảng toán học | Đại số | Giải tích | Hình học | Lý thuyết số | Toán học rời rạc | Toán học ứng dụng
| Toán học giải trí | Toán học tô pô | Xác suất thống kê
Trang 25Thông thường, danh sách kề không coi trọng thứ tự giữa các cạnh.
Trong Khoa học máy tính, danh sách kề là một cấu trúc dữ liệu gắn bó chặt chẽ với việc biểu diễn đồ thị Trong một
biểu diễn danh sách kề, với mỗi đỉnh trong đồ thị, ta lưu trữ tất cả các đỉnh khác có cạnh nối với đỉnh đó - danh sách
kề của đỉnh Ví dụ, đồ thị trong hình vẽ có biểu diễn danh sách kề như sau:
a kề với b,c
b kề với a,c
c kề với a,b
Các thỏa hiệp
Đối thủ chính của danh sách kề là ma trận kề Với một đồ thị có ma trận kề thưa, biểu diễn danh sách kề của nó
chiếm ít không gian hơn, do nó không sử dụng phần không gian nào để lưu trữ các cạnh không tồn tại Sử dụng cài đặt danh sách liên kết đơn giản trên một máy tính 32-bit, một danh sách kề cho một đồ thị vô hướng cần khoảng 16e byte, trong đó e là số cạnh của đồ thị.
Mặt khác, do mỗi ô trong ma trận kề chỉ đòi hỏi một bit, chúng có thể được biểu diễn rất gọn, chỉ chiếm n2/8 byte
không gian bộ nhớ liên tục, trong đó n là số đỉnh Ngoài việc tiết kiệm bộ nhớ, lưu trữ gọn gàng này còn khuyến khích locality of reference (tính địa phương của các truy nhập đến bộ nhớ).
Lưu ý rằng một đồ thị có thể có nhiều nhất n2 cạnh (kể cả các khuyên) Giả sử d = e/n2 ký hiệu mật độ của đồ thị Ta có: 16e > n2/8, có nghĩa là danh sách kề chiếm nhiều không gian hơn khi d > 1/128 Do đó, chỉ nên dùng danh sách
kề với đồ thị thưa
Bên cạnh thỏa hiệp về không gian bộ nhớ, các cấu trúc dữ liệu khác nhau còn tạo thuận lợi cho các thao tác dữ liệukhác nhau Với một danh sách kề, ta dễ dàng tìm mọi đỉnh kề với một đỉnh cho trước; ta chỉ cần đọc danh sách kềcủa đỉnh đó Với một ma trận kề, ta phải duyệt toàn bộ một hàng, việc đó cần thời gian O(n) Còn nếu ta lại muốnbiết giữa hai đỉnh cho trước có cạnh nối hay không, điều này có thể được xác định ngay lập tức với một ma trận kề,trong khi đó với một danh sách kề, việc này đòi hỏi thời gian tỷ lệ thuận với bậc nhỏ nhất của các đỉnh trong đồ thị
Trang 26Danh sách kề 23
Chú thích
Tham khảo
David Eppstein (1996) “ICS 161 Lecture Notes: Graph Algorithms” (http:/ / www ics uci edu/ ~eppstein/ 161/ 960201 html).
• The Boost Graph Library implements an efficient adjacency list (http://www.boost.org/doc/libs/1_43_0/libs/
graph/doc/index.html)
• Open Data Structures - Section 12.2 - AdjacencyList: A Graph as a Collection of Lists (http://
opendatastructures.org/versions/edition-0.1e/ods-java/12_2_AdjacencyLists_Graph_a.html)
• Thomas H Cormen, Charles E Leiserson, Ronald L Rivest, and Clifford Stein Introduction to Algorithms,
Second Edition MIT Press and McGraw-Hill, 2001 ISBN 0262032937 Pages 527–529 of section 22.1:
Representations of graphs
• AdjacencyList in Java (http://talkera.org.cp-in-1.webhostbox.net/wp/?p=76)
Trang 27Ví dụ về thứ tự duyệt theo chiều sâu
Phân loại Thuật toán tìm kiếm
Cấu trúc dữ liệu Đồ thị
Độ phức tạp thời gian O(|V|+|E|) với đơn đồ thị, không duyệt vòng
Độ phức tạp không gian O(|V|) nếu duyệt toàn bộ đồ thị, mỗi đỉnh qua đúng một lần
Thuật toán tìm kiếm trên đồ thị Tìm kiếm
•• A*
•• Tìm kiếm theo lựa chọn tốt nhất
•• Tìm kiếm hai chiều
•• Tìm kiếm theo chiều rộng
•• Tìm kiếm theo chiều sâu
•• Tìm kiếm độ sâu giới hạn
•• Thuật toán Floyd-Warshall
•• Tìm kiếm theo chiều sâu lặp tăng dần
•• Tìm kiếm chi phí đều
Tìm kiếm ưu tiên chiều sâu hay tìm kiếm theo chiều sâu (tiếng Anh: Depth-first search - DFS) là một thuật toán
duyệt hoặc tìm kiếm trên một cây hoặc một đồ thị Thuật toán khởi đầu tại gốc (hoặc chọn một đỉnh nào đó coi nhưgốc) và phát triển xa nhất có thể theo mỗi nhánh
Thông thường, DFS là một dạng tìm kiếm thông tin không đầy đủ mà quá trình tìm kiếm được phát triển tới đỉnh conđầu tiên của nút đang tìm kiếm cho tới khi gặp được đỉnh cần tìm hoặc tới một nút không có con Khi đó giải thuậtquay lui về đỉnh vừa mới tìm kiếm ở bước trước Trong dạng không đệ quy, tất cả các đỉnh chờ được phát triển được
bổ sung vào một ngăn xếp LIFO
Độ phức tạp không gian của DFS thấp hơn của BFS (tìm kiếm ưu tiên chiều rộng) Độ phức tạp thời gian của haithuật toán là tương đương nhau và bằng O(|V| + |E|)
Trang 28Tìm kiếm theo chiều sâu 25
Ví dụ
Tìm kiếm ưu tiên chiều sâu bắt đầu thăm đỉnh A, đi theo cạnh trái, tiếp tục tìm kiếm xong ở cây con trái mới chuyểnsang tìm kiếm ở cây con phải Thứ tự thăm viếng các đỉnh là: A, B, D, F, E, C, G
Quá trình viếng thăm các đỉnh diễn ra như sau: Sau khi thăm đỉnh A, vì B chưa được thăm nên theo cạnh AB ta thăm
B, tiếp tục theo cạnh BD tới viếng thăm D Từ D không thể tiếp tục đi xa hơn, ta quay lại B Từ B, theo BF đến thăm
F, từ F đến thăm E Từ E vì A đã viếng thăm nên ta quay lại F, rồi quay lại B Tại B vì tất cả các khả năng từ B đãxem xét nên ta quay lại A Từ A, quá trình tiếp tục với các đỉnh C và G
Kết quả của thuật toán
Một cách tự nhiên, kết quả của giải thuật tìm kiếm theo chiều sâu là một cây phủ qua tất cả các đỉnh được duyệt của
đồ thị
Duyệt các đỉnh
Có thể dùng giải thuật này để tạo một danh sách tuyến tính các đỉnh của một đồ thị (hoặc cây) Có ba cách hiện thựcphương pháp này:
• Duyệt tiền thứ tự (preordering): tạo ra một danh sách mà trong đó các đỉnh xuất hiện theo đúng trật tự nó được
thăm đến khi chạy thuật toán Đây chính là biểu diễn tự nhiên của quá trình thực hiện giải thuật tìm kiếm theo
chiều sâu Một biểu thức ở dạng tiền thứ tự được gọi là kí pháp tiền tố
• Duyệt hậu thứ tự (postordering): tạo ra một danh sách mà trong đó các đỉnh xuất hiện theo thứ tự của lần duyệt
đến sau cùng khi thực hiện giải thuật Một lần duyệt hậu thứ tự một cây biểu thức sẽ cho ra một kí pháp hậu tố.
• Duyệt đảo hậu thứ tự (reverse postordering): kết quả của cách duyệt này là sự đảo ngược lại thứ tự trong kết quả
duyệt hậu thứ tự Thông thường, khi duyệt cây, cách này cho ra cùng kết quả với duyệt tiền thứ tự, nhưng xét tổngquát, khi duyệt một đồ thị, tiền thứ tự và đảo hậu thứ tự cho ra kết quả khác nhau Với các đồ thị có hướng và
không có vòng, cách duyệt đảo hậu thứ tự cho ra một trật tự tô-pô của đồ thị đó
Thuật toán tìm kiếm theo chiều sâu trong đồ thị vô hướng[1]
Ý tưởng thuật toán
1 DFS trên đồ thị vô hướng cũng giống như khám phá mê cung với một cuộn chỉ và một thùng sơn đỏ để đánh dấu, tránh bị lạc Trong đó mỗi đỉnh s trong đồ thị tượng trưng cho một cửa trong mê cung.
2 Ta bắt đầu từ đỉnh s, buộc đầu cuộn chỉ vào s và đánh đấu đỉnh này "đã thăm" Sau đó ta đánh dấu s là đỉnh hiện hành u.
3 Bây giờ, nếu ta đi theo cạnh (u,v) bất kỳ.
4 Nếu cạnh (u,v) dẫn chúng ta đến đỉnh "đã thăm" v, ta quay trở về u.
5 Nếu đỉnh v là đỉnh mới, ta di chuyển đến v và lăn cuộn chỉ theo Đánh dấu v là "đã thăm" Đặt v thành đỉnh hiện
hành và lặp lại các bước
6 Cuối cùng, ta có thể đi đến một đỉnh mà tại đó tất cả các cạnh kề với nó đều dẫn chúng ta đến các đỉnh "đã
thăm" Khi đó, ta sẽ quay lui bằng cách cuộn ngược cuộn chỉ và quay lại cho đến khi trở lại một đỉnh kề với một
Trang 291 Khẳng định 1, là hiển nhiên vì DFS duyệt qua tất cả các đỉnh kề với đỉnh hiện hành(Có thể chứng minh hòa
chỉnh hơn bằng phản chứng)
2 Khẳng định 2, đúng do ta chỉ đánh dấu các cạnh đi đến một đỉnh mới nên không thể tạo ra chu trình Như vậy
DFS tạo ra một cây Hơn nữa, DFS thăm tất cả các đỉnh thuộc thành phần liên thông nên cây này là cây tối đại.
Độ phức tạp của thuật toán
1 DFS được gọi đúng 1 lần ứng với mỗi đỉnh.
2 Mỗi cạnh được xem xét đúng 2 lần, mỗi lần từ một đỉnh kề với nó.
3 Với n s đỉnh và m s cạnh thuộc thành phần liên thông chứa s, một phép DFS bắt đầu tại s sẽ chạy với thời gian
O(n s + m s ) nếu:
•• Đồ thị được biểu diễn bằng cấu trúc dữ liệu dạng danh sách kề
• Đặt nhãn cho một đỉnh là "đã thăm" và kiểm tra xem một đỉnh "đã thăm chưa tốn chi phí O(degree).
• Bằng cách đặt nhãn cho các đỉnh là "đã thăm", ta có thể xem xét một cách hệ thống các cạnh kề với đỉnh
hiện hành nên ta sẽ không xem xét một cạnh quá 1 lần
Xác định đỉnh kề trong DFS
• Kết quả của DFS phụ thuộc vào cách ta chọn đỉnh kế tiếp.
Xác định đỉnh kề trong Depth-first search
• Nếu ta bắt đầu tại A và thử cạnh nối đến F, sau đó đến B, rồi đến E, C, cuối cùng là G ta được:
Bắt đầu từ A và kết thúc tại G
• Nếu cũng bắt đầu từ A nhưng đi theo trình tự, tập các cạnh đã thăm, backedge và các điểm đệ quy sẽ khác trước.
Trang 30Tìm kiếm theo chiều sâu 27
Bắt đầu từ A nhưng đi theo trình tự tập các cạnh
đã thăm.
Chạy từng bước thuật toán
Giờ ta sẽ chạy từng bước thuật toán theo ví dụ trên
Trang 32Tìm kiếm theo chiều sâu 29
Chạy từng bước thuật toán Depth-first search trong đồ thị vô hướng, bước 7
Trang 34Tìm kiếm theo chiều sâu 31
Chạy từng bước thuật toán Depth-first search trong đồ thị vô hướng, bước 15
Trang 35Ứng dụng
Nhiều giải thuật sử dụng tìm kiếm theo chiều sâu:
• Xác định các thành phần liên thông của đồ thị
• Sắp xếp tô-pô cho đồ thị
• Xác định các thành phần liên thông mạnh của đồ thị có hướng
• Kiểm tra một đồ thị có phải là đồ thị phẳng hay không
Tài liệu tham khảo
[1] Dương Anh Đức, Nhập môn Cấu Trúc Dữ Liệu và Giải Thuật (http:/ / dembinhyen free fr/ UDS/ Ebook/ CD1/ Ly_thuyet_do_thi_Theorie/
Graph-DFS pdf), Đại Học Khoa Học Tự Nhiên TP.HCM
[2] Trương Mỹ Dung, Chương 1 Các khái niệm cơ bản về đồ thị, trang 9 (http:/ / dembinhyen free fr/ UDS/ Ebook/ CD1/
Ly_thuyet_do_thi_Theorie/ Ch1_LTDT_TMD pdf), Đại Học Khoa Học Tự Nhiên TP.HCM
Liên kết ngoài
Video demo thuật toán DFS (http://www.youtube.com/watch?v=5AN55O8cF8E)
Trang 36Tìm kiếm theo chiều rộng 33
Tìm kiếm theo chiều rộng
Tìm kiếm theo chiều rộng
Thông tin chung
Phân loại: Thuật toán tìm kiếm
Cấu trúc dữ liệu: Đồ thị
Phức tạp thời gian:
Phức tạp dữ liệu:
Tối ưu: tối ưu (cho đồ thị không trọng số)
Trong lý thuyết đồ thị, tìm kiếm theo chiều rộng (BFS) là một thuật toán tìm kiếm trong đồ thị trong đó việc tìm
kiếm chỉ bao gồm 2 thao tác: (a) thăm một đỉnh của đồ thị; (b) thêm các đỉnh kề với đỉnh vừa thăm vào danh sách cóthể thăm trong tương lai Có thể sử dụng thuật toán tìm kiếm theo chiều rộng cho hai mục đích: tìm kiếm đường đi từmột đỉnh gốc cho trước tới một đỉnh đích, và tìm kiếm đường đi từ đỉnh gốc tới tất cả các đỉnh khác Trong đồ thịkhông có trọng số, thuật toán tìm kiếm theo chiều rộng luôn tìm ra đường đi ngắn nhất có thể Thuật toán BFS bắtđầu từ đỉnh gốc và lần lượt thăm các đỉnh kề với đỉnh gốc Sau đó, với mỗi đỉnh trong số đó, thuật toán lại lần lượtthăm các đỉnh kề với nó mà chưa được thăm trước đó và lặp lại Xem thêm thuật toán tìm kiếm theo chiều sâu, trong
đó cũng sử dụng 2 thao tác trên nhưng có trình tự thăm các đỉnh khác với thuật toán tìm kiếm theo chiều rộng
Thuật toán
Thuật toán tìm kiếm trên đồ thị
Trang 37Hình động minh họa thuật toán tìm kiếm theo chiều
rộng
Thuật toán sử dụng một cấu trúc dữ liệu hàng đợi để lưu trữ thông tin
trung gian thu được trong quá trình tìm kiếm:
1
1 Chèn đỉnh gốc vào hàng đợi
2
2 Lấy ra đỉnh đầu tiên trong hàng đợi và thăm nó
•• Nếu đỉnh này chính là đỉnh đích, dừng quá trình tìm kiếm và trả
về kết quả
•• Nếu không phải thì chèn tất cả các đỉnh kề với đỉnh vừa thăm
nhưng chưa được thăm trước đó vào hàng đợi
3 Nếu hàng đợi là rỗng, thì tất cả các đỉnh có thể đến được đều đã
được thăm – dừng việc tìm kiếm và trả về "không thấy"
4
4 Nếu hàng đợi không rỗng thì quay về bước 2
Ghi chú: Nếu sử dụng một ngăn xếp thay vì hàng đợi thì thuật toán
trở thành thuật toán tìm kiếm theo chiều sâu
Các đặc tính của thuật toán
Ứng dụng
Thuật toán tìm kiếm theo chiều rộng được dùng để giải nhiều bài toán trong lý thuyết đồ thị, chẳng hạn như:
• Tìm tất cả các đỉnh trong một thành phần liên thông
• Thuật toán Cheney cho việc dọn rác
• Tìm đường đi ngắn nhất giữa hai đỉnh u và v (với chiều dài đường đi tính bằng số cung)
• Kiểm tra xem một đồ thị có là đồ thị hai phía
• Thuật toán Cuthill–McKee
• Thuật toán Ford–Fulkerson để tìm luồng cực đại trong mạng
Trang 38Tìm kiếm theo chiều rộng 35
Tìm các thành phần liên thông
Tập hợp các đỉnh được thăm bởi thuật toán tìm kiếm theo chiều rộng chính là thành phần liên thông chứa đỉnh gốc
Kiểm tra đồ thị hai phía
Có thể dùng thuật toán tìm kiếm theo chiều rộng để kiểm tra xem một đồ thị có phải đồ thị hai phía hay không, bằngcách tìm kiếm từ một đỉnh bất kì và gán nhãn chẵn lẻ cho các đỉnh được thăm Nghĩa là, gán nhãn 0 cho đỉnh gốc, 1cho tất cả các đỉnh kề đỉnh gốc, 0 cho tất cả các đỉnh kề với một đỉnh kề đỉnh gốc, và tiếp tục như vậy Nếu ở mộtbước nào đó, có hai đỉnh kề nhau có cùng nhãn, thì đồ thị không là hai phía Nếu quá trình tìm kiếm kết thúc mà điềunày không xảy ra thì đồ thị là hai phía
Tài liệu tham khảo
• Knuth, Donald E (1997), The Art Of Computer Programming (http://www-cs-faculty.stanford.edu/~knuth/
taocp.html) 1 (ấn bản 3), Boston: Addison-Wesley, ISBN 0-201-89683-4
Liên kết ngoài
• Mô tả thuật toán tìm kiếm theo chiều rộng có kèm ví dụ (http://www.cse.ohio-state.edu/~gurari/course/
cis680/cis680Ch14.html#QQ1-46-92)
Sắp xếp tô pô
Trong khoa học máy tính, thứ tự tô pô của một đồ thị có hướng là một thứ tự sắp xếp của các đỉnh sao cho với mọi
cung từ u đến v trong đồ thị, u luôn nằm trước v Thuật toán để tìm thứ tự tô pô gọi là thuật toán sắp xếp tô pô Thứ
tự tô pô tồn tại khi và chỉ khi đồ thị không có chu trình (viết tắt là DAG - tiếng Anh directed acyclic graph) Đồ thị
có hướng không có chu trình luôn có ít nhất một thứ tự tô pô, và có thuật toán để tìm thứ tự tô pô trong thời giantuyến tính
đó, một thứ tự tô pô tương ứng với một thứ tự thực hiện các công việc
Trong khoa học máy tính, các ứng dụng tương tự phát sinh trong lập kế hoạch thực thi lệnh, xác định thứ tự biên dịchtrong makefile, xác định quan hệ phụ thuộc giữa các biểu tượng trong chương trình liên kết
Trang 39thông báo thứ tự tô pô là L
Nếu đồ thị là một DAG, danh sách L luôn chứa một thứ tự hợp lệ(thứ tự tô pô không nhất thiết là duy nhất) Nếu đồthị không là DAG thì nó có ít nhất một chu trình và do đó không thể có thứ tự tô pô
Lưu ý rằng S có thể lựa chọn phần tử n một cách tùy ý Tùy thuộc vào thứ tự các nút n được loại bỏ từ S, một thứ tự
tô pô khác nhau được tạo ra Một biến thể của thuật toán của Kahn sử dụng thứ tự từ điển cho việc lựa chọn n là một
thành phần quan trọng của thuật toán Coffman-Graham cho lập kế hoạch song song và vẽ đồ thị lớp
Có một thuật toán khác cho sắp xếp tô pô dựa trên tìm kiếm theo chiều sâu Đối với thuật toán này, các cung chỉ theo
hướng ngược lại so với thuật toán trước: có một cung từ x đến y nếu công việc x phụ thuộc vào công việc y (nói cách khác, nếu công việc y phải hoàn thành trước khi công việc x có thể bắt đầu) Thuật toán duyệt qua các nút của đồ thị,
trong một trật tự tùy ý, và thực hiện tìm kiếm theo chiều sâu cho đến khi tìm đến một nút đã được thăm:
L ← danh sách rỗng (cuối cùng sẽ chứa thứ tự sắp xếp)
S ← tập hợp các nút không có cung vào
for each nút n trong S do
thăm() từ trước Vì mỗi cung và mỗi nút được thăm một lần, thuật toán chạy trong thời gian tuyến tính Lưu ý rằng
mã giả trên không thể phát hiện trường hợp lỗi khi đồ thị có chu trình Thuật toán có thể được thay đổi để phát hiệnchu trình bằng cách kiểm tra có nút nào được thăm nhiều hơn một lần trong bất kỳ một chuỗi lồng nhau của các lờigọi đệ quy đến thăm() Thuật toán này có thể đã được mô tả lần đầu tiên bởi Tarjan năm 1976
Trang 40Sắp xếp tô pô 37
Ghi chú