Cây bao trùm nhỏ nhất

Với một đồ thị liên thông, vô hướng cho trước, cây bao trùm của nó là một đồ thị con có dạng cây và có tất cả các đỉnh liên thông với nhau. Một đồ thị có thể có nhiều cây bao phủ khác nhau. Chúng ta cũng có thể gán một *trọng số* cho mỗi cạnh, là con số biểu thị sự "không ưa thích" và dùng nó để tính toán trọng số của một cây bao trùm bằng cách cộng tất cả trọng số của cạnh trong cây bao trùm đó. Khi đó, một **cây bao trùm nhỏ nhất** là một cây bao trùm có trọng số bé hơn bằng trọng số của tất cả các cây bao trùm khác. Tổng quát hơn, bất kỳ một đồ thị vô hướng (không nhất thiết liên thông) đều có một **rừng bao phủ nhỏ nhất**, là hội của các cây bao trùm nhỏ nhất của các thành phần liên thông của nó.

Ví dụ như một hãng TV truyền hình cáp muốn nối cáp đến một khu dân cư mới. Nếu bị ràng buộc chỉ được chôn cáp ở một số tuyến đường nhất định, ta sẽ có thể hình thành được một đồ thị biểu diễn các điểm kết nối với nhau theo các tuyến đường đó. Một số tuyến có chi phí cao hơn, vì chúng dài hơn, hoặc cáp phải được chôn sâu hơn; những con đường này sẽ được thể hiện bằng những cạnh có trọng số lớn hơn. Một *cây bao trùm* của đồ thị sẽ là một tập con các con đường như vậy sao cho nó không được tạo thành vòng (chu trình) mà vẫn phải nối được đến tất cả các nhà. Sẽ có thể có vài cây bao trùm như vậy. Một *cây bao trùm nhỏ nhất* sẽ là cây bao trùm có tổng chi phí thấp nhất.

## Tính chất
### Có thể có vô số

*Có thể có một vài cây bao trùm nhỏ nhất có cùng trọng số và có số cạnh nhỏ nhất*; cụ thể hơn, nếu tất cả các cạnh của một đồ thị đều có trọng số bằng nhau, thì tất cả các cây bao trùm của đồ thị đó đều là nhỏ nhất.

### Tính duy nhất
*Nếu mỗi cạnh có trọng số riêng biệt thì sẽ chỉ có một, và chỉ một cây bao trùm nhỏ nhất.* Có thể chứng minh phát biểu này bằng quy nạp hoặc phản chứng. Điều này đúng trong nhiều trường hợp thực tế, như ví dụ về công ty truyền hình cáp ở trên chẳng hạn, khi đó rất hiếm khi hai con đường lại có *chính xác* cùng một chi phí. Phát biểu này cũng được tổng quát hóa cho rừng bao trùm.

### Đồ thị có chi phí nhỏ nhất
Nếu trọng số là *số dương*, thì một cây bao trùm nhỏ nhất cũng chính là đồ thị con có chi phí nhỏ nhất kết nối tất cả đỉnh, vì các đồ thị con có chứa chu trình bao giờ cũng có tổng trọng số lớn hơn.

### Tính chất vòng
*Với một chu trình *C* bất kỳ trong đồ thị, nếu trọng số của cạnh *e* nào đó của *C* lớn hơn trọng số của các cạnh còn lại của *C*, thì cạnh đó không thể thuộc về cây bao trùm nhỏ nhất.* Giả sử điều ngược lại, nếu *e* thuộc về cây bao trùm nhỏ nhất T1, khi chúng ta xóa *e*, nó sẽ phân T1 ra làm hai cây con mà hai đầu của *e* thuộc về hai cây con khác nhau. Các cạnh còn lại của *C* sẽ gắn hai cây con này lại với nhau, do đó sẽ tồn tại một cạnh *f* thuộc *C* có hai đầu nằm trên hai cây con này, tức là nó sẽ kết nối hai cây con này lại một cây T2 có trọng số nhỏ hơn T1, vì trọng số của *f* nhỏ hơn trọng số của *e*.

### Tính chất cắt

*Với [[nhát cắt (lý thuyết đồ thị)|nhát cắt]] *C* bất kỳ trong đồ thị, nếu trọng số của một cạnh *e* của *C* nhỏ hơn trọng số của các cạnh còn lại của *C*, thì cạnh này thuộc về tất cả các cây bao trùm nhỏ nhất của đồ thị.* Thực vậy, giả sử điều ngược lại, cạnh BC (có trọng số là 6) thuộc về cây bao trùm nhỏ nhất T thay vì cạnh e (trọng số 4) trong hình bên trái. Khi đó thêm e vào T sẽ tạo thành một chu trình, còn thay BC bằng e sẽ tạo ra một cây bao trùm nhỏ nhất có trọng số nhỏ hơn.

