Thuật toán tô màu đồ thị đơn

Một phần của tài liệu Bài giảng môn toán rời rạc học phần lý thuyết đồ thị (Trang 55)

Thuật toán sau đây có thể dùng để tô màu đồ thị đơn.

Trƣớc tiên liệt kê các đỉnh v1, v2, ..., vn theo thứ tự bậc giảm dần, tức là

deg(v1)  deg(v2)  ...  deg(vn). Gán màu 1 cho v1 và cho đỉnh tiếp theo trong danh sách mà không liền kề với v1 (nếu nó tồn tại), và lần lƣợt cho mỗi đỉnh không kề với các đỉnh có màu 1. Sau đó gán màu 2 cho đỉnh đầu tiên trong danh sách còn chƣa đƣợc tô màu và không nối với các đỉnh có màu 2. Nếu vẫn còn các đỉnh chƣa đƣợc tô màu hãy gán màu 3 cho đỉnh đầu tiên chƣa đƣợc tô màu trong danh sách và cho các đỉnh chƣa tô màu và không liền kề với các đỉnh có màu 3. Tiếp tục quá trình này cho tới khi tất cả các đỉnh đƣợc tô màu.

Chương 8. CÂY

Một đồ thị liên thông và không có chu trình đơn đƣợc gọi là cây. Cây đã đƣợc dùng từ năm 1857, khi nhà toán học Anh tên là Arthur Caley 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, nhƣ sẽ chỉ ra trong chƣơng này.

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 rất có hiệu quả để định vị các phần tử trong một danh sách. Cây 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 với các máy 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. Cây đặc biệt có giá trị khi nghiên cứu các thuật toán sắp xếp.

8.1. MỞ ĐẦU

Cây phả hệ của một dòng họ là một ví dụ hay về cây. Cây phả hệ là một đồ thị trong đó các đỉnh biểu thị các thành viên, các cạnh biểu thị mối quan hệ cha con. Đồ thị vô hƣớng biểu diễn các biểu đồ phả hệ là một ví dụ về một loại đồ thị đặc biệt gọi là cây.

Định nghĩa 1. Cây là một đồ thị vô hƣớng, liên thông và không có chu trình đơn.

Vì cây không thể có chu trình đơn, nên cây không thể có cạnh bội và khuyên. Vậy mọi cây đều là đồ thị đơn.

Ví dụ 1. Đồ thị nào trong các đồ thị trên hình sau là cây?

G1 G2 G3 G4

G1 và G2 là cây, G3 và G4 không phải là cây.

Định nghĩa 2. Một đồ thị không có chu trình đơn nhƣng không liên thông đƣợc gọi là rừng.

Cây thƣờng đƣợc định nghĩa nhƣ một đồ thị vô hƣớng, trong đó giữa mọi cặp đỉnh của nó luôn tồn tại một đƣờng đi đơn duy nhất. Định lý sau cho thấy trong đồ thị vô hƣớng thì tính

liên thông và không có chu trình đơn tƣơng đƣơng với tính tồn tại đƣờng đi đơn duy nhất

giữa mọi cặp đỉnh.

Định lý 1. 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

57

Chứng minh. Trƣớc tiên giả sử T là một cây. Khi đó T là một đồ thị liên thông không có chu trình đơn. Gọi x và y là 2 đỉnh của đồ thị T. Vì T liên thông nên tồn tại đƣờng đi từ x đến y. Mặt khác theo một định lý đã biết thì có một đƣờng đi đơn giữa hai đỉnh này. Đƣờng đi đơn này là duy nhất vì nếu tồn tại một đƣờng đi khác giữa x và y thì có thể chứng minh là giữa x và y có một chu trình. Từ đây có thể chứng minh là có chu trình đơn trong T. Vậy nếu là cây thì giữa hai đỉnh bất kỳ luôn luôn có đƣờng đi duy nhất.

Bây giờ giả sử ngƣợc lại, giữa hai đỉnh bất kỳ của đồ thị T luôn có đƣờng đi đơn duy nhất. Khi đó T liên thông và không thể có chu trình đơn. Giả sử ngƣợc lại là có chu trình đơn. Khi đó gọi x và y là 2 đỉnh bất kỳ của chu trình này thì ta thấy ngay là giữa x và y tồn tại hai đƣờng đi đơn.

Vậy T là đồ thị liên thông không có chủ trình đơn hay T là một cây.

