Có thể biểu diễn một đồ thị một cách trực quan như sau: Các đỉnh của V được biểu diễn bằng các vòng tròn nhỏ rỗng hoặc đặc, còn các cạnh được biểu diễn bằng một đường cong đường thẳng n
Trang 3LỜI CẢM ƠN
Trong quá trình thực hiện khoá luận em đã nhận được nhiều sự giúp đỡ quý báu và bổ ích từ các thầy cô và bạn bè Em xin chân thành cảm ơn các thầy cô trong khoa Toán trường Đại học sư phạm Hà Nội 2 đã tận tâm giảng dạy, truyền thụ kiến thức và kinh nghiệm quý báu để em hoàn thành tốt khoá học Đặc biệt, em xin bày
tỏ lòng cảm ơn sâu sắc của mình tới thầy Trần Minh Tước, thầy đã trực tiếp hướng
dẫn, nhiệt tình giúp đỡ và chỉ bảo em trong suốt quá trình thực hiện khoá luận
Em xin chân thành cảm ơn các thầy cô trong tổ Toán Ứng dụng - khoa Toán, thư viện nhà trường, gia đình và bạn bè đã tạo mọi điều kiện, động viên, giúp đỡ để
em hoàn thành khoá luận này
Xuân Hòa, ngày 06 tháng 5 năm 2014
Sinh viên
Dương Phương Hoa
Trang 4LỜI CAM ĐOAN
Tôi cam đoan khoá luận “Những vấn đề cơ bản và một số thuật toán trên đồ
thị” là kết quả nghiên cứu của tôi dưới sự hướng dẫn của TS.Trần Minh Tước Tôi
xin khẳng định kết quả nghiên cứu trong khoá luận này không sao chép kết quả của bất cứ tác giả nào khác Nếu sai sót tôi xin chịu hoàn toàn trách nhiệm
Xuân Hòa, ngày 06 tháng 5 năm 2014
Sinh viên
Dương Phương Hoa
Trang 5MỤC LỤC
MỞ ĐẦU 1
Chương 1 NHỮNG KIẾN THỨC CƠ BẢN VỀ ĐỒ THỊ 2
1.1 Khái niệm đồ thị 2
1.2 Các thuật ngữ về đồ thị 6
1.2.1 Những thuật ngữ cơ sở 6
1.2.2 Xây dựng đồ thị mới từ đồ thị cũ 7
1.3 Đường đi, chu trình, liên thông 9
1.3.1 Đường đi, chu trình 9
1.3.2 Liên thông 9
1.4 Các thuật toán duyệt đồ thị 11
Chương 2 ĐỒ THỊ CÂY 15
2.1 Mở đầu về Cây 15
2.2 Cây, phân loại, cấu tạo các đặc điểm của cây 17
2.2.1 Cây có gốc 17
2.2.2 Cây m-phân đầy đủ 19
2.2.3 Một số mô hình ứng dụng của cây 21
2.3 Các phương pháp duyệt cây 24
2.3.1 Mở đầu 24
2.3.2 Hệ địa chỉ phổ dụng 24
2.4 Cây bao trùm 25
2.4.1 Định nghĩa 25
2.4.2 Những thuật toán xây dựng cây bao trùm 27
2.5 Bài toán tìm cây bao trùm có trọng lượng nhỏ nhất 28
2.5.1 Cây bao trùm nhỏ nhất: 28
2.5.2 Thuật toán tìm cây bao trùm nhỏ nhất 29
Chương 3 CÂY NHỊ PHÂN VÀ ỨNG DỤNG TRONG TIN HỌC 39
Trang 63.1 Cây nhị phân 39
3.1.1 Định nghĩa 39
3.1.2 Một số các tính chất của cây nhị phân 39
3.1.3 Thuật toán duyệt cây 39
3.1.4 Các ứng dụng thuật toán duyệt cây 46
3.1.5 Biểu diễn cây tổng quát bằng cây nhị phân 48
3.2 Ứng dụng 50
3.2.1 Cây tìm kiếm nhị phân 50
3.2.2 Mã tiền tố 51
KẾT LUẬN 58
TÀI LIỆU THAM KHẢO 59
Trang 7MỞ ĐẦU
Lý thuyết đồ thị là ngành khoa học được phát hiện từ lâu nhưng lại có nhiều ứng dụng hiện đại.Những tư tưởng cơ bản của lý thuyết đồ thị được đề xuất từ những năm đầu của thế kỉ XVIII bởi nhà toán học lỗi lạc người Thụy Sĩ Leonhard Euler.Từ đó lý thuyết đồ thị ngày càng khẳng định được vị trí quan trọng trong việc
áp dụng để giải quyết nhiều bài toán từ mọi lĩnh vực.Tuy nhiên, đây là kiến thức hoàn toàn mới, không được đề cập trong quá trình học tập của sinh viên sư phạm toán Với những kiến thức hữu ích của lý thuyết đồ thị, tôi đã bị thu hút và thực sự mong muốn tìm hiểu và chiếm lĩnh, bồi đắp cho mình những tri thức mới Do đó,
tôi chọn đề tài “Đồ thị cây và ứng dụng”
Nội dung khóa luận của tôi tuy không phải là những kết quả mới tìm được nhưng với tinh thần học hỏi kiến thức mới, hi vọng đề tài này sẽ đem lại nhiều kiến thức bổ ích cho bản thân và cho độc giả Nội dung khóa luận gồm ba chương:
Chương 1: Những kiến thức cơ bản về đồ thị vô hướng
Chương 2: Đồ thị cây
Chương 3.Cây nhị phân và một số ứng dụng trong tin học
Tuy đã có nhiều cố gắng, song do hạn chế về thời gian và năng lực của bản thân, nên khóa luận không tránh khỏi sai sót, rất mong được sự quan tâm góp ý của thầy cô và các bạn
Em xin chân thành cảm ơn!
Trang 8Chương 1
NHỮNG KIẾN THỨC CƠ BẢN VỀ ĐỒ THỊ
1.1 Khái niệm đồ thị
Lý thuyết đồ thị là một lĩnh vực toán học được phát triển từ lâu nhưng lại có
nhiều ứng dụng hiện đại đặc biệt là ứng dụng trong tin học ngày Những ý tưởng cơ
bản về nó được đưa ra từ thế kỷ 18 khi nhà toán học LeonhardEuler dùng đồ thị để giải quyết bài toán 7 cây cầu ở Königsberg
Mô hình đồ thị xuất hiện nhiều trong khoa học và cả cuộc sống hàng ngày Đồ
thị tỏ ra có hiệu quả trong việc giải các bài toán trong nhiều lĩnh vực khác nhau Ví dụ: sơ đồ bộ máy công ty hay mạng lưới giao thông giữa các địa điểm trong một khu vực đều được biểu diễn bởi đồ thị Đồ thị được gán trọng số để giải quyết bài toán tìm đường đi ngắn nhất, xây dựng hệ thống giao thông đảm bảo tính liên thông với chi phí nhỏ nhất…
Ta có thể hình dung đồ thị như tập hữu hạn các đối tượng và những mối liên
hệ giữa các đối tượng đó Sơ đồ biểu diễn một hệ thống các tuyến bay của một hãng hàng không là một hình ảnh của đồ thị Các đối tượng là các sân bay, mỗi đường bay thẳng sẽ biểu diễn mối liên hệ giữa 2 sân bay đầu cuối của tuyến
Có nhiều loại đồ thị được xây dựng dựa vào cấu trúc của đồ thị, cụ thể là tùy thuộc vào sự xác định mối liên hệ giữa các đối tượng Trong khuôn khổ khóa luận
này, tôi chỉ đề cập tới ba loại đồ thị: đồ thị vô hướng, đồ thị có hướng và đồ thị có trọng số được định nghĩa như sau:
Định nghĩa 1.1.Một đồ thị vô hướng G là một cặp có thứ tự GV E, , ở đây V là một tập hữu hạn; còn E là tập với các phần tử là các tập con hai phần tử trên V,
E u v u v V u v
Các phần tử của V được gọi là các đỉnh, tập đỉnh của G được ký hiệu là V G( )
Các phần tử của E được gọi là các cung, tập cạnh của đồ thị vô hướng G được ký hiệu
là E G( ) Nhưng để đơn giản hơn ta có thể viết “đỉnh v V ” hay “cạnh e E ”.Cho ,
a b V , nếu tồn tạie a b, thì khi đó e là một cạnh của G với hai đỉnh đầu mút
Trang 9là a, b hay a, b là hai đỉnh liên thuộc với e Cạnh e a b, thường được ký hiệu
ngắn gọn là ab hay ba Ở khuôn khổ khóa luận này, ta chỉ xét tới đơn đồ thị, không
xét tới đồ thị có khuyên và đa đồ thị Do vậy khi nhắc đến đơn đồ thị, ta ngầm hiểu
là đơn đồ thị vô hướng
Có thể biểu diễn một đồ thị một cách trực quan như sau: Các đỉnh của V được
biểu diễn bằng các vòng tròn nhỏ (rỗng hoặc đặc), còn các cạnh được biểu diễn bằng một đường cong (đường thẳng) nối 2 đầu mút của cạnh
Ví dụ 1.1 Cho GV E, với V a b c d f g, , , , ,
E ad db dc bc cf cg gf
Khi đó hãy biểu diễn đồ thị vô hướng G
Giả sử một mạng lưới giao thông gồm các trạm xe bus và đường đi giữa chúng, giữa 2 trạm luôn chỉ có không quá một đường đi trực tiếp, không có đường quay vòng từ một trạm tới chính nó Ta biểu diễn mạng lưới giao thông này bằng
mô hình đồ thị như sau: mỗi trạm đỗ xe là một đỉnh, mỗi đường đi trực tiếp giữa hai trạm là 1 cạnh Ta có hình ảnh chính xác của đồ thị
Trang 10Các đường giao thông đôi khi chỉ được chạy theo một chiều Chúng ta có thể
dùng đồ thị có hướng để mô hình hóa những mạng như thế
Định nghĩa 1.2.Một đồ thị có hướng G là một cặp có thứ tự GV E, , ở đây V là một tập hữu hạn, còn E là một tập con của tích Đề các V V
Tương tự, ở khuôn khổ khóa luận này, ta chỉ xét đồ thị có hướng Do vậy khi nhắc tới đồ thị có hướng ta cũng hiểu là đơn đồ thị có hướng.Tuy nhiên đồ thị có hướng hầu như chỉ phục vụ riêng cho phần kiến thức đồ thị cây có gốc cho nên các kiến thức đồ thị có hướng ta gần như không đề cập tới, chỉ xây dựng cho đơn đồ thị
Biểu diễn một đồ thị có hướng trên mặt phẳng trực quan tương tự như biểu
diễn đồ thị vô hướng: Các đỉnh của V được biểu diễn bằng các vòng tròn nhỏ (rỗng
hoặc đặc), còn các cung được biểu diễn bằng một đường cong có hướng (với mũi tên) từ đỉnh đầu tới đỉnh cuối
Ví dụ 1.2 Cho đồ thị có hướng GV E, với V a b c d f g, , , , ,
Trang 11Định nghĩa 1.3.Đồ thị GV E, được gọi là đồ thị có trọng số hay thường gọi tắt
là trọng đồ, nếu ít nhất một trong hai hàm:
được xác định ở đây W V và W E là các tập số Giá trị f v( )cho v V được gọi là trọng số của đỉnh v, còn giá trị g e( ) cho e E được gọi là trọng số của cung hay cạnh e Người ta cũng thường ký hiệu trọng đồ bằng GV E f, , hay
, ,
G V E g hay GV E f g, , , tùy thuộc vào việc chỉ một hàm f, chỉ một hàm g hay cả hai hàm f và g được xác định
Trong khuôn khổ khóa luận này, chúng ta chỉ sử dụng tới GV E g, ,
Biểu diễn một đồ thị GV E g, , có trọng số trên mặt phẳng trực quan ta biểu diễn đồ thị có hướng và gắn giá trị trọng số tương ứng lên trực tiếp sát phía bên
cạnh của cung mang giá trị đó
Ví dụ 1.3.Cho đồ thị có hướng có trọng sốGV E, với V a b c d f g, , , , ,
Trang 12Nếu không có sự nhầm lẫn u v có thể ký hiệu là uv (hay vu),
Ví dụ 1.4.Xét đồ thị G được cho trong hình 1:
G được hiểu ngầm, ta ký hiệu N G v đơn giản bằng N v
* Bậc của đỉnh
Định nghĩa 1.6 Bậc của một đỉnh trong đồ thị là số các cạnh liên thuộc với nó
Người ta kí hiệu bậc của đỉnh v là deg(v)
Định nghĩa 1.7 Ta định nghĩa bậc của đỉnh trong đồ thị G, ký hiệu là degG v hay ngắn gọn là deg v nếu như G được hiểu ngầm, như sau:
deg v N v
Trang 13Ví dụ 1.5.Xét đồ thị G được cho trong hình 1.4 ta có
2
deg v 2
1 3 4 5
deg v deg v deg v deg v 3
Đỉnh bậc 0 gọi là đỉnh cô lập Đỉnh bậc 1 gọi là đỉnh treo
Rõ ràng, bậc của đỉnh theo định nghĩa bằng số cạnh liên thuộc với nó Như
vậy, mỗi cạnh đóng góp 2 đơn vị vào tổng các bậc của tất cả các đỉnh vì một cạnh
nối với đúng 2 đỉnh Điều này có nghĩa là tổng các bậc của tất cả các đỉnh gấp đôi
Định nghĩa 1.8.Đồ thị GV E , được gọi là đồ thị con của GV E, nếu
V V và E E Đồ thị con GV E , của đồ thị GV E, được gọi là đồ thị con bao trùm của G nếu V V Nếu E chứa tất cả các cung hay cạnh của G, mà
cả hai đỉnh liên thuộc với nó đều thuộc V, thì GV E , được gọi là đồ thị con của GV E, cảm sinh bởi tập đỉnh V, hay cũng được gọi là đồ thị con cảm sinh
bởi GV E, trên tập đỉnh V Khi đó Gcũng được ký hiệu là GG V
Trang 14Ví dụ 1.8.Cho đồ thị H là một đồ thị con của G
Ta có H là một đồ thị con của G vì theo đúng định nghĩa: H có tập các đỉnh
H
V là v v v v G có tập các đỉnh là 1, , ,2 3 5 V Glà v v v v v Ta thấy 1, , , ,2 3 4 5 V H V G và
tập các cạnh của H cũng là con thực sự của tập các cạnh đồ thị G
Định nghĩa 1.9 Hợp của hai đồ th ị G1 ( ,V E1 1) và G2 ( ,V E2 2) là một đồ thịcó tập các đỉnh là V1V2và tập các cạnh là E1E2 Ta ký hiệu tập hợp của các
Trang 151.3.Đường đi, chu trình, liên thông
1.3.1.Đường đi, chu trình
Định nghĩa 1.10 Giả sử GV E, là một đồ thị Một đường đi trong G là một dãy các đỉnh phân biệt v v v0, , , ,1 2 v n của G sao cho với mọi i0,1, ,n1, v v i i1là một cạnh của G Các cạnh v v i i1, i0,1, ,n1, cũng được gọi là các cạnh của đường đi v v v0, , , ,1 2 v n Khi đó n được gọi là độ dài, v0 được gọi là đỉnh đầu, v n
được gọi là đỉnh cuối đường đi trên Một đường đi khép kín được gọi là chu trình, nếu nó có độ dài ít nhất là 3 và bắt đầu và kết thúc tại cùng một đỉnh, tức là u v
Ví dụ 1.10 Với đồ thị hình 1.8:
i ae de be ee fe ge he i1 2 4 8 10 12 14 là một đường đi Do đơn đồ thị có tính chất 2 đỉnh
có 1 cạnh duy nhất nên ta có thể viết là adbefgehi một đường đi có hướng
ii ee fe he ge e8 10 13 9 hayefhge là một chu trình có hướng độ dài 4
1.3.2.Liên thông
Giả thiết trong một mạng giao thông, mỗi điểm đỗ xe bus là một đỉnh, đường
đi trực tiếp giữa 2 bến được biểu diễn là một cạnh thì khi nào luôn tồn tại một đường đi giữa mỗi cặp đỉnh bất kỳ trong một đồ thị?
Định nghĩa 1.11.Một đồ thị GV E, được gọi là liên thông nếu với hai đỉnh v i và
Trang 16Như vậy, với định nghĩa này, hai bến xe bus luôn có đường đi nếu và chỉ nếu mạng giao thông này liên thông Điều này tương tự như việc luôn có đường đi từ một điểm bus bất kì nào tới các điểm còn lại
Định nghĩa 1.12 Đồ thị con liên thông GV E , của một đồ thị GV E,
được gọi là một thành phần liên thông của G, nếu GG V và với mọi V V ,
mà thực sự chứa V, đồ thị G V là không liên thông
Nhận xét: Một đồ thị không liên thông là hợp rời nhau của ít nhất 2 đồ thị con liên thông Các đồ thị con liên thông như vậy chính là các thành phần liên thông
Trang 17Ví dụ 1.12.Với đồ thị G:
Đỉnh cắt là c, d
Cạnh cắt là a d ,
1.4 Các thuật toán duyệt đồ thị
Thuật toán tìm kiếm ưu tiên chiều sâu (DFS- Deep First Search):
Về tư tưởng DFS là thuật toán viếng thăm tất cả các đỉnh hoặc tìm kiếm trên
một cây hay đồ thị Thuật toán xuất phát từ một đỉnh bất kì của đồ và phát triển xa nhất có thể Trong phương pháp này ta duyệt tới tận cùng của mỗi nhánh rồi mới
chuyển sang duyệt nhánh khác Về cơ bản DFS thực hiện như sau:
Giả sử G ( , ) V E là đồ thị hữu hạn, với các đỉnh u v, , wV Ta sẽ bắt đầu
tìm kiếm từ đỉnh v nào đó của đồ thị Sau đó chọn u là một đỉnh tùy ý kề với v và thực hiện quá trình đối với u Một cách đệ qui, ở bước tổng quát, giả sử đang xét đỉnh v, nếu như trong số các đỉnh kề với v ta tìm được w là chưa xét thì ta sẽ xét
đỉnh này và bắt đầu từ nó ta sẽ tiếp tục quá trình tìm kiếm Còn nếu như không có
đỉnh nào kề với v là chưa xét thì ta nói đỉnh này là đã duyệt xong và quay trở lại tiếp tục tìm kiếm từ đỉnh mà trước đó ta đến được đỉnh v Quá trình này có thể mô tả bởi
thủ tục đệ quy
Ví dụ 1.13.DFS đồ thị Khình 1.6:
Thuật toán tìm kiếm theo chiều rộng trên đồ thị G được cho trong hình 1.6
Các đỉnh đang xét được khoanh tròn Các đỉnh đã duyệt xong được khoanh
Trang 18hình ô vuông Thuật toán bắt đầu tìm kiếm từ đỉnh v1, các đỉnh kề với nó là
2, ,3 4
v v v Ta tìm kiếm ưu tiên theo số thự tự các đỉnh (thứ tự duyệt có thể tự quy
định từ trên xuống dưới, từ trái qua phải hoặc một thứ thự nào đó để tránh nhầm lẫn
và bỏ sót), tiếp tục tìm kiếm đến v2, đến v3, v4, v6 và đến v5
Một cách tự nhiên, kết quả của thuật toán tìm kiếm chiều sâu là một cây phủ
qua tất cả các đỉnh của đồ thị
Thuật toán tìm kiếm chiều rộng (BFS- Breadth First Search)
BFS hay còn gọi là “vệt dầu loang” chủ yếu được sử dụng để tìm đường đi
ngắn nhất theo số cạnh giữa 2 đỉnh của một đồ thị Một cách phi hình thức, từ đồ thị
ta chọn ra một đỉnh s bất kì ban đầu và quy ước mức của nó bằng 0, ta tiếp tục ghép
cùng một lúc tất cả các đỉnh kề với đỉnh này theo thứ tự qui ước (Ví dụ: theo chỉ số
Trang 19chân của tên đỉnh) Khi đó các đỉnh kề này trở thành các đỉnh ở mức 1 Tiếp theo với mỗi đỉnh ở mức 1, ta ghép tất cả các cạnh liên thuộc với nó mà không tạo ra chu trình, thủ tục này tạo ra các đỉnh mức 2 Và tương tự như thế cho tới khi tất cả các đỉnh của đồ thị được duyệt tới và vì số đỉnh là hữu hạn nên thủ tục này là hữu hạn
bước Ý tưởng BFSđược sử dụng trong rất nhiều thuật toán như xây dựng cây
khung, Prim, Dijkstra…
Ý nghĩa của bài toán duyệt đồ thị
Với một đồ thị có nhiều đỉnh GV E, bất kì, thuật toán duyệt đồ thị có
Trang 20lớn, cần có cách thức để thực hiện nhanh, chính xác Tìm kiếm theo chiều sâu và tìm kiếm theo chiều rộng giúp người sử dụng dễ dàng kiểm tra những tính chất liên quan đến tính liên thông của đồ thị Khi kết thúc một quá trình duyệt mà duyệt xong
tất cả các đỉnh của đồ thị thì đồ thị trên là liên thông
- Tìm đường đi: Khi muốn xác định giữa hai đỉnh u và v của đồ thị có đường
đi hay không, ta duyệt đồ thị, chọn đỉnh u là đỉnh bắt đầu và thực hiện một quá trình duyệt Khi duyệt qua đỉnh c thì điều này có nghĩa là giữa u và v tồn tại đường đi
- Xác định thành phần liên thông: khi kết thúc một quá trình duyệt đồ thị, nếu
đã duyệt qua tất cả các đỉnh của đồ thị thì đồ thị là liên thông Ngược lại, nếu chưa duyệt qua tất cả các đỉnh và tiếp tục quá trình duyệt lần hai thì đồ thị là không liên thông và nó bao gồm các thành phần liên thông Cứ mỗi lần duyệt sẽ cho ra một
thành phần liên thông Như vậy, phải thực hiện n quá trình duyệt cho đồ thị thì đồ thị có n thành phần liên thông
Trang 21Chương 2
ĐỒ THỊ CÂY 2.1 Mở đầu về Cây
Sơ lược lịch sử hình thành và phát triển: Một đồ thị liên thông và không có chu trình được gọi là cây Cây là một đồ thị mà trong đó hai đỉnh bất kì đều được
nối với nhau bằng đúng một đường đi Cây đã được dùng từ năm 1857, khi nhà toán
học Anh tên là Arthur Cayley dùng cây để xác định những dạng khác nhau của hợp
chất hóa học Cây là khái niệm quan trọng trong lý thuyết đồ thị, cấu trúc dữ liệu và giải thuật Từ đó cây đã được dùng để giải nhiều bài toán trong các lĩnh vực khác nhau Đặc biệt cây rất hay được sử dụng trong tin học Chẳng hạn, người ta dùng cây để xây dựng các thuật toán cho phép định vị các phần tử trong một danh sách Cây cũng dùng để xây dựng các mạng máy tính với chi phí rẻ nhất cho các đường điện thoại nối các máy tính phân tán Cây cũng được dùng để tạo ra các mã
có hiệu quả để lưu trữ và truyền dữ liệu Dùng cây có thể mô hình các thủ tục mà để thi hành nó cần dùng một dãy các quyết định Vì vậy cây đặc biệt có giá trị khi
nghiên cứu các thuật toán sắp xếp Ví dụ đồ thị cây: Cây phả hệ
Dễ dàng nhận biết: Biểu đồ phả hệ trên có thể coi là một đồ thị trong đó các đỉnh biểu diễn các thành viên trong gia đình còn các cạnh biểu diễn mối quan hệ cha con giữa các đỉnh thành viên Ta có nhận xét rằng đồ thị trên vô hướng, liên thông, không có cạnh bội, khuyên, không hướng và không chứa chu trình Đồ thịbiểu diễn
các biểu đồ phả hệ là một ví dụ về một loại đồ thị đặc biệt được gọi là cây
Lê Anh Tuấn
Trang 22Định nghĩa 2.1 Một đồ thị vô hướng không có chu trình được gọi là cây
Ví dụ 2.1 Đồ thị nào trong các đồ thị hình 2.2 là cây ?
Dễ dàng nhận thấy G 1 là cây, vì G 1 là đơn đồ thị liên thông và không chứa chu
trình G 2 không là cây vì a, f, e, d, alà một chu trình đơn của đồ thị này G 3 không là cây vì không liên thông
Định lý 2.2[2].Một đồ thị vô hướng là một cây nếu giữa mọi cặp đỉnh của nó luôn
tồn tại đường đi duy nhất
Định lý 2.3[1] (Định lý móc xích kiểu hoa cúc) Giả sử T V E, là đồ thị vô hướng không có khuyên Khi đó các khẳng định sau đây là tương đương nhau:
(e) Hai đỉnh khác nhau bất kỳ của T được nối với nhau bởi đúng một đường;
(f) T không chứa chu trình nhưng nếu ta thêm một cạnh nối hai đỉnh không kề nhau trong T thì đồ thị nhận được có đúng một chu trình
Trang 232.2 Cây, phân loại, cấu tạo và các đặc điểm của cây
2.2.1 Cây có gốc
Từ một đồ thị cây bất kỳ ta có thể thành một cây có gốc bằng cách chọn một đỉnh bất kì của cây làm gốc Với một cây đồ thị có n đỉnh ta có thể tạo ra cây n cây
có gốc khác nhau với gốc là một trong n đỉnh bất kì đó Như vậy với mỗi cây có gốc
xác định 1 gốc duy nhất Từ việc xác định gốc ta biểu diễn lại đồ thị với gốc được đặt ở trên cùng của đồ thị cây Theo định lý 1, ta có giữa gốc tới một đỉnh bất kì cũng tồn tại đường đi đơn duy nhất nên ta định hướng mỗi cạnh bằng hướng từ gốc
đi ra Như vậy việc chọn gốc đã xác định hướng của đồ thị nên ta hoàn toàn có thể
bỏ mũi tên chỉ hướng
Định nghĩa 2.2.Cây có gốc là cây cùng với gốc tạo ra một đồ thị có hướng
Nhắc đến đồ thị cây là ta đề cập đến cây có gốc và có hướng, hướng được qui định
từ trên xuống dưới Cho nên để đơn giản hơn, khi nhắc với đồ thị cây, ta ngầm hiểu
đó là cây có gốc được xếp và có hướng
Trang 24Một số thuật ngữ của đồ thị cây xuất phát từ nguồn gốc thực vật hay nguồn gốc phả hệ như định nghĩa đỉnh cha, đỉnh con và đỉnh tổ tiên, lá, đỉnh trong
Mức, độ cao:
Mức của đỉnh v: Trong cây có gốc là độ dài đường đi duy nhất từ gốc tới nó
Mức của gốc được định nghĩa bằng không Gọi T T1, 2, ,T nlà con của T0 Mức T1 = Mức T2= … = MứcT n= Mức T0 1
Độ cao của cây là mức cao nhất của tất cả các đỉnh Nói cách khác độ cao của
cây có gốc là chiều dài của đường đi dài nhất từ gốc tới một đỉnh bất kì
Từ đây ta có thể đưa thêm một định nghĩa về đồ thị cây như sau:
Định nghĩa 2.3.Cây là một tập hợp T các phần tử (gọi là đỉnh của cây) trong đó có
1 đỉnh đặc biệt được gọi là gốc, các đỉnh còn lại được chia thành những tập rời nhau T 1 , T 2 , , Tn theo quan hệ phân cấp trong đó Ti cũng là một cây Mỗi đỉnh ở cấp i sẽ quản lý một số đỉnh ở cấp i+1 Quan hệ này người ta còn gọi là quan hệ cha-con
Dễ thấy hai định nghĩa 1 và định nghĩa 3 là tương đương nhau và hỗ trợ, bổ sung cho nhau Việc mỗi đỉnh ở cấp i sẽ quản lý một số đỉnh ở cấp i+1 cũng tương đương với liên thông và không có chu trình
Giả sử T là một đồ thị đặc biệt G = (V, E) - một cây có gốc a Giả sử a là một đỉnh bất kì Ta có y là con của u và u là cha của y khi và chỉ khi Mức y = Mức y1
u là cha duy nhất đối với y và y có thể là một trong những con của u Như vậy trong một cây sẽ có một hay nhiều cặp cha con hoặc không có cặp nào khi đồ thị cây chỉ chứa duy nhất gốc a Các đỉnh có chung cha và cùng mức được gọi là các
đỉnh anh em
Đỉnh trong: Các đỉnh có con được gọi là đỉnh trong Gốc là một đỉnh trong Lá: Các đỉnh của cây được gọi là lá nếu nó không có con Trường hợp đặc
biệt: nếu gốc là một đỉnh duy nhất của đồ thị thì khi đó nó là lá
Nếu a là một đỉnh khác gốc, thì a và các con cháu của nó cùng tất cả các cạnh
liên thuộc với các con cháu của a là một cây con hay đồ thị con của cây đang xét
Việc này giống như tạo một đồ thị mới từ đồ thị cũ với riêng lớp đồ thị cây
Trang 25Độ dài đường đi tổng của cây:
Độ dài đường đi của một đỉnh là số cạnh cần đi qua tính từ đỉnh gốc tới đỉnh
đó Chiều dài đường đi của đỉnh gốc luôn bằng 0 Chiều dài đường đi tới một nút bằng chiều dài đường đi của nút cha cộng thêm 1 Chiều dài đường đi của cây bằng tổng chiều dài đường đi tất cả các đỉnh trên cây Công thức:
P là độ dài đường đi của cây
Như vậy chiều dài đường đi của các đỉnh anh em sẽ bằng nhau và hơn đỉnh cha một đơn vị
Độ dài đường đi trung bình: PI = PT/n (n là số nút trên cây T)
Cây có gốc được sắp xếp (hay có thứ tự) là cây có gốc trong đó các con của mỗi đỉnh trong được sắp xếp theo một thứ tự nhất định Cây có gốc được sắp được
vẽ sao cho các con của mỗi đỉnh trong được sắp từ trái qua phải Chúng ta sẽ dùng thứ tự các cạnh như thế trong hình vẽ với ngầm ý là ta đang xét cây có gốc được sắp
2.2.2 Cây m-phân đầy đủ
Định nghĩa 2.4.Cây có gốc được gọi là cây m-phân nếu tất cả các đỉnh trong của
nó không có hơn m con Cây m-phân với m 2 được gọi làcây nhị phân
Hình 2.4.Cây tam-phân và cây tam-phân đầy đủ
Trang 26Định nghĩa 2.5.Cây m-phân đầy đủ: cây được gọi là m-phân đầy đủ nếu mọi đỉnh
trong của nó có đúng m con
Định nghĩa 2.6.Cây m - phân có gốc và độ cao h được gọi là cân đối nếu tất cả các
lá đều ở mức h hoặc h1
Một số tính chất liên quan:
(1) Cây với n đỉnh có đúng n 1 cạnh
(2) Cây m-phân đầy đủ với i đỉnh trong sẽ có tất cả n m i 1 đỉnh
(3) Cây m- phân đầy đủ với:
l i m
đỉnh trong
Ví dụ 2.4: Giả sử ta chơi trò chơi truyền thông điệp Ban đầu có một người được
nghe thông điệp từ giám khảo và giả sử rằng mỗi người khi nhận thông điệp sẽ truyền lại cho 6 người khác hoặc không truyền cho ai cả Hỏi có bao nhiêu người được nghe thông điệp kể cả người đầu tiên và trò chơi kết thúc khi có 16 người được nghe mà không truyền lại cho ai cả
Trò chơi này có thể biểu diễn bằng cây lục-phân đầy đủ Các đỉnh trong tương ứng với những người truyền thông điệp và lá là những người nhận thông điệp mà không truyền cho ai Vì có 16 người không truyền thông điệp nên số lá của cây có
Cây nhị phân
Cây không cân đối
Cây tam phân Cây cân đối ,h3
Trang 27gốc này là l 16 Vì thế theo phần iii của định lý 2.6 ta có số người nhận thông điệp
(6.16 1) / (6 1) 19
n Số các đỉnh trong là 18 16 3 Tức là có truyền thông điệp
(4) Có nhiều nhất mh lá trong câu m - phân với độ cao h
Hệ quả 2.5:Nếu cây m - phân cao h có l lá, khi đó h logml Nếu cây m - phân đầy đủ và cân đối, khi đóh logml
2.2.3 Một số mô hình ứng dụng của cây
Cây có ứng dụng trong nhiều lĩnh vực khác nhau như tin học, thực vật học và tâm lý học Đồ thị cây là hình ảnh trực quan sinh động chính xác mô hình các bài
toán giúp chúng ta giải quyết hình dụng và nghiên cứu trên từng nhóm đối tượng cụ thể Mà trong phần này, chúng ta sẽ mô tả một số mô hình khác nhau có dùng đồ thị cây và hiểu thêm về ý nghĩa của nó
Ví dụ 2.6 Nhà toán học Anh, Arthur Caley đã dùng cây vào năm 1857 khi ông ta
tìm cách đánh số các đồng phân của hợp chất có dạng C H n 2n2, có tên là các hydrocarbon no Trong hóa học phổ thông, chúng ta gặp một lớp các bài hóa viết các đồng phân hóa học để hiểu rõ hơn về cấu tạo và nguyên tắc tồn tại của chúng Cũng như cây phả hệ, ở đây đồ thị cây hoàn toàn có thể dùng để biểu diễn một phân
tử hidrocacbon, với quy ước nguyên tử được biểu thị bởi các đỉnh, các liên kết giữa chúng bằng các cạnh
Trong hóa học, hóa trị của nguyên tử các bon là 4, trong khi hóa trị của hidro
là 1 Theo nguyên tắc biểu diễn hợp chất hidrocacbon no đã học, một nguyên tử các bon phải được liên kết bằng gạch đơn với 4 nguyên tử khác để thỏa hóa trị, với hidro thì số gach nối là 1 Áp dụng những hiểu biết thú vị về hóa học ta có thể biểu diễn bằng đồ thị cây như sau.Trong các mô hình đồ thị của hydrocarbon no, mỗi nguyên tử các bon được biểu diễn bởi một đỉnh bậc bốn và mỗi nguyên tử hydro được biểu diễn bằng một đỉnh bậc một Ta có thể dễ dàng tính đượctrong biểu diễn
đồ thị của hợp chất có dạng 3 n 2đỉnh C H n 2n2 Số các cạnh trong đồ thị như thế bằng một nửa tổng các bậc của các đỉnh (định lý bắt tay) Vì thế có
Trang 28(4n 2n 2) / 2 3n 1 cạnh trong đồ thị này Vì đồ thị là liên thông và số cạnh nhỏ hơn số đỉnh một đơn vị nên nó là một cây
Các cây không đẳng cấu với n đỉnh bậc 4 và 2n2đỉnh bậc 1 biểu diễn các đồng phân khác nhau dạng C H4 10 Cấu trúc của nó được biểu thị trên hình 9 Các đồng phân này được gọi là butane và isobutane
Ví dụ 2.7 Ngoài các đồng phân hóa học ta thấy đồ thị cây có ứng dụng trong ngày
cuộc sống như cây biểu diễn các tổ chức với các thành phần nhân sự Cấu trúc của một tổ chức lớn có thể mô hình bằng cây có gốc Mỗi đỉnh biểu thị một chức vụ trong tổ chức này Một cạnh từ một đỉnh tới đỉnh khác biểu diễn mối quan hệ thứ bậc trong làm việc, sự qua lại tương tác mà đỉnh đầu là lãnh đạo của đỉnh các đỉnh dưới và đỉnh đỉnh dưới là nhân viên dưới cấp
Butane
Trang 29Ví dụ 2.8 Một cây xuất hiện thường nhật trong tin học mà mỗi chúng ta đều nắm rõ
đó là cây thư mục biểu diễn hệ thống các tệp tin ở phía tay trái mỗi File Explorer Một thư mục có thể chứa các tệp tin và các tập con Khi ta nhấn đúp vào thì thư mục gốc sẽ đứng mép trên trái ngoài cùng và phía dưới bên phải đến tệp tin nó chứa Tiếp tục kích đúp vào các tệp tin sẽ xuất hiện các thư mục con ở phía dưới bên phải nó Nếu cùng là con của một tệp thì sẽ có vị trí ngang hàng nhau Như vậy
hệ thống cây thư mục hoàn toàn có thể biểu diễn lại chính xác đồ thị cây như sau:
My Document
Inventor server
Mobogenie SW Log
Files
The KMPlaye
r Album Art
Hình 2.7.Sơ đồ cây thư mục Document
Content Center
Trợ lý bán hàng
Phó chủ tịch dịch vụ
dịch vụ
Giám đốc dịch vụ Hình 2.6.Cây tổ chức một công ty
Trang 302.3 Các phương pháp duyệt cây
2.3.1 Mở đầu
Cùng với sự phát triển xã hội ngày nay là sự phát triển mạnh mẽ bùng nổ của khoa học công nghệ mà công nghệ thông tin là một trong những lĩnh vực hàng đầu Với một lượng dữ liệu khổng lồ trong máy tính, vấn đề quan trọng được đặt ra với các nhà lập trình và phần mềm là làm thế nào để có thể tìm dữ liệu một cách nhanh chóng và hợp lý, mang lại kết quả tối ưu nhất Thông thường dữ liệu được biểu diễn dưới dạng các danh sách liên kết Việc truy nhập dữ liệu chưa đạt được kết quả cao Khi đó sử dụng dữ liệu cây là một giải pháp nhằm tăng cao hiệu xuất trong các thao tác xử lý dữ liệu Trong khoa học máy tính cây là một cấu trúc dữ liệu không tuyến tính Cây có gốc và được sắp thứ tự thường được dùng để lưu trữ thông tin; nó cũng
có ứng dụng rất lớn để biểu diễn các loại biểu thức khác nhau như biểu thức số học chứa các số, các biến và các phép toán Vấn đề đặt ra: với việc sử dụng cấu trúc dạng cây, chúng ta cần dùng giải thuật nào với từng dạng dữ liệu để đạt kết quả cao nhất Để tìm hiểu vấn đề này ta cùng tìm hiểu một số phương pháp duyệt cây
2.3.2 Hệ địa chỉ phổ dụng
Tất cả các thủ tục duyệt đều thăm viếng các đỉnh của cây qua các cạnh Vì vậy
để sắp thứ tự toàn bộ các đỉnh của một cây bắt buộc dữ liệu trong cây cần được sắp xếp lại một cách có trật tự và nhãn nhất định Vì vậy với các thủ tục này ta sẽ sử dụng cây có gốc và được sắp thứ tự (2.2.1) Với cây có gốc và được sắp thứ tự ta bắt đầu thủ tục gán nhãn cho các đỉnh bằng phương pháp truy hồi như sau:
1 Gán nhãn cho gốc bằng số nguyên 0 Sau đó k đỉnh con của nó ở mức 1 từ
trái sang phải được gán nhãn lần lượt là 1, 2, …, k
2 Với mọi đỉnh v ở mức n có nhãn là A, thì k, đỉnh con của nó từ trái qua phải
được gán nhãn là A.1, A.2, …, A.k
Như vậy với cách gán này, giả sử đỉnh u bất kỳ ở mức n bất kì trong cây có nhãn là 3.1.2.4 Ta kết luận n4 vậy có nghĩa là u đường đi từ gốc tới u sẽ lần lượt
đi qua cây con thứ 3 mức 1, cây con 1 mức 2 của cây con 3 mức 1,…
Trang 31Một cách tổng quát hơn, theo đúng thủ tục này, đỉnh v ở mức n, với n1, có nhãn x x1 .2 x n thì đường đi duy nhất từ gốc tới v sẽ đi qua đỉnh thứ x1 ở mức 1, đỉnh thứ x2 ở mức 2, v.v
Cách gán nhãn như vậy được gọi là hệ địa chỉ phổ dụng của một cây có gốc
x y và x i y i hoặc nếu nm và x i y i với i1, 2, ,n
2.3.3 Các thuật toán duyệt cây
Cây là một đồ thị đặc biệt Dễ dàng thấy duyệt cây chính là duyệt đồ thị Do
đó ta có 2 thuật toán cơ bản DFS và BFS
Trang 32đường đất khó đi lại, luôn luôn có đường bê tông nối hai làng bất kì Có thể làm điều đó như nào?
Như vậy ta cần ít nhất 5 con đường tất cả Ta nhận thấy đồ thị con biểu diễn các con đường này vì nó liên thông, không chứa chu trình và chứa 6 đỉnh 5 cạnh
ta gọi đó là cây bao trùm (định nghĩa 1.8)
Một đơn đồ thị có cây bao trùm sẽ là một đồ thị liên thông vì bản thân cây bao trùm đã liên thông Điều ngược lại cũng đúng vì muốn có cây bao trùm thì tất cả các đỉnh đồ thị đều liên thông với nhau để khi xây dựng cây khung vẫn liên thông