✨Thuật toán Kruskal

Thuật toán Kruskal

Thuật toán Kruskal là một thuật toán trong lý thuyết đồ thị để tìm cây bao trùm nhỏ nhất của một đồ thị liên thông vô hướng có trọng số. Nói cách khác, nó tìm một tập hợp các cạnh tạo thành một cây chứa tất cả các đỉnh của đồ thị và có tổng trọng số các cạnh là nhỏ nhất.Thuật toán Kruskal là một ví dụ của thuật toán tham lam.

Thuật toán này xuất bản lần đầu tiên năm 1956, bởi Joseph Kruskal.

Một vài thuật toán khác cho bài toán này bao gồm thuật toán Prim, thuật toán xóa ngược, và thuật toán Borůvka.

Bài toán dẫn nhập

Cho một đồ thị có trọng số với n đỉnh. Yêu cầu tìm ra cây khung nhỏ nhất.

Tư tưởng thuật toán

Thuật toán Kruskal dựa trên mô hình xây dựng cây khung nhỏ nhất bằng thuật toán hợp nhất. Thuật toán không xét các cạnh với thứ tự tuỳ ý. Thuật toán xét các cạnh theo thứ tự đã sắp xếp theo trọng số.

Để xây dựng tập n-1 cạnh của cây khung nhỏ nhất - tạm gọi là tập K, Kruskal đề nghị cách kết nạp lần lượt các cạnh vào tập đó theo nguyên tắc như sau: Ưu tiên các cạnh có trọng số nhỏ hơn. Kết nạp cạnh khi nó không tạo chu trình với tập cạnh đã kết nạp trước đó. Đó là một nguyên tắc chính xác và đúng đắn, đảm bảo tập K nếu thu đủ n - 1 cạnh sẽ là cây khung nhỏ nhất.

Mô tả thuật toán

Giả sử ta cần tìm cây bao trùm nhỏ nhất của đồ thị G. Thuật toán bao gồm các bước sau.

  • Khởi tạo rừng F (tập hợp các cây), trong đó mỗi đỉnh của G tạo thành một cây riêng biệt
  • Khởi tạo tập S chứa tất cả các cạnh của G
  • Chừng nào S còn khác rỗng và F gồm hơn một cây Xóa cạnh nhỏ nhất trong S Nếu cạnh đó nối hai cây khác nhau trong F, thì thêm nó vào F và hợp hai cây kề với nó làm một ** Nếu không thì loại bỏ cạnh đó. Khi thuật toán kết thúc, rừng chỉ gồm đúng một cây và đó là một cây bao trùm nhỏ nhất của đồ thị G.

Mã giả

Cho đồ thị G=(X, E).

Bước 1: Sắp xếp các cạnh của đồ thị theo thứ tự trọng số tăng dần. Bước 2: Khởi tạo T:= Ø Bước 3: Lần lượt lấy từng cạnh thuộc danh sách đã sắp xếp. Nếu T+{e} không chứa chu trình thì gán T:=T+{e}. Bước 4: Nếu T đủ n-1 phần tử thì dừng, ngược lại làm tiếp bước 3.

Kỹ thuật đánh nhãn đỉnh

Kỹ thuật đánh nhãn đỉnh Trong thuật toán Kruskal, để kiểm tra xem T + {e} có chứa chu trình hay không ta có thể dùng kỹ thuật gắn nhãn đỉnh, kỹ thuật này khá đơn giản và hiệu quả. *Ngay sau bước 1 của thuật toán, ta gắn đỉnh i của đồ thị một nhãn là i *Trong bước 2: Nếu hai đầu cạnh e có cùng nhãn (tức là nhãn của e.v1 và nhãn của e.v2 bằng nhau) thì T+{e} tạo chu trình, ta không đưa e vào T. *Ngược lại [nếu Label(e.v1)!= Label(e.v2) ] thì ta đưa e vào T và thực hiện công việc ghép nhãn bằng cách: lab1 = Min(Label(e.v1), Label (e.v2)) lab2 = Max(Label(e.v1), Label (e.v2)) Sửa nhãn của tất cả các đỉnh nào có nhãn là lab2 thành nhãn lab1