Trong rất nhiều ứng dụng, một đỉnh đặc biệt của cây đƣợc gọi là gốc. Một khi đã định rõ

gốc, ta có thể gán cho mỗi cạnh một hƣớng nhƣ sau:

Vì có đƣờng đi duy nhất từ gốc tới mỗi đỉnh của đồ thị (định lý 1), nên ta định hƣớng mỗi cạnh bằng hƣớng từ gốc đi ra. Nhƣ vậy cây có sinh ra một đồ thị có hƣớng gọi là cây có gốc. Ta có thể chuyển một cây không gốc thành cây có gốc bằng cách chọn một đỉnh bất kỳ làm gốc. Lƣu ý rằng việc chọn gốc khác nhau sẽ tạo ra các cây có gốc khác nhau. Ví dụ hình sau biểu diễn các cây có gốc khác nhau đƣợc tạo ra từ đồ thị T bằng cách chọn a và sau đó c làm gốc. Thƣờng ngƣời ta vẽ cây có gốc cho gốc ở phía trên của đồ thị. Và có thể bỏ mũi tên chỉ hƣớng trên các cạnh vì việc chọn gốc đã xác định hƣớng của các cạnh rồi.

T Với gốc a Với gốc c

Các thuật ngữ đối với cây có nguồn gốc thực vật học hay nguồn gốc phả hệ. Giả sử T là cây có gốc. Nếu v là một đỉnh khác gốc T, khi đó cha của v là đỉnh u duy nhất sao cho có một cạnh có hƣớng từ u đến v. (Độc giả chứng minh có duy nhất một đỉnh nhƣ vậy). Khi đó u đƣợc gọi là cha của v và v là con của u. Các đỉnh có cùng cha đƣợc gọi là anh em. Tổ

tiên của một đỉnh khác với gốc là các đỉnh trên đƣờng đi từ gốc tới đỉnh này (tức là, cha của

nó, ông nó, ... cho tới khi đến gốc). Con cháu của một đỉnh v là các đỉnh có v nhƣ là tổ

tiên. Các đỉnh của cây gọi là lá nếu nó không có con. Các đỉnh có con gọi là đỉnh trong. Gốc là một đỉnh trong trừ khi nó là một đỉnh duy nhất của đồ thị, trong trƣờng hợp đó nó là lá. Nếu a là một đỉnh trong của một cây, thì cây con với gốc a là đồ thị con của cây đang xét, bao gồm a và các con cháu cùng tất cả các cạnh liên thuộc với các con cháu của a.

Cây có gốc và tất cả các đỉnh trong đều có cùng số con có nhiều ứng dụng khác nhau. Cây

nhƣ vậy đƣợc dùng để nghiên cứu bài toán tìm kiếm, sắp xếp và mã hóa.

Định nghĩa 3. Cây có gốc đƣợc gọi là m-phân nếu tất cả các đỉnh trong của nó không có hơn

d g f b e c a d g f b e c a d g f b e c a

m con. Cây đƣợc gọi là m-phân đúng (strict) nếu mọi đỉnh trong của nó có đúng m con. Cây m-phân với m = 2 đƣợc gọi là cây nhị phân.

Cây có gốc đƣợc sắp (hay có thứ tự) là cây có gốc trong đó các con của mỗi đỉnh đƣợ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 thứ tự từ trái qua phải. Trong cây nhị phân có thứ tự, các đỉnh trong có hai

con, con thứ nhất gọi là con bên trái và con thứ hai là con bên phải. Cây có gốc là con bên trái của một đỉnh đƣợc gọi là cây con bên trái, tƣơng tự ta có định nghĩa về cây con bên phải.

8.1.1. Cây như là các mô hình

Cây đƣợc dùng để mô hình hóa các bài toán 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. Chúng ta sẽ mô tả một số mô hình khác nhau có dùng cây.

Ví dụ 5. Đồ thị dùng để biểu diễn một phân tử, trong đó 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. Nhà toán học Anh, Arthur Cayley đã 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 CnH2n+2, có tên là hydrocarbon no.

Ví dụ 6. Biểu diễn các tổ chức. 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 một đrinh khác chỉ ra rằng ngƣời biểu thị bằng đỉnh đầu là chủ (lãnh đạo) của ngƣời biểu thị bằng đỉnh cuối.