### Cạnh có chi phí nhỏ nhất
Nếu một cạnh của đồ thị với chi phí nhỏ nhất *e* là duy nhất, thì cạnh này sẽ thuộc về bất kỳ một cây bao trùm nhỏ nhất nào. Thật vậy, nếu *e* không nằm trong cây bao trùm nhỏ nhất, xóa một cạnh (có chi phí lớn hơn) trong chu trình tạo ra sau khi thêm *e* vào cây, sẽ tạo ra cây bao trùm có trọng số nhỏ hơn.

## Giải thuật
Giải thuật đầu tiên để tìm cây bao trùm nhỏ nhất do nhà khoa học người Séc Otakar Borůvka nghĩ ra vào năm 1926 (xem Giải thuật của Borůvka). Mục đích của ông là nghĩ ra cách phủ mạng điện hiệu quả tại Moravia. Hiện nay có hai giải thuật thường được sử dụng: Giải thuật của Prim và Giải thuật của Kruskal. Cả ba giải thuật này đều thuộc dạng giải thuật tham lam chạy với thời gian đa thức, vì vậy bài toán tìm cây bao trùm nhỏ nhất là dạng **[[FP (độ phức tạp)|FP]]**, và các bài toán ra quyết định liên quan như xác định xem một cạnh cụ thể có thuộc MST hay không hoặc xác định xem tổng trọng số tối thiểu có vượt quá một giá trị nào đó hay không, là thuộc dạng **[[P (độ phức tạp)|P]]**. Một giải thuật tham lam khác không được phổ biến bằng đó là giải thuật ngược-xóa, là dạng đảo ngược của giải thuật của Kruskal.

Nếu trọng số của cạnh là số nguyên, thì giải thuật các đơn định giải được bài toán với *O*(*m*&nbsp;+&nbsp;*n*) phép tính nguyên. Một mô hình khác, trong đó chỉ cho phép các phép tính trên trọng số của cạnh là so sánh đôi một,  đã tìm ra một giải thuật ngẫu nhiên hóa có thời gian tuyến tính dựa trên sự phối hợp giải thuật Borůvka và giải thuật ngược-xóa. Tuy vậy, việc bài toán có thể được giải một cách đơn định trong thời gian tuyến tính bằng một giải thuật so sánh hay không vẫn còn là một câu hỏi mở. Giải thuật so sánh không ngẫu nhiên nhanh nhất, do Bernard Chazelle nghĩ ra, dựa trên đống mềm (soft heap),
một dạng hàng đợi có ưu tiên xấp xỉ.
Thời gian chạy của nó là *[[Ký hiệu O lớn|O]]*(*m*&nbsp;α(*m*,*n*)), trong đó *m* là số cạnh, *n* là số đỉnh và α là hàm đảo cổ điển của Hàm số Ackermann. Hàm α tăng cực chậm, vì vậy khi áp dụng vào thực tế người ta thường cho nó là một hằng số không lớn hơn 4; vì thế giải thuật của Chazelle đạt rất gần đến thời gian tuyến tính. Seth Pettie và Vijaya Ramachandran đã tìm thấy giải thuật tìm cây bao trùm nhỏ nhất dựa trên phép so sánh đơn định có thể chứng minh được là tối ưu, tuy vậy độ phức tạp tính toán của nó hiện vẫn chưa biết.

Những nhà nghiên cứu cũng xem xét các giải thuật song song cho bài toán cây bao trùm nhỏ nhất.
Với một số bộ xử lý tuyến tính, ta có thể giải bài toán trong thời gian O(\log n).
 mô tả một giải thuật có thể tính MST trên 8 bộ xử lý nhanh gấp 5 lần so với giải thuật tuần tự đã tối ưu hóa. Thông thường, giải thuật tuần tự được dựa trên giải thuật Borůvka—Prim và đặc biệt, giải thuật của Kruskal không tốt hơn được như vậy khi có thêm bộ xử lý.

Các giải thuật chuyên biệt khác đã được thiết kế để tính cây bao trùm nhỏ nhất của một đồ thị lớn đến phải luôn lưu trữ nó trong đĩa. Các giải thuật *bộ lưu trữ gắn ngoài* này, như một ví dụ mô tả trong "Engineering an External Memory Minimum Spanning Tree Algorithm" của Roman Dementiev và đồng nghiệp, có thể chạy chỉ chậm hơn có 2 đến 5 lần so với giải thuật với bộ nhớ cổ điển; họ cho rằng "các bài toán cây bao trùm nhỏ nhất cực kỳ lớn chứa trong vài đĩa cứng có thể được giải trên một máy PC chỉ trong một đêm". Họ dựa trên giải thuật sắp xếp hiệu quả trên bộ lưu trữ gắn ngoài và các kỹ thuật thu nhỏ đồ thị để giảm kích thước đồ thị một cách hiệu quả.