👁️ 0 | 🔗 | 💖 | ✨ | 🌍 | ⌚
**Thuật toán Kruskal** là một thuật toán trong lý thuyết đồ thị để tìm cây bao trùm nhỏ nhất của một đồ thị liên thông vô hướng có trọng số. Nói cách khác, nó tìm
Bài viết này là **danh sách các thuật toán** cùng một mô tả ngắn cho mỗi thuật toán. ## Thuật toán tổ hợp ### Thuật toán tổ hợp tổng quát * Thuật toán Brent: tìm
**Thuật toán Borůvka** là một thuật toán để tìm cây bao trùm nhỏ nhất trên đồ thị. Thuật toán này được xuất bản lần đầu năm 1926 bởi Otakar Borůvka dưới dạng một phương pháp
Trong khoa học máy tính, **thuật toán Prim** là một thuật toán tham lam để tìm cây bao trùm nhỏ nhất của một đồ thị vô hướng có trọng số liên thông. Nghĩa là nó
**Giải thuật tham lam** (tiếng Anh: _Greedy algorithm_) là một thuật toán giải quyết một bài toán theo kiểu metaheuristic để tìm kiếm lựa chọn tối ưu địa phương ở mỗi bước đi với hy
**Bài toán cây Steiner** hay bài toán tìm đường đi ngắn nhất từ 2 điểm cho trước được phát triển dựa trên bài toán Fermat của nhà toán học nổi tiếng người Pháp. Vào thế
Trong ngành khoa học máy tính, một **giải thuật tìm kiếm** là một thuật toán lấy đầu vào là một bài toán và trả về kết quả là một lời giải cho bài toán đó,
nhỏ|phải|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ị** (tiếng Anh: _graph theory_) nghiên cứu các tính chất của đồ thị. Một cách
nhỏ|Một cây bao trùm (các cạnh màu xanh) của một đồ thị lưới nhỏ|Ba ví dụ trên biểu đồ lưới 8x8 **Cây bao trùm** (tiếng Anh: _spanning tree_), còn được gọi là **cây khung**, của
Đây là **danh sách các nhà toán học người Do Thái**, bao gồm các nhà toán học và các nhà thống kê học, những người đang hoặc đã từng là người Do Thái hoặc có
phải|Cây bao trùm nhỏ nhất của một [[đồ thị phẳng. Mỗi cạnh có ghi kèm trọng số, cụ thể trong hình này là tỷ lệ với chiều dài.]] Với một đồ thị liên thông, vô
phải|khung|Một cây có dán nhãn với 6 đỉnh và 5 cạnh **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. Cây là một đồ thị mà
[[Hình:Hypergraph-wikipedia.svg|right|frame| Một ví dụ về siêu đồ thị, với X = \{v_1, v_2, v_3, v_4, v_5, v_6, v_7\}E = \{e_1,e_2,e_3,e_4\} = \{\{v_1, v_2, v_3\}, \{v_2,v_3\}, \{v_3,v_5,v_6\}, \{v_4\}\}. ]] Trong toán học,một **siêu
**Số Graham** (tiếng Anh: **Graham's Number**) là một con số khổng lồ phát sinh như giới hạn trên cho câu trả lời của một vấn đề trong lĩnh vực toán học của lý thuyết Ramsey.
**Huân chương Khoa học Quốc gia** của Hoa Kỳ là một danh dự do Tổng thống Hoa Kỳ trao tặng cho các cá nhân là công dân Hoa Kỳ hoặc đã định cư lâu năm
[[Đĩa bồi tụ bao quanh lỗ đen siêu khối lượng ở trung tâm của thiên hà elip khổng lồ Messier 87 trong chòm sao Xử Nữ. Khối lượng của nó khoảng 7 tỉ lần khối