Ví du 7. Hệ thống các tập tin trong máy tính có thể đƣợc tổ đƣợc tổ chức thành các thƣ mục.

Một thƣ mục có thể chứa các tập tin và các thƣ mục con. Thƣ mục gốc chứa toàn bộ hệ thống tập tin. Nhƣ vậy hệ các tệp tin có thể biểu diễn bằng cây thƣ mục, trong đó gốc của cây là thƣ mục gốc, các đỉnh trong là các thƣ mục con, và các lá là các tệp tin hay thƣ mục rỗng.

Ví dụ 8. Các bộ xử lý song song kết nối kiểu cây.

Trong ví dụ 13 của tiết 8.2 chúng ta đã mô tả một số mạng liên kết để xử lý song song. Mạng kết nối kiểu cây là một cách quan trọng khác để nối các bộ xử lý với nhau. Đồ thị biểu diễn kiểu mạng nhƣ thế là một cây nhị phân đúng. Các mạng này liên kết n = 2k

-1 bộ xử lý với nhau, trong đó k là một số dƣơng. Bộ xử lý ở vị trí trung gian có 3 liên kết hai chiều - một nối với bộ xử bố và hai đƣợc nối với 2 bộ xử lý con. Bộ xử lý ở gốc chỉ có hai liên kết với 2 con; còn bộ xử lý ở lá chỉ có một liên kết với bố.

Bây giờ ta sẽ minh họa cách dùng mạng kết nối kiểu cây để tính toán song song. Đặc biệt ta chỉ ra cách dùng mạng này để cộng 8 số bằng 3 bƣớc.

Đầu tiên, ta dùng P4 để cộng x1 với x2

đƣợc y1, P5 để cộng x3 với x4 đƣợc y2, P6 để cộng x5 với x6 đƣợc y3, P7 để cộng x7 với x8 đƣợc y4. Bƣớc thứ hai dùng P2 để cộng y1 với y2 đƣợc z1, P2 để cộng y3 với y4 đƣợc z2. Bƣớc thứ ba P1 để cộng z1 với z2 đƣợc tổng chính là x1+x2+ x3+x4+ x5+x6+ x7+x8. Ba bƣớc thật có lợi so với phải dùng bảy bƣớc để cộng liên tiếp 8 số, trong đó mỗi bƣớc cộng một số với tổng các số đã cộng trƣớc đó. p1 p2 p3 p5 p4 p6 p7

59

8.1.2. Những tính chất của cây

Chúng ta thƣờng cần đến các kết quả liên quan tới số đỉnh và số cạnh của các loại cây.

Định lý 2. Cây với n đỉnh có đúng n-1 cạnh.

Chứng minh. Chọn đỉnh r làm gốc của cây. Ta sẽ xây dựng phép tƣơng ứng một-một giữa các cạnh với các đỉnh khác r bằng cách gán đỉnh cuối của một cạnh với chính cạnh này. Vì có n-1 đỉnh khác r nên ta có n-1 cạnh.

Số đỉnh trong cây m-phân đúng với một số xác định các đỉnh trong sẽ đƣợc cho trong định lý sau:

Định lý 3. Cây m-phân đúng với i đỉnh trong sẽ có tất cả n = m.i + 1 đỉnh.

Chứng minh. Mỗi đỉnh trong có đúng m con, và mỗi đỉnh trừ đỉnh gốc đều là con của một đỉnh trong. Do đó nếu không kể đỉnh gốc thì cây có tất cả m.i đỉnh. Tính cả đỉnh gốc thì cây có m.i+1 đỉnh nhƣ khẳng định của định lý.

Giả sử T là cây m-phân đúng. Gọi n là số các đỉnh, i là số các đỉnh trong và l là số lá của cây này. Khi biết một trong các đại lƣợng n, i và l thì hai đại lƣợng kia cũng đƣợc xác định. Chúng ta có định lý sau:

Định lý 3. Cây m-phân đúng với

a) Nếu cây có n đỉnh thì số đỉnh trong là i =

m n1 và số lá là l = m n m 1) 1 (   .

b) Nếu cây có i đỉnh trong thì khi đó số đỉnh là n = m.i + 1 và số lá là l=(m-1)i+1. c) Nếu cây có l lá thì số đỉnh là n = 1 1   m ml và số đỉnh trong là i = 1 1   m l .

