Tải bản đầy đủ (.pdf) (36 trang)

Cau truc cay trong do thi vo huong

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.96 MB, 36 trang )

<span class='text_page_counter'>(1)</span>ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC KHOA HỌC. TRỊNH THỊ THANH GIANG. CẤU TRÚC CÂY TRONG ĐỒ THỊ VÔ HƯỚNG. LUẬN VĂN THẠC SĨ TOÁN HỌC. Thái Nguyên - 2011. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(2)</span> ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC KHOA HỌC. TRỊNH THỊ THANH GIANG. CẤU TRÚC CÂY TRONG ĐỒ THỊ VÔ HƯỚNG. Chuyên ngành: TOÁN ỨNG DỤNG Mã số: 60.46.36. LUẬN VĂN THẠC SĨ TOÁN HỌC. Người hướng dẫn khoa học TSKH. Phan Thị Hà Dương. Thái Nguyên - 2011. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(3)</span> 1. Mục lục Lời cảm ơn. 3. Mở đầu. 4. 1 Một số khái niệm cơ bản về đồ thị 1.1 Các định nghĩa . . . . . . . . . . . . . 1.2 Một số đơn đồ thị đặc biệt . . . . . . . 1.2.1 Đồ thị đầy đủ . . . . . . . . . . 1.2.2 Đồ thị vòng . . . . . . . . . . . 1.2.3 Đồ thị bánh xe . . . . . . . . . 1.2.4 Đồ thị hai phần . . . . . . . . . 1.2.5 Đồ thị phân đôi đầy đủ . . . . . 1.3 Các đồ thị mới từ đồ thị cũ . . . . . . 1.4 Tính liên thông trong đồ thị vô hướng. . . . . . . . . .. 6 6 7 7 8 8 9 9 10 10. 2 Cấu trúc cây 2.1 Định nghĩa cây . . . . . . . . . . . . . . . . . . . . . . . 2.2 Các tính chất của cây . . . . . . . . . . . . . . . . . . . .. 12 12 12. 3 Cây bao trùm của đồ thị đầy đủ 3.1 Cây bao trùm . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Cây bao trùm của đồ thị đầy đủ . . . . . . . . . . . . . .. 15 15 16. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. . . . . . . . . .. 4 Một số thuật toán xây dựng cây bao trùm của đồ thị vô hướng liên thông 22 4.1 Thuật toán tìm kiếm ưu tiên chiều sâu . . . . . . . . . . 22 4.2 Thuật toán tìm kiếm ưu tiên chiều rộng . . . . . . . . . 25. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(4)</span> 2. Kết luận. 33. Tài liệu tham khảo. 34. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(5)</span> 3. Lời cảm ơn Trong quá trình làm luận văn, tôi đã nhận được rất nhiều sự giúp đỡ từ các thầy cô giáo cùng gia đình. Nhân dịp này cho phép tôi được bày tỏ những lời cảm ơn chân thành nhất tới những người đã giúp đỡ tôi hoàn thành luận văn này. Tôi xin được bày tỏ lòng biết ơn chân thành và sâu sắc nhất tới TS. Phan Thị Hà Dương - Viện Toán Học Việt Nam đã tận tình giảng dạy, chỉ bảo và giúp đỡ tôi trong suốt quá trình làm luận văn. Tôi xin bày tỏ lòng biết ơn tới tất cả các thầy cô giáo trong Trường Đại Học Khoa Học - Đại Học Thái Nguyên và các thầy cô giáo Viện Toán học, Viện Khoa học và Công nghệ Việt Nam đã trực tiếp giảng dạy và trang bị cho tôi những kiến thức cơ bản trong suốt quá trình tôi học tập tại trường. Tôi xin cảm ơn tới Sở GD - ĐT Tỉnh Hà Giang, Ban Giám Hiệu, các đồng nghiệp Trường THPT Đồng Yên - Bắc Quang - Hà Giang đã tạo điều kiện cho tôi học tập và hoàn thành kế hoạch học tâp. Những lời cảm ơn cuối cùng tôi gửi tới những người thân yêu nhất trong gia đình tôi đã giúp đỡ, chia sẻ, cũng như động viên tôi rất nhiều để tôi vượt qua khó khăn và đạt được những kết quả trong học tập và công tác như hiện nay.. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(6)</span> 4. Mở đầu Lí thuyết đồ thị là ngành khoa học được phát triển từ lâu nhưng lại có nhiều ứng dụng hiện đại. Những ý tưởng cơ bản của nó được đưa ra từ thế kỉ XVIII bởi nhà toán học Thụy sĩ tên là Leonhard Euler. Ông đã dùng đồ thị để giải quyết bài toán cầu Königsberg nổi tiếng. Lí thuyết đồ thị được ứng dụng rất nhiều trong thực tế. Rất nhiều bài toán thuộc nhiều ứng dụng khác nhau được giải bằng mô hình đồ thị. Một loại đồ thị đặc biệt được gọi là cây. Khái niệm cây đã được dùng từ năm 1857, khi nhà toán học Anh, 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. Từ đó cây đã được dùng để giải nhiều bài toán trong nhiều lĩnh vực khác nhau. Luận văn trình bày một số khái niệm cơ bản về đồ thị, cây và một số tính chất của cây, trình bày công thức tính số cây bao trùm của đồ thị đầy đủ n đỉnh được đánh nhãn và một số thuật toán tìm cây bao trùm của đồ thị. Ngoài phần mở đầu, phần kết luận, luận văn gồm 4 chương. Chương 1 Một số khái niệm cơ bản về đồ thị Chương này trình bày một số khái niệm cơ bản về đồ thị và các ví dụ minh họa. Chương 2 Cấu trúc cây Chương này trình bày định nghĩa cây và các tính chất của cây. Chương 3 Cây bao trùm của đồ thị đầy đủ Chương này trình bày về cây bao trùm của đồ thị, cây bao trùm của đồ thị đầy đủ, công thức tính số cây bao trùm của đồ thị đầy đủ, thuật toán mã hóa Prüfer và thuật toán giải mã Prüfer. Chương 4 Một số thuật toán xây dựng cây bao trùm của đồ. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(7)</span> 5. thị vô hướng liên thông Chương này trình bày về hai thuật toán tìm cây bao trùm của đồ thị: Thuật toán tìm kiếm ưu tiên chiều sâu và thuật toán tìm kiếm ưu tiên chiều rộng. Thái Nguyên, tháng 09 năm 2011. Người thực hiện Trịnh Thị Thanh Giang. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(8)</span> 6. Chương 1 Một số khái niệm cơ bản về đồ thị Ta hiểu Đồ thị là một cấu trúc rời rạc gồm các đỉnh và các cạnh nối các đỉnh đó. Người ta phân loại đồ thị tùy theo đặc tính và số các cạnh nối các cặp đỉnh của đồ thị. Trong chương này chúng tôi chỉ đưa ra các khái niệm về đồ thị vô hướng và các ví dụ minh họa. Chương này gồm bốn mục: Trong mục 1.1, chúng tôi trình bày một số định nghĩa về đồ thị vô hướng. Mục 1.2 trình bày một số đơn đồ thị đặc biệt. Mục 1.3 trình bày về các đồ thị mới từ đồ thị cũ. Mục 1.4 trình bày về tính liên thông trong đồ thị vô hướng. Các kiến thức trong chương này được tham khảo từ chương 8 trong sách [1].. 1.1. Các định nghĩa. Định nghĩa 1.1. Một đơn đồ thị G = (V, E) gồm một tập không rỗng V là tập các đỉnh và một tập E là tập các cạnh, đó là các cặp không sắp thứ tự của các đỉnh phân biệt. Ví dụ 1.1. Đồ thị trong hình 1 là một đơn đồ thị.. Định nghĩa 1.2. Một đa đồ thị G=(V, E) gồm một tập các đỉnh V,. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(9)</span> 7. một tập các cạnh E và một hàm f từ E tới {{u, v }|u, v ∈ V , u 6= v }. Các cạnh e1 và e2 được gọi là cạnh song song hay cạnh bội nếu f (e1 ) = f (e2 ). Ví dụ 1.2. Đồ thị trong hình 2 là một đa đồ thị.. Đinh nghĩa 1.3. Hai đỉnh u và v trong một đồ thị vô hướng G được gọi là liền kề (hay láng giềng) nếu {u, v } là một cạnh của G. Nếu e = {u, v } thì e gọi là cạnh liên thuộc với các đỉnh u và v. Cạnh e cũng được gọi là cạnh nối các đỉnh u và v. Các đỉnh u và v được gọi là các điểm đầu mút của cạnh {u, v }. Định nghĩa 1.4. Bậc của một đỉnh trong đồ thị vô hướng là số các cạnh liên thuộc với nó, riêng khuyên tại một đỉnh được tính hai lần cho bậc của nó. Người ta kí hiệu bậc của đỉnh v là deg(v). Ví dụ 1.3. Trong hình 3, deg(a) = 0, deg(b) = 3, deg(c) = 5, deg(d) = 3, deg(e) = 3, deg(f) = 2.. 1.2 1.2.1. Một số đơn đồ thị đặc biệt Đồ thị đầy đủ. Đồ thị đầy đủ n đỉnh, kí hiệu là Kn , là một đơn đồ thị chứa đúng một cạnh nối mỗi cặp đỉnh phân biệt. Các đồ thị Kn với n=1, 2, 3, 4, 5 được biểu diễn trên hình 4.. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(10)</span> 8. 1.2.2. Đồ thị vòng. Đồ thị vòng Cn , n > 3, là một đồ thị có n đỉnh v1 , v2 , ..., vn và các cạnh {v1 , v2 }, {v2 , v3 }, ..., {vn−1 , vn } và {vn , v1 }. Các vòng C3 , C4 , C5 , C6 biểu diễn trên hình 5.. 1.2.3. Đồ thị bánh xe. Khi thêm một đỉnh vào vòng Cn , với n > 3 và nối đỉnh này với mỗi một trong n đỉnh của Cn bằng những cạnh mới, ta sẽ nhận được đồ thị hình bánh xe Wn . Các đồ thị hình bánh xe W3 , W4 , W5 , W6 được biểu diễn trên hình 6.. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(11)</span> 9. 1.2.4. Đồ thị hai phần. Một đơn đồ thị G được gọi là đồ thị hai phần nếu tập các đỉnh V có thể phân thành hai tập con không rỗng, rời nhau V1 và V2 sao cho mỗi cạnh của đồ thị nối một đỉnh của V1 với một đỉnh của V2 . Ví dụ 1.4. Đồ thị trong hình 7 là đồ thị hai phần, vì các đỉnh của nó là hợp của hai tập rời nhau {a, d, f } và {b, c, e} và mỗi cạnh của đồ thị nối một đỉnh của tập con này với một đỉnh của tâp con kia.. 1.2.5. Đồ thị phân đôi đầy đủ. Đồ thị phân đôi đầy đủ Km,n là đồ thị có tập đỉnh được phân thành hai tập con tương ứng có m đỉnh và n đỉnh và có một cạnh giữa hai đỉnh nếu và chỉ nếu một đỉnh thuộc tập con này và đỉnh thứ hai thuộc tập con kia. Các đồ thị phân đôi đầy đủ K2 ,3 , K3 ,3 , K2 ,6 được biểu diễn trên hình vẽ sau:. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(12)</span> 10. 1.3. Các đồ thị mới từ đồ thị cũ. Định nghĩa 1.5. Đồ thị con của đồ thị G = (V, E) là đồ thị H=(W, F), trong đó W ⊆ V và F ⊆ E . Ví dụ 1.5. Trong hình 9, đồ thị H là đồ thị con của đồ thị G.. Định nghĩa 1.6. Hợp của hai đơn đồ thị G1 = (V1 , E1 ) và G2 = (V2 , E2 ) là một đơn đồ thị có tập các đỉnh là V1 ∪ V2 và tập các cạnh là E1 ∪ E2 . Ta kí hiệu hợp của các đồ thị G1 và G2 là G1 ∪ G2 . Ví dụ 1.6. Trong hình 10, đồ thị E là hợp của hai đồ thi G và H.. 1.4. Tính liên thông trong đồ thị vô hướng. Định nghĩa 1.7. Đường đi độ dài n từ u tới v, với n là một số nguyên không âm trong một đồ thị vô hướng là một dãy các cạnh e1 , e2 , ..., en của đồ thị sao cho f (e1 ) = {x0 , x1 }, f (e2 ) = {x1 , x2 }, ..., f (en ) = {xn−1 , xn }, với x0 = u và xn = v . Khi đồ thị là đơn ta kí hiệu đường đi này bằng dãy các đỉnh x0 , x1 , ..., xn (vì danh sách các đỉnh này xác định duy nhất một Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(13)</span> 11. đường đi). Đường đi được gọi là một chu trình nếu nó bắt đầu và kết thúc tại cùng một đỉnh, tức là u=v. Đường đi hoặc chu trình khi đó gọi là đi qua các đỉnh x1 , x2 , ..., xn−1 hay ngang qua các cạnh e1 , e2 , ..., en . Đường đi hay chu trình gọi là đơn nếu nó không đi qua cùng một cạnh quá một lần. Định nghĩa 1.8. Một đồ thị vô hướng được gọi là liên thông nếu có đường đi giữa mọi cặp đỉnh phân biệt của đồ thị. Ví dụ 1.7. Trong hình 11, đồ thi G liên thông vì giữa mọi cặp đỉnh phân biệt đều có đường đi. Đồ thị H không liên thông, chẳng hạn, không có đường đi giữa đỉnh 1 và đỉnh 4.. Một đồ thị không liên thông là hợp của hai hay nhiều đồ thị con liên thông, mỗi cặp các đồ thị con này không có đỉnh chung. Các đồ thị con liên thông rời nhau như vậy được gọi là các thành phần liên thông của đồ thị đang xét. Ví dụ 1.8. Trong hình 12, đồ thị H không liên thông, là hợp của ba đồ thị con liên thông rời nhau H1, H2, H3. Ba đồ thị con này là ba thành phần liên thông của H.. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(14)</span> 12. Chương 2 Cấu trúc cây Trong chương này chúng tôi trình bày định nghĩa cây và các tính chất của cây. Chương gồm hai mục: Trong mục 2.1 là định nghĩa về cây và ví dụ minh họa. Mục 2.2 trình bày các tính chất của cây và chứng minh các tính chất đó. Các kiến thức trong chương này được tham khảo từ chương 9 trong sách [1].. 2.1. Định nghĩa cây. Cây là một đồ thị vô hướng, liên thông và không có chu trình. Ví dụ 2.1. Trong hình 13, G là một cây vì G liên thông và không có chu trình, H không là một cây vì H chứa chu trình đơn, ví dụ như chu trình 1, 7, 2, 6, 1.. 2.2. Các tính chất của cây. Định lí 2.1. Cho G = (V, E) là một đơn đồ thị vô hướng. Các mệnh đề sau là tương đương:. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(15)</span> 13. 1. G là một cây. 2. G không chứa chu trình và|V | = |E| + 1. 3. G liên thông và |V | = |E| + 1. 4 .G liên thông nhưng nếu xóa đi một cạnh bất kỳ của G thì đồ thị nhận được không liên thông nữa. 5. Giữa hai đỉnh bất kì của G có một và chỉ một đường đi. 6. G không chứa chu trình nhưng nếu thêm vào G một cạnh bất kì thì đồ thị nhận được sẽ có chu trình. Chứng minh: • 1 =⇒ 2: Theo định nghĩa của cây thì G không chứa chu trình. Ta sẽ chứng minh |V | = |E| + 1 bằng phương pháp quy nạp. Giả sử G có n đỉnh, ta cần chứng minh G có n − 1 cạnh. Rõ ràng khẳng định trên đúng với n = 1. Giả sử khẳng định đúng với n − 1. Ta phải chứng minh khẳng định đúng với n. Trươc hết ta nhận thấy rằng mọi cây có n đỉnh đều tìm được ít nhất 1 đỉnh có bậc bằng 1. Thật vậy, gọi v1 , v2 , ..., vk là đường đi dài nhất (theo số cạnh) trong G. Khi đó rõ ràng v1 , vk là các đỉnh có bậc 1, vì từ v1 (hoặc vk ) không có cạnh nối với bất cứ đỉnh nào trong các đỉnh v2 , v3 , ..., vk (hoặc v1 ) (do đồ thị không chứa chu trình), cũng như bất cứ đỉnh nào khác của đồ thị (do đường đi đang xét là dài nhất). Loại bỏ v1 và cạnh (v1 , v2 ) khỏi G, ta thu được cây G1 với n − 1 đỉnh, mà theo giả thiết quy nạp có n − 2 cạnh. Vậy G có n − 2 + 1 = n − 1 cạnh. • 2 =⇒ 3: Ta chứng minh bằng phản chứng. Giả sử G không liên thông. Khi đó G phân rã thành k > 2 thành phần liên thông G1 , G2 , ..., Gk . Do G không chứa chu trình nên mỗi Gi (i = 1, ..., k) cũng không chứa chu trình vì thế mỗi Gi là một cây. Do đó, nếu gọi |Vi | và |Ei | theo thứ tự là số đỉnh và số cạnh của Gi , ta có: |Vi | = |Ei | + 1 (i = 1, ..., k).. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(16)</span> 14. Suy ra |V | − 1 = |E| = |E1 | + |E2 | + ... + |Ek | = |V1 | + |V2 | + ... + |Vk | − k = |V | − k < |V | − 1 Mâu thuẫn trên chứng tỏ G liên thông. • 3 =⇒ 4: Việc loại bỏ một cạnh bất kỳ khỏi G dẫn đến đồ thị với n đỉnh và n − 2 cạnh rõ ràng là đồ thị không liên thông. • 4 =⇒ 5: Do G là liên thông nên hai đỉnh bất kỳ của nó được nối với nhau bởi một đường đi. Giả sử tồn tại hai đỉnh của G có hai đường đi khác nhau nối chúng, thì từ đó suy ra đồ thị chứa chu trình. Khi đó nếu xóa đi một cạnh (a, b) bất kì thuộc chu trình đó thì đồ thị nhận được vẫn liên thông. Thật vây: Giả sử là chu trình a = v0 , v1 , ..., b = vk , ...vm , v0 . Với hai đỉnh c, d bất kì của G ta có: +) Nếu đường đi từ c đến d không chứa cạnh (a, b) thì hiển nhiên vẫn tồn tại đường đi từ c đến d. +) Nếu đường đi từ c đến d chứa cạnh (a, b) thì sau khi xóa (a, b) vẫn tồn tại đường đi từ c đến d là: từ c đi đến a và đi qua v1 , ..., b = vk , ..., vm và đi đến d. Vậy sau khi xóa một cạnh của G thì đồ thị nhận được vẫn liên thông (mâu thuẫn với giả thiết (4)). Do đó chỉ có một và chỉ một đường đi giữa 2 đỉnh bất kì của G. • 5 =⇒ 6: G không chứa chu trình, vì nếu có chu trình thì sẽ tìm được cặp đỉnh của G được nối với nhau bởi hai đường đi. Bây giờ, nếu thêm vào G một cạnh e nối hai đỉnh u và v nào đó của G. Khi đó cạnh này cùng với đường đi nối u với v sẽ tạo thành chu trình trong G. • 6 =⇒ 1: Giả sử G không liên thông. Khi đó gồm ít ra là 2 thành phần liên thông. Vì vậy, nếu thêm vào G một cạnh nối hai đỉnh thuộc hai thành phần liên thông khác nhau ta không thu được thêm một chu trình nào cả. Điều đó mâu thuẫn với giả thiết (6). Vậy G là một cây. Định lý được chứng minh.. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(17)</span> 15. Chương 3 Cây bao trùm của đồ thị đầy đủ Chương này bao gồm hai mục: Trong mục 3.1, chúng tôi trình bày định nghĩa cây bao trùm. Mục 3.2 trình bày về cây bao trùm và công thức tính số cây bao trùm của đồ thị đầy đủ được gán nhãn, thuật toán mã hóa Prüfer và giải mã Prüfer. Các kiến thức trong chương này được tham khảo từ [1] và [3].. 3.1. Cây bao trùm. Định nghĩa 3.1. Cho G là một đồ thị. Một cây được gọi là cây bao trùm của G nếu nó là một đồ thị con của G và chứa tất cả các đỉnh của G. Ví dụ 3.1. Trong hình 14, H, K là các cây bao trùm của G.. Cây bao trùm của đồ thị liên thông G cũng có thể được định nghĩa như một đồ thị con không có chu trình lớn nhất, hay một đồ thị con liên thông nhỏ nhất của G.. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(18)</span> 16. 3.2. Cây bao trùm của đồ thị đầy đủ. Câu hỏi đặt ra là có bao nhiêu cây bao trùm của một đồ thị đầy đủ n đỉnh được gán nhãn? Để trả lời câu hỏi này trước hết chúng ta làm ví dụ sau. Ví dụ 3.2. Tìm các cây bao trùm của đồ thị K4 trong hình 15?. Giải: Tất cả có 16 cây bao trùm của K4 được cho trong hình vẽ sau:. Năm 1889, Cayley đã tìm ra công thức nổi tiếng: có nn−2 cây bao. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(19)</span> 17. trùm của đồ thị đầy đủ Kn được gán nhãn. Có nhiều chứng minh của công thức này. Chứng minh đầu tiên của công thức Cayley là do Prüfer. Ý tưởng chứng minh của Prüfer là tìm sự tương ứng một - một giữa tập các cây bao trùm của đồ thị đầy đủ Kn được gán nhãn và tập các dãy số Prüfer có độ dài n − 2 được định nghĩa như sau: Định nghĩa 3.2. Một dãy số Prüfer có độ dài n − 2, với n > 2, là dãy bất kì các số nguyên từ 1 đến n, các chữ số có thể được lặp lại. Bổ đề 3.1. Có nn−2 dãy số Prüfer có độ dài n − 2. Chứng minh: Theo định nghĩa có n cách chọn mỗi phần tử của một dãy số Prüfer có độ dài n − 2. Khi đó có n − 2 phần tử được chọn, vậy tổng cộng chúng ta có nn−2 cách chọn toàn bộ dãy số. Ví dụ 3.3. Tập các dãy số Prüfer có độ dài 2 là: {(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (4, 1), (4, 2), (4, 3), (4, 4)}. Tổng cộng có 44−2 = 16 dãy số Prüfer có độ dài 2. Cho một cây có nhãn với các đỉnh được gán nhãn bởi 1, 2, ..., n, thuật toán mã hóa Prüfer cho ra một dãy số Prüfer duy nhất có độ dài n − 2. Nó khởi tạo với một dãy số rỗng. Nếu cây có nhiều hơn 2 đỉnh, thuật toán tìm thấy lá với nhãn nhỏ nhất, và thêm vào dãy số nhãn của đỉnh kề với lá đó. Sau đó lá với nhãn nhỏ nhất đó sẽ bị xóa khỏi cây. Quá trình này được lặp lại n − 2 lần cho đến khi cây chỉ còn lại 2 đỉnh. Thuật toán kết thúc sau khi xóa n − 2 đỉnh. Do đó, dãy số thu được có chiều dài là n − 2. Ta có thuật toán mã hóa Prüfer như sau: Thuật toán: MÃ HÓA PRÜFER Đầu vào: Cây có nhãn với các đỉnh được gán nhãn bởi 1, 2, ..., n. Đầu ra: Một dãy số Prüfer. Lặp n − 2 lần. v ← lá với nhãn thấp nhất. Đặt nhãn của đỉnh kề duy nhất của v trong dãy đầu ra. Xóa v khỏi cây. Chúng ta hãy nhìn vào hình 16. Trong hình 16 (e), đỉnh 3 là lá với nhãn nhỏ nhất, do đó chúng ta thêm đỉnh kề duy nhất của nó là đỉnh 2 vào dãy số. Sau khi loại bỏ đỉnh 3 từ cây, đỉnh 2 trở thành lá với nhãn. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(20)</span> 18. nhỏ nhất, và chúng ta lại thêm đỉnh kề duy nhất của nó là đỉnh 1 vào dãy số. Vì vậy, dãy số Prüfer thu được là (2, 1). Trong hình 16 (f), đỉnh 1 là lá với nhãn nhỏ nhất, do đó chúng ta thêm đỉnh kề duy nhất của nó là đỉnh 2 vào dãy số. Sau khi loại bỏ đỉnh 1 từ cây, đỉnh 3 trở thành lá với nhãn nhỏ nhất, và chúng ta lại thêm đỉnh kề duy nhất của nó là đỉnh 2 vào dãy số. Vì vậy, dãy số Prüfer thu được là (2, 2). Bây giờ hãy xem xét một cây phức tạp hơn trong hình 17. Dãy số Prüfer tương ứng của nó là gì ?. Hình vẽ 18 minh họa từng bước mã hóa. Trong hình 18(a), đỉnh 1 là lá với nhãn nhỏ nhất, do đó chúng ta thêm đỉnh kề duy nhất của nó là đỉnh 3 vào dãy số, dãy số Prüfer thu được dưới đây kí hiệu là P . Ta có P = (3). Sau đó chúng ta xóa đỉnh 1 khỏi cây. Trong hình 18(b), đỉnh 2 là đỉnh có nhãn nhỏ nhất, chúng ta lại thêm đỉnh kề duy nhất của nó là đỉnh 4 vào dãy số. Vì vậy chúng ta có P = (3, 4). Sau đó ta xóa đỉnh 2 khỏi cây thì đỉnh 5 là lá với nhãn nhỏ nhất. Chúng ta lại thêm đỉnh kề duy nhất của nó là đỉnh 3 vào dãy số. Vì vậy chúng ta có P = (3, 4, 3). Lặp lại quá trình này sau một số bước cho đến khi cây còn lại hai đỉnh. Trong ví dụ này, đỉnh 6 và 9 là hai đỉnh còn lại. Ta được dãy số Prüfer tương ứng với cây trong hình 17 là P = (3, 4, 3, 6, 4, 6, 6). Có thể thấy rằng các cây bao trùm khác nhau của đồ thị đầy đủ Kn được gán nhãn xác định các dãy số Prüfer khác nhau. Thuật toán giải mã Prüfer đưa ra thuật toán ngược lại. Nó tìm được cây T với n đỉnh được gán nhãn ứng với một dãy số Prüfer đã cho có n − 2 phần tử. Cho một dãy số Prüfer P = (p1 , p2 , ..., pn−2 ). Ta nhận thấy rằng bất kì đỉnh v nào của T đều xuất hiện deg(v) − 1 lần trong dãy (p1 , p2 , ..., pn−2 ), với deg(v) là bậc của đỉnh v. Do đó các đỉnh bậc một trong T không xuất. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(21)</span> 19. hiện trong P . Để xây dựng lại cây T từ dãy (p1 , p2 , ..., pn−2 ) ta làm như sau: Cho V là tập các nhãn đỉnh của cây T , V = {1, 2, 3, ..., n}. Trong lần lặp thứ i của vòng lặp, P = (pi , pi+1 , ..., pn−2 ). Giả sử v là phần tử nhỏ nhất của V không xuất hiện trong P . Chúng ta nối đỉnh v với đỉnh pi . Sau đó chúng ta xóa v khỏi V và pi khỏi P . Lặp lại quá trình này n − 2 lần cho đến khi còn lại 2 số trong V . Cuối cùng, chúng ta nối các đỉnh tương ứng với hai số còn lại trong V . Ta có thể thấy các dãy số. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(22)</span> 20. Prüfer khác nhau sẽ cho các cây bao trùm khác nhau của đồ thị đầy đủ Kn được gán nhãn. Ta có thuật toán giải mã Prüfer như sau: Thuật toán : GIẢI MÃ PRÜFER Đầu vào: Một dãy Prüfer (p1 , p2 , ..., pn−2 ) Đầu ra: Cây có nhãn với các đỉnh được gán nhãn bởi 1, 2,..., n. P ← dãy số Prüfer đầu vào n ← |P | + 2 V ← {1, 2, ..., n} Bắt đầu với n đỉnh có nhãn 1, 2 ,..., n. for i = 1 to n-2 do v ← phần tử nhỏ nhất của tập V mà không xuất hiện trong P Nối đỉnh v đến đỉnh pi Xóa v khỏi tập V Xóa pi khỏi P / * Bây giờ P = (pi+1 , pi+2 , ..., pn−2 ) */ Nối các đỉnh tương ứng với hai con số trong V. Ta sẽ xem thuật toán giải mã Prüfer chạy thế nào, chúng ta hãy xây dựng một cây bao trùm tương ứng với dãy số P = (3, 4, 3, 6, 4, 6, 6). Hình 19 minh họa từng bước của quá trình giải mã. Ban đầu, P = (3, 4, 3, 6, 4, 6, 6) và V = {1, 2, 3, 4, 5, 6, 7, 8, 9}. Ta thấy 1 là phần tử nhỏ nhất của V không xuất hiện trong P . Do đó chúng ta nối đỉnh 1 với phần tử đầu tiên của P , nghĩa là đỉnh 3 (xem hình 19(a)). Sau đó chúng ta xóa 1 khỏi V và 3 khỏi P . Bây giờ P=(4, 3, 6, 4, 6, 6) và V= {2, 3, 4, 5, 6, 7, 8, 9}. Chúng ta nối đỉnh 2 với đỉnh 4 (xem hình 19 (b). Lặp lại quá trình này cho đến khi chỉ còn hai đỉnh trong V . (Xem hình 19(h)). Chúng ta đã thiết lập được một tương ứng một-một giữa tập các cây bao trùm của đồ thị đầy đủ Kn được gán nhãn và tập các dãy số Prüfer có độ dài n-2. Định lí 3.1. Số các cây bao trùm của đồ thị đầy đủ Kn được gán nhãn là nn−2 .. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(23)</span> 21. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(24)</span> 22. Chương 4 Một số thuật toán xây dựng cây bao trùm của đồ thị vô hướng liên thông Chúng ta biết rằng có thể tìm được cây bao trùm của đồ thị nhờ vào việc loại bỏ các cạnh, nhưng chúng ta có thể xây dựng cây bao trùm bằng cách lần lượt ghép thêm các cạnh. Tôi sẽ giới thiệu hai thuật toán dựa trên nguyên tắc này. Chương này bao gồm hai mục: Trong mục 4.1 chúng tôi trình bày về thuật toán tìm kiếm ưu tiên chiều sâu. Mục 4.2 trình bày về thuật toán tìm kiếm ưu tiên chiều rộng. Các kiến thức trong chương này được tham khảo từ chương 9 trong sách [1] và chương 22 trong sách [2].. 4.1. Thuật toán tìm kiếm ưu tiên chiều sâu. Ta sẽ xây dựng cây bao trùm của một đồ thị liên thông bằng phương pháp tìm kiếm ưu tiên chiều sâu. Nghĩa là sẽ tạo một cây có gốc và cây bao trùm sẽ là đồ thị vô hướng nền của cây có gốc này. Chọn tùy ý một đỉnh của đồ thị làm gốc. Xây dựng đường đi từ đỉnh này bằng cách lần lượt ghép các cạnh vào sao cho mỗi cạnh mới ghép sẽ nối đỉnh cuối cùng trên đường đi với một đỉnh còn chưa thuộc đường đi. Tiếp tục ghép thêm các cạnh vào đường đi chừng nào không thể thêm được nữa thì thôi. Nếu đường đi qua tất cả các đỉnh của đồ thị thì cây do đường đi này tạo nên sẽ là cây bao trùm. Nhưng nếu đường đi không đi qua tất cả các đỉnh thì ta lùi lại đỉnh trước đỉnh cuối cùng của đường đi và. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(25)</span> 23. xây dựng đường đi mới xuất phát từ đỉnh này đi qua các đỉnh còn chưa thuộc đường đi. Nếu tất cả các đỉnh của đồ thị đều đã được viếng thăm thì ta tìm được cây bao trùm, ngược lại, ta lại lùi thêm một đỉnh nữa trên đường đi và xây dựng đường đi mới. Lặp lại thủ tục này, bắt đầu từ đỉnh cuối cùng được viếng thăm lùi theo đường đi mỗi lần một đỉnh, xây dựng đường đi mới càng dài càng tốt cho tới khi nào không thể xây dựng được một cạnh nào nữa. Vì đồ thị có hữu hạn cạnh và là liên thông nên quá trình đó sẽ kết thúc và tạo được cây bao trùm. Mỗi đỉnh mà tại đó đường đi kết thúc ở mỗi giai đoạn của thuật toán sẽ là lá trong cây có gốc. Mỗi đỉnh tại đó đường đi bắt đầu từ đó sẽ là một đỉnh trong. Tìm kiếm ưu tiên chiều sâu cũng được gọi là thủ tục quay lui, vì nó quay lại đỉnh đã viếng thăm trước trên đường đi. Ví dụ sau đây minh họa thủ tục quay lui. Ví dụ 4.1. Dùng thuật toán ưu tiên chiều sâu, tìm cây bao trùm của đồ thị G trên hình 20.. Giải: Các bước dùng trong thuật toán tìm kiếm ưu tiên chiều sâu để xây dựng cây bao trùm của G được biểu thị trên hình 21. Chúng ta xuất phát từ một đỉnh tùy ý, chẳng hạn đỉnh d. Đường đi được xây dựng bằng cách lần lượt ghép, càng nhiều càng tốt, các cạnh liên thuộc với các đỉnh còn chưa thuộc đường đi. Điều đó tạo ra được đường đi d, c, a, b (lưu ý là có thể có đường đi khác được xây dựng). Tiếp theo, lùi lại a. Không có đường đi bắt đầu từ a chứa các đỉnh chưa được viếng thăm. Vì thế lùi tới c, ta thấy cũng không có đường đi bắt đầu từ c chứa các đỉnh chưa được viếng thăm. Tiếp tục lùi về d. Từ d có đường đi d, e, h, i. Ta lại lùi về h và xây dựng đường đi h, g, j. Ta lại lùi về g, xây dựng đường đi g, f. Ta thấy tất cả các đỉnh của G đều đã được viếng thăm.. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(26)</span> 24. Thủ tục này đã xây dựng được cây bao trùm của G.. Các cạnh của đồ thị tìm được nhờ tìm kiếm ưu tiên chiều sâu gọi là các cạnh của cây. Các cạnh khác của đồ thị có thể nối với đỉnh trước hoặc sau nó trong cây. Các cạnh này gọi là các cạnh quay lui. Trong thuật toán tìm kiếm ưu tiên chiều sâu chúng ta xây dựng cây bao trùm của đồ thị G với các đỉnh v1 , v2 ...vn bằng cách lấy đỉnh v1 làm gốc của cây. Khởi tạo tập T là cây chỉ có một đỉnh này. Trong mỗi bước, thêm một đỉnh mới vào cây T cùng với cạnh đi ra từ đỉnh của T tới đỉnh mới và chúng ta thăm dò từ đỉnh này. Chú ý rằng khi kết thúc thuật toán T không chứa chu trình vì không có cạnh được thêm vào mà nó nối với đỉnh đã có trong cây. Tuy nhiên, T vẫn là liên thông như nó được xây dựng. Vì G là liên thông, mọi đỉnh trong G đều được thăm và ghép vào cây. Từ đó suy ra T là cây bao trùm của G. Ta có thuật toán tìm kiếm ưu tiên chiều sâu như sau: Thuật toán: Tìm kiếm ưu tiên chiều sâu procedure DFS (G: đồ thị liên thông với các đỉnh v1 , v2 , ..., vn ) T := cây chỉ chứa một đỉnh v1 visit (v1 ) procedure visit (v: đỉnh của G) for mỗi đỉnh w liền kề với v và chưa có trong T begin thêm đỉnh w và cạnh (v, w) vào T visit (w) end. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(27)</span> 25. 4.2. Thuật toán tìm kiếm ưu tiên chiều rộng. Cho đồ thị G = (V, E) có chứa đỉnh s, thuật toán tìm kiếm ưu tiên theo chiều rộng (BFS) có thể tìm ra tất cả các đỉnh có thể đến được từ s. Nó tính toán được khoảng cách từ s đến mỗi đỉnh có thể tới được. Nó cũng đưa ra được một cây bao trùm của G với gốc s có chứa tất cả các đỉnh có thể tới được. Với mỗi đỉnh v có thể tới được từ s, đường đi trong cây bao trùm từ s đến v tương ứng với một "đường đi ngắn nhất" từ s đến v trong G, nghĩa là, một đường đi chứa số lượng nhỏ nhất các cạnh. Thuật toán tìm kiếm ưu tiên theo chiều rộng tìm ra tất cả các đỉnh ở khoảng cách k từ s trước khi tìm ra bất kì đỉnh nào ở khoảng cách k + 1. Trong thuật toán này, chúng ta sử dụng các màu trắng, xám hoặc đen để tô màu cho mỗi đỉnh. Tất cả các đỉnh ban đầu đều được tô màu trắng, sau đó có thể trở thành màu xám hoặc đen. Một đỉnh được tìm ra lần đầu, nó được viếng thăm trong quá trình tìm kiếm, khi đó nó sẽ không còn là màu trắng. Các đỉnh màu xám và đen là các đỉnh đã được tìm ra. Nếu (u, v) ∈ E và u là đỉnh màu đen thì v là một trong hai đỉnh màu xám hoặc đen, nghĩa là tất cả các đỉnh liền kề với đỉnh màu đen đều đã được tìm ra. Các đỉnh màu xám thì có thể liền kề với một số đỉnh màu trắng. Điều đó giúp phân biệt giữa các đỉnh đã được tìm ra và các đỉnh chưa được tìm ra. Thuật toán tìm kiếm ưu tiên theo chiều rộng xây dựng một cây bao trùm, ban đầu chỉ có một đỉnh, đó là gốc s. Bất cứ khi nào một đỉnh màu trắng v được phát hiện trong quá trình quét các danh sách kề của một đỉnh đã được tìm ra u thì đỉnh v và cạnh (u, v) được thêm vào cây. Chúng ta nói rằng u là cha của v trong cây. Trong thuật toán BFS dưới đây, đầu vào là đồ thị G = (V, E), màu của mỗi đỉnh u ∈ V được lưu trong biến color[u], cha của u được lưu trong biến π[u]. Nếu u không có cha (ví dụ, nếu u = s, hoặc u không được tìm ra), thì π[u] = NIL, khoảng cách từ gốc s đến đỉnh u tính bằng thuật toán được lưu trong d[u]. Thuật toán cũng sử dụng hàng Q để. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(28)</span> 26. quản lí tập hợp các đỉnh màu xám, Adj[u] là tập các đỉnh kề của u. Ta có thuật toán tìm kiếm ưu tiên chiều rộng như sau: Thuật toán: Tìm kiếm ưu tiên chiều rộng procedure BFS (G, s) 1 for mỗi đỉnh u ∈ V − {s} 2 do color[u] ← TRẮNG 3 d[u] ← ∞ 4 π[u] ← NIL 5 color[s] ← XÁM 6 d[s] ← 0 7 π[s] ← NIL 8 Q←∅ 9 Thêm s vào Q 10 while Q 6= ∅ 11 do Rút u khỏi (Q) 12 for mỗi v ∈ Adj[u] 13 do if color[v]= TRẮNG 14 then color[v] ← XÁM 15 d[v] ← d[u] + 1 16 π[v] ← u 17 Thêm v vào Q 18 color[u] ← ĐEN Ví dụ 4.2. Dùng thuật toán ưu tiên chiều rộng, tìm cây bao trùm của đồ thị G trên hình 20. Các bước thực hiện thuật toán BFS để tìm cây bao trùm của đồ thị trên hình 20 được mô tả trên hình 22 (gồm 11 bước) như sau:. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(29)</span> 27. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(30)</span> 28. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(31)</span> 29. Dựa vào các bước mô tả trên hình 22, chúng ta tìm được cây bao trùm của đồ thị G trên hình 20 như sau:. Như đã nói ở trên thuật toán tìm kiếm ưu tiên chiều rộng có thể tính được khoảng từ gốc s đến mỗi đỉnh trong đồ thị G = (V, E) có thể tới được từ s. Định nghĩa khoảng cách đường đi ngắn nhất δ(s, v) từ s đến v là số lượng nhỏ nhất của các cạnh trong bất kì con đường đi nào từ s đến v; nếu không có đường đi từ s đến v thì δ(s, v) = ∞. Một con đường có độ dài δ(s, v) được gọi là đường đi ngắn nhất từ s đến v. Chúng ta có một số tính chất quan trọng về khoảng cách đường đi ngắn nhất như sau: Bổ đề 4.1. Cho đồ thị G = (V, E), s là một đỉnh tùy ý. Thì ,với bất kì cạnh (u, v) ∈ E ta có: δ(s, v) = δ(s, u) + 1. Chứng minh: Nếu u có thể đến được từ s, sau đó là v thì trong trường hợp này đường đi ngắn nhất từ s tới v không thể dài hơn đường đi ngắn nhất từ s tới u tiếp theo là cạnh (u, v), nghĩa là δ(s, v) = δ(s, u) + 1. Nếu u không thể đến được từ s thì v cũng không thể đến được từ s nên δ(s, u) = ∞, δ(s, v) = ∞. Vậy ta có điều phải chứng minh. Bổ đề 4.2. Cho đồ thị G = (V, E), giả sử BFS chạy trên G từ gốc s ∈ V cho trước thì khi thuật toán kết thúc, với mỗi đỉnh v ∈ V , giá trị d[v] được tính bởi BFS thỏa mãn: d[v] > δ(s, v). Chứng minh: Chúng ta chứng minh bằng phương pháp quy nạp. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(32)</span> 30. trên số các phép toán "thêm vào" hàng Q. Phương pháp quy nạp bắt đầu ngay sau khi s được thêm vào hàng Q tại dòng 9 của BFS. Kết luận của bổ đề đúng với trường hợp này, bởi vì, d[s] = 0 = δ(s, s) và d[v] = ∞ > δ(s, v) với mọi v ∈ V − {s}. Xét một đỉnh màu trắng v được phát hiện trong quá trình tìm kiếm từ một đỉnh u. Ta có giả thiết quy nạp là: d[u] > δ(s, u). Từ dòng 15 và bổ đề 4.1, ta có: d[v] = d[u] + 1 > δ(s, u) + 1 > δ(s, v) Đỉnh v được thêm vào Q sau đó và nó không bao giờ được thêm vào Q lần nữa bởi vì nó đã được tô màu xám và câu lệnh Then của các dòng từ 14-17 chỉ thực hiện với các đỉnh màu trắng. Do đó giá trị d[v] không bao giờ thay đổi. Vậy bổ đề được chứng minh. Bổ đề 4.3. Giả sử rằng trong quá trình thực hiện của BFS trên đồ thị G = (V, E), hàng Q chứa các đỉnh {v1 , v2 , ..., vr }, với v1 đứng đầu hàng Q, vr đứng cuối hàng Q. Thì, d[vr ] 6 d[v1 ] + 1 và d[vi ] 6 d[vi+1 ], với i = 1, 2, ..., r − 1. Chứng minh: Chúng ta chứng minh bằng phương pháp quy nạp với số các phép toán "thêm vào" và "rút ra" trên hàng Q. Hiển nhiên khi hàng Q chỉ chứa đỉnh s thì bổ đề luôn đúng. Chúng ta phải chứng minh rằng bổ đề đúng sau cả hai phép toán "thêm vào" và "rút ra" một đỉnh. Nếu v1 đứng đầu hàng Q được rút ra thì hàng Q sẽ trở thành hàng Q0 gồm các đỉnh {v2 , v3 , ..., vr }, nghĩa là v2 ở vị trí đứng đầu (nếu Q trở thành rỗng thì bổ đề hiển nhiên đúng). Ta có d[v1 ] 6 d[v2 ]. Do đó: d[vr ] 6 d[v1 ] + 1 6 d[v2 ] + 1 . Vậy bổ đề đúng với v2 ở vị trí đứng đầu. Khi chúng ta thêm vào một đỉnh v tại dòng 17 của BFS, thì nó trở thành vr+1 . Khi đó chúng ta đã loại bỏ đỉnh u từ hàng Q và quét danh sách kề của u. v1 ở vị trí đứng đầu. Ta có d[u] 6 d[v1 ]. Do đó: d[vr+1 ] = d[v] = d[u] + 1 6 d[v1 ] + 1. Với giả thiết quy nạp ta có: d[vr ] 6 d[u] + 1. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(33)</span> 31. nên d[vr ] 6 d[u] + 1 = d[v] = d[vr+1 ]. Do đó bổ đề đúng khi v được thêm vào. Hệ quả 4.1. Giả sử vi và vj được thêm vào hàng Q trong quá trình thực hiện BFS, và vi được thêm vào trước vj . Thì, d[vi ] 6 d[vj ], tại thời điểm đó vj được thêm vào. Chứng minh: Ta suy ra ngay từ bổ đề 4.3. Định lí 4.1.: Cho đồ thị G = (V, E), giả sử rằng BFS chạy trên G từ một gốc s ∈ V đã cho. Thì, trong quá trình thực hiện, BFS tìm ra tất cả các đỉnh v ∈ V có thể đến được từ gốc s, và khi kết thúc, d[v] = δ(s, v) với mọi v ∈ V . BFS tạo ra một cây có bao trùm có gốc là s, và với mỗi đỉnh v, đường đi duy nhất từ s đến v trong cây này là một đường đi ngắn nhất từ s đến v trong đồ thị G. Chứng minh: Chúng ta sử dụng phương pháp phản chứng để chứng minh. Giả sử tồn tại một đỉnh v ∈ V sao cho d[v] 6= δ(s, v). Ta chọn đỉnh v với giá trị δ(s, v) nhỏ nhất mà d[v] 6= δ(s, v), hiển nhiên v 6= s. Theo bổ đề 4.2 thì d[v] > δ(s, v), và do đó d[v] > δ(s, v). Đỉnh v phải tới được từ s, vì nếu không δ(s, v) = ∞ > d[v]. Cho u là đỉnh đứng ngay trước v trên một đường đi ngắn nhất từ s đến v, ta có: δ(s, v) = δ(s, u) + 1. Vì δ(s, u) < δ(s, v), d[u] = δ(s, u) nên: d[v] > δ(s, v) = δ(s, u) + 1 = d[u] + 1. (4.1). Bây giờ ta xét thời điểm khi BFS chọn rút u ra khỏi Q tại dòng 11. Khi đó, đỉnh v là một trong các màu trắng, xám hoặc đen. Chúng ta sẽ chỉ ra trong mỗi trường hợp này chúng ta có được mâu thuẫn với bất đẳng thức (4.1). Nếu đỉnh v màu trắng thì tại dòng 15 ta có d[v] = d[u] + 1 (mâu thuẫn với (4.1)). Nếu đỉnh v màu đen thì nó đã được rút ra khỏi Q. Từ hệ quả 4.1 ta có: d[v] 6 d[u] (mâu thuẫn với (4.1)). Nếu đỉnh v màu xám thì nó được tô màu xám sau khi rút đỉnh w nào đó khỏi Q nên ta có: d[v] = d[w] + 1, w cũng được rút khỏi Q trước u,. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(34)</span> 32. từ hệ quả 4.1 ta có: d[w] 6 d[u] suy ra d[v] 6 d[u] + 1. (mâu thuẫn với (4.1)). Do đó chúng ta kết luận rằng d[v] = δ(s, v) với mọi v ∈ V . Tất cả các đỉnh có thể đến được từ s phải được tìm ra, nếu không chúng sẽ có giá trị d vô hạn. Để kết luận chứng minh của định lí, quan sát rằng nếu π[v] = u thì d[v] = d[u] + 1. Do đó, chúng ta có thể có được một con đường ngắn nhất từ s đến v bằng cách lấy một con đường ngắn nhất từ s đến π[v] và sau đó qua cạnh (π[v], v). Kết luận: Trong chương 4 luận văn đã trình bày hai thuật toán để tìm cây bao trùm của một đồ thị vô hướng, liên thông: thuật toán tìm kiếm ưu tiên chiều sâu, thuật toán tìm kiếm ưu tiên chiều rộng và cũng đưa ra được một số tính chất về thuật toán tìm kiếm ưu tiên chiều rộng. Chúng ta thấy rằng khi sử dụng hai thuật toán đó để tìm cây bao trùm của cùng một đồ thị thì cho ra hai cây bao trùm khác nhau.. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(35)</span> 33. Kết luận. Luận văn đã đề cập đến các vấn đề sau: • Một số khái niệm cơ bản của đồ thị. • Một số tính chất của cây. • Cây bao trùm của đồ thị và công thức tính số cây bao trùm của đồ thị đầy đủ Kn . • Sự tương ứng giữa tập số cây bao trùm của đồ thị đầy đủ n đỉnh được đánh nhãn và tập các dãy số Prüfer có độ đài n − 2. • Một số thuật toán tìm cây bao trùm của đồ thị liên thông, vô hướng. Mặc dù đã có sự cố gắng và nỗ lực song chắc hẳn đề tài không tránh khỏi những hạn chế, thiếu sót. Tác giả rất mong nhận được ý kiến đóng góp của các thầy cô giáo và các bạn để luận văn hoàn thiện hơn. Xin trân trọng cảm ơn!. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(36)</span> 34. Tài liệu tham khảo [1] Bang Ye Wu, Kun-Mao Chao, Spanning Trees and Optimization Problems, (2004), Chapman & Hall/CRC Press, USA. . [2] Cormen, Thomas H., Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 2nd ed. Cambridge, MA: MIT Press. ISBN: 0262032937. [3] Kenneth H. Rosen, Discrete mathematics and its applications, Fifth edition, dịch bởi Phạm Văn Thiều và Đặng Hữu Thịnh "Toán học rời rạc ứng dụng trong Tin học", NXB Giáo dục, 1997. Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên. .

<span class='text_page_counter'>(37)</span>

×