Bài toán này còn được tiếp cận theo cách phân bố. Nếu mỗi nút được xem là một máy tính và các nút không biết gì hết ngoài các liên kết mà nó liên kết, người ta vẫn có thể tính được cây bao trùm tối tiểu phân bố.

## Cây bao trùm nhỏ nhất trên đồ thị đầy đủ ngẫu nhiên
Alan M. Frieze đã chứng minh rằng với một đồ thị đầy đủ có *n* đỉnh, với trọng số của các cạnh là biến độc lập, phân bố ngẫu nhiên đồng nhất với hàm phân bố F thỏa mãn F'(0) > 0, thì khi *n* tiến tới +∞ trọng số kỳ vọng của MST tiến tới \zeta(3)/F'(0), trong đó \zeta là Hàm số zeta Riemann.
Với giả thuyết bổ sung là phương sai hữu hạn, Alan M. Frieze cũng chứng minh tính hội tụ trong xác suất. Về sau, J. Michael Steele đã chứng minh rằng giả thuyết về phương sai có thể được bỏ đi.

Trong một công trình sau đó, Svante Janson đã chứng minh định lý giới hạn trung tâm đối với trọng số của MST.

Với trọng số ngẫu nhiên đồng nhất trong khoảng [0,1], kích thước kỳ vọng chính xác của cây bao trùm nhỏ nhất đã được tính cho các đồ thị đầy đủ nhỏ.

## Các bài toán liên quan
Một bài toán liên quan là cây bao trùm nhỏ nhất ''k'' (*k*-MST), là cây bao trùm một tập con gồm *k* đỉnh trong đồ thị với trọng số nhỏ nhất.

Tập hợp *k* *cây bao trùm nhỏ nhất* là một tập hợp gồm *k* cây bao trùm sao cho không có cây bao trùm nào bên ngoài tập có trọng số nhỏ hơn. (Chú ý là bài toán này không liên quan đến bài toán *cây bao trùm nhỏ nhất k*).

Cây bao trùm nhỏ nhất trong không gian Euclide là cây bao trùm nhỏ nhất của đồ thị mà trọng số là khoảng cách giữa các điểm trong không gian Euclide.

Cây bao trùm nhỏ nhất trong tọa độ thẳng là cây bao trùm nhỏ nhất của đồ thị mà trọng số là khoảng cách thẳng (khoảng cách \ell_1) giữa các điểm trong không gian.

Trong tính toán phân tán, khi mà mỗi đỉnh tương ứng với một máy tính chỉ biết đến những liên kết của chính nó, ta có thể xem xét bài toán tìm cây bao trùm nhỏ nhất một cách phân tán. Định nghĩa về mặt toán học của bài toán không thay đổi nhưng lời giải phải thay đổi cho phù hợp với mô hình tính toán phân tán.

Cây bao trùm nhỏ nhất với khả năng thông qua là cây với một đỉnh được đánh dấu *nguồn* và mỗi cây con nối với đỉnh nguồn có không quá *c* nút. *c* được gọi là khả năng thông qua của cây.

Cây bao trùm với giới hạn bậc là cây bao trùm nhỏ nhất thỏa mãn điều kiện mỗi đỉnh được nối với không quá *d* đỉnh khác, với một số *d* cho trước. Trường hợp *d=2* là một biến thể của bài toán người bán hàng và nó cũng là NP-khó. Vì vậy trong trường hợp tổng quát, cây bao trùm nhỏ nhất với giới hạn bậc là NP-khó.

Trong đồ thị có hướng, bài toán cây bao trùm nhỏ nhất có gốc có thể giải trong thời gian bậc hai bằng thuật toán Chu-Liu/Edmonds.

**Cây bao trùm lớn nhất** là cây bao trùm có tổng trọng số lớn hơn hoặc bằng tổng trọng số bất kì cây bao trùm nào. Bài toán này có thể được giải bằng cách nhân các trọng số với -1 và giải bài toán cây bao trùm nhỏ nhất trên đồ thị mới. Đường đi trên cây bao trùm lớn nhất chính là đường đi rộng nhất giữa hai đầu đường đi: trong tất cả các đường đi giữa hai đỉnh này, nó là đường đi có trọng số nhỏ nhất trên đường là lớn nhất.

Bài toán **MST động** yêu cầu xử lý các thao tác thay đổi cạnh hoặc đỉnh của đồ thị và có thể nhanh chóng tính cây bao trùm nhỏ nhất tại mọi thời điểm.

## Tham khảo