Chứng minh. Gọi n là số đỉnh, i là số đỉnh trong và l là số lá. Ba phần của định lý này có thể chứng minh bằng cách dùng đẳng thức trong định lý 3, tức là n = mi+1, cùng với đẳng thức n = l + i, sở dĩ có điều này vì mỗi đỉnh hoặc là lá hoặc là đỉnh trong. Bây giờ chúng ta chứng minh a).

Từ đẳng thức n = mi+1 ta đƣợc i =

m n1

. Thế biểu thức này vào phƣơng trình n = l+i ta có l

= n - i = n - m n1 = m n m 1) 1 (   .

Ví dụ sau minh họa cách dùng định lý 4.

Ví dụ 9. Giả sử ta có trò chơi viết thƣ dây chuyền. Ban đầu có một ngƣời nhận đƣợc một bức

thƣ và giả sử rằng mỗi ngƣời khi nhận đƣợc một bức thƣ hoặc sẽ viết thƣ cho 4 ngƣời khác hoặc không viết thƣ cho ai cả. Hỏi có bao nhiêu ngƣời nhận đƣợc thƣ kể cả ngƣời đầu tiên nếu không có ai nhận đƣợc nhiều hơn một bức thƣ và trò chơi kết thúc khi có 100 ngƣời nhận thƣ mà không viết cho ai cả.

Giải. Trò chơi gửi thƣ này có thể biểu diễn bằng bằng cây tứ phân. Các đỉnh trong ứng với những ngƣời gửi thƣ cho ngƣời khác còn lá là những ngƣời nhận thƣ mà không viết cho ai. Vì có 100 ngƣời không viết thƣ cho ai nên số lá của cây là l =100. Theo phần c) của định lý trên ta có số ngƣời nhận thƣ n = (4.100 - 1)/(4-1) = 133. Số các đỉnh trong là 133-100=33, tức là có 33 ngƣời viết thƣ.

Định nghĩa. Mức của đỉnh v trong cây có gốc là độ dài của đƣờ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.

Độ 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ỳ. 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 h-1. Cây AVL là cây nhị phân sao cho tại mỗi đỉnh chiều cao của cây

con trái và cây con phải khác nhau không quá 1. Cây cân đối nhƣng không phải AVL Vậy cây AVL là trƣờng hợp đặc biệt của cây nhị phân cân đối: cây AVL là cây nhị phân cân đối, nhƣng ngƣợc lại nói chung không đúng.

Cây m-phân hoàn toàn(complete) là cây m-phân đúng trong đó mọi lá ở cùng một mức.

Định lý 5. Có nhiều nhất mh

lá trong cây m-phân độ cao h.

Chứng minh. Ta sẽ chứng minh bằng quy nạp theo chiều cao. Trƣớc tiên xét cây m-phân có chiều cao 1. Cây này có gốc và không quá m con, mỗi con là một lá. Vậy có không quá m1

= m lá trong cây m-phân có chiều cao h = 1.

Bây giờ ta giả sử kết luận là đúng với cây m-phân chiều cao nhỏ hơn h. Giả sử T là cây m- phân cao h. Các lá của T là các lá của các cây con nhận đƣợc từ T bằng cách xóa các cạnh nối từ gốc đến các đỉnh ở mức 1. Mỗi một cây con này có chiều cao không quá h-1. Vì vậy theo giả thiết quy nạp mỗi cây con có nhiều nhất mh-1

lá. Vì có nhiều nhất m cây con nhƣ thế, nên có nhiều nhất là m.mh-1

= mh lá trong cây có gốc T. Đó là điều cần chứng minh.

Hệ quả 1. Nếu cây m-phân có chiều cao h và có l lá, khi đó h logml. Nếu cây m- phân đúng và cân đối, khi đó h = logml. (Nhớ lại là x là số nguyên nhỏ nhất không bé hơn x).

Chứng minh. Từ định lý 5 ta có l  mh . Lấy logarit cơ số m ta đƣợc logml  h. Vì h là số nguyên dƣơng nên hlogml. Bây giờ ta giả sử cây là đúng và cân đối. Vì mỗi lá đều ở mức h hoặc h-1, và vì chiều cao của nó là h, nên có ít nhất một lá ở mức h. Từ đó suy ra phải có

Một phần của tài liệu Bài giảng môn toán rời rạc học phần lý thuyết đồ thị (Trang 55)

Tải bản đầy đủ (PDF)

(92 trang)