
Dẫn nhập
Trong bài học trước, họ đã cùng nhau đi tìm kiếm hiểu thuật toán thứ nhất để hoàn toàn có thể tìm cây khung bao gồm trọng số bé dại nhất. Trong bài học ngày hôm nay, bọn họ sẽ xem thêm một thuật toán nữa để hoàn toàn có thể tìm cây khung gồm trọng số bé dại nhất.
Bạn đang xem: Thuật toán kruskal tìm cây khung nhỏ nhất
Nội dung
Để có thể tiếp thu bài học kinh nghiệm này một cách giỏi nhất, các bạn nên gồm những kỹ năng và kiến thức cơ bạn dạng về:
Trong bài học ngày hôm nay, họ sẽ thuộc nhau tìm hiểu về:
Thuật toán KruskalBài toán đặt ra
Ta đang xem lại câu hỏi mà bài học kinh nghiệm trước bọn họ đã để ra:
Một non sông có






Input:
Dòng 1: 2 số nguyên dương





Output:
Một số nguyên duy nhất là chi tiêu để xây dựng những tuyến đường làm thế nào để cho từ một thành phố hoàn toàn có thể di chuyển đến toàn bộ các tp khácVí dụ:
Input | Output |
5 7 1 2 3 2 4 7 3 5 6 4 5 4 2 5 3 1 3 2 2 3 4 | 12 |
Giải đam mê ví dụ:
Đây là hình ảnh minh hoạ mang đến ví dụ sinh hoạt trên với các con đường rất có thể xây dựng

Đây là các con con đường được chắt lọc (màu cam)

Thuật toán Kruskal
Ý tưởng
Ý tưởng căn nguyên của thuật toán Kruskal khá solo giản: ước ao tổng trọng số của cây khung nhưng mà ta chọn nhỏ tuổi nhất thì trọng số của những cạnh mà ta lựa chọn phải bé dại nhất tất cả thể. Vì chưng đó, lúc chọn những cạnh vào cây form ta đã ưu tiên các cạnh có trọng số nhỏ dại trước.
Hãy thử ý tưởng phát minh trên với thiết bị thị dưới đây:
Theo như ý tưởng của ta ở trên, ta vẫn ưu tiên chọn những cạnh gồm trọng số bé dại trước. Vị đó, ta sẽ chọn cạnh nối đỉnh 1 với đỉnh 2 vào cây khung.Tiếp theo, ta sẽ chọn cạnh nối đỉnh 2 với đỉnh 3 vào cây khung. Khi nay, những đỉnh 1, đỉnh 2 với đỉnh 3 liên thôngTheo suôn sẻ tưởng trên, ta sẽ liên tiếp chọn cạnh nối đỉnh 2 cùng đỉnh 3 vào cây khung. Tuy nhiên, ta phân biệt rằng đỉnh 2 cùng đỉnh 3 bây giờ đã liên thông. Vì chưng đó, việc chọn lựa thêm cạnh này vào cây form là vô nghĩa.
Từ thừa nhận xét trên, ta thấy khi lựa chọn cạnh nối sẽ đề nghị kiểm tra xem nhị đỉnh được nối đã liên thông chưa. Vậy thì làm sao để khám nghiệm được điều này? Đây đó là lúc mà ta áp dụng đến cấu trúcDisjoint set Union mà tôi đã giới thiệu
Cách mua đặt
Để bao gồm thể thiết lập thuật toán Kruskal, ta sẽ cần một cấu trúcEdge để lưu trữ những cạnh cùng với 3 biến:
u, v: nhị đỉnh của cạnhw: trọng số của cạnhThuật toán ra mắt như sau:
Khởi chế tạo Disjoint set UnionSắp xếp các cạnh theo trọng số tăng đột biến Lần lượt xét các cạnh theo đồ vật tự đã sắp xếpNếu như cạnh đó nối hai đỉnh sẽ liên thông thì ta bỏ qua.Nếu như hai đỉnh đó không liên thông thì ta vẫn thêm trọng số cạnh đó vào tác dụng và dùngDisjoint set Union nhằm hợp duy nhất hai tập đựng hai đỉnh
Khi đang xét toàn bộ các cạnh thì đã thu được trọng số của cây khung bao gồm trọng số nhỏ dại nhất
Code
#includeusing namespace std;typedef long long ll;const int Max
N = 1 + 1e5;class Edge { public: int u, v, w; Edge(int _u = 0, int _v = 0, int _w = 0) : u(_u), v(_v), w(_w) bool operator edges;void make_set(int u) parent = u;int find_set(int u) if(u == parent) return u; return parent = find_set(parent);int main() freopen("CTDL.inp","r",stdin); freopen("CTDL.out","w",stdout); cin >> n >> m; for(int i = 0 ; i > u >> v >> w; edges.push_back(Edge(u, v, w)); for(int i = 1 ; i Độ phức tạp
Ta thấy giá cả lớn độc nhất vô nhị của thuật toán trên nằm tại vị trí khâu sắp tới xếp những cạnh và gồm độ phức tạp là
Kết luận
Qua bài này họ đã vắt về Tìm tìm cây khung nhỏ dại nhấtvới thuật toán Kruskal
Bài sau họ sẽ tò mò về Tính diện tích s tam giác -Phần 1
Cảm ơn chúng ta đã theo dõi bài bác viết. Hãy nhằm lại phản hồi hoặc góp ý của chính mình để vạc triển bài viết tốt hơn. Đừng quên “Luyện tập – thử thách – không lo khó”.
Thảo luận
Nếu chúng ta có ngẫu nhiên khó khăn hay vướng mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên tủ sách Howkteam.com để cảm nhận sự cung cấp từ cộng đồng.
Lớp 1Tài liệu Giáo viên
Lớp 2Lớp 2 - liên kết tri thức
Lớp 2 - Chân trời sáng tạo
Lớp 2 - Cánh diều
Tài liệu Giáo viên
Lớp 3Lớp 3 - liên kết tri thức
Lớp 3 - Chân trời sáng tạo
Lớp 3 - Cánh diều
Tài liệu Giáo viên
Lớp 4Sách giáo khoa
Sách/Vở bài bác tập
Tài liệu Giáo viên
Lớp 5Sách giáo khoa
Sách/Vở bài tập
Tài liệu Giáo viên
Lớp 6Lớp 6 - kết nối tri thức
Lớp 6 - Chân trời sáng sủa tạo
Lớp 6 - Cánh diều
Sách/Vở bài tập
Tài liệu Giáo viên
Lớp 7Lớp 7 - kết nối tri thức
Lớp 7 - Chân trời sáng tạo
Lớp 7 - Cánh diều
Sách/Vở bài tập
Tài liệu Giáo viên
Lớp 8Sách giáo khoa
Sách/Vở bài xích tập
Tài liệu Giáo viên
Lớp 9Sách giáo khoa
Sách/Vở bài bác tập
Tài liệu Giáo viên
Lớp 10Lớp 10 - kết nối tri thức
Lớp 10 - Chân trời sáng sủa tạo
Lớp 10 - Cánh diều
Sách/Vở bài bác tập
Tài liệu Giáo viên
Lớp 11Sách giáo khoa
Sách/Vở bài xích tập
Tài liệu Giáo viên
Lớp 12Sách giáo khoa
Sách/Vở bài xích tập
Tài liệu Giáo viên
gia sưLớp 1
Lớp 2
Lớp 3
Lớp 4
Lớp 5
Lớp 6
Lớp 7
Lớp 8
Lớp 9
Lớp 10
Lớp 11
Lớp 12

Cấu trúc tài liệu và giải thuật
Một số định nghĩa về Giải thuật kết cấu dữ liệu mảng (Array)Danh sách links - Linked Lists
Ngăn xếp & Hàng đợi
Một số giải thuật tìm kiếm
Một số lời giải sắp xếp
Cấu trúc tài liệu đồ thị (Graph)Cấu trúc tài liệu cây
Đệ qui (Recursion)Tài liệu xem thêm
Giải thuật Kruskal: search cây khung nhỏ tuổi nhất
Trang trước
Trang sau
Giải thuật Kruskal là gì ?
Giải thuật của Kruskal là kiếm tìm cây khung nhỏ dại nhất dựa trên giải mã tham lam. Giải mã Kruskal xem đồ gia dụng thị như là 1 rừng cây với mỗi nút là 1 trong những cây chưa có người yêu trong rừng. Giải thuật Kruskal không phụ thuộc vào vào điểm bắt đầu. Một cây kết nối với cây khác nếu và chỉ nếu cây này có trọng số (weight - vào chương trước) nhỏ nhất trong số tất cả các cây đã kiếm được và không vi phạm các điểm lưu ý của Cây khung nhỏ tuổi nhất (MST) – trong chương trước.
Để hiểu giải thuật Kruskal, mời chúng ta theo dõi ví dụ như sau:

Bước 1: Xóa toàn bộ các vòng và những cạnh tuy vậy song
Xóa toàn bộ các vòng và những cạnh tuy vậy song trường đoản cú độ thị ban đầu.

Trong ngôi trường hợp những cạnh tuy nhiên song, giữ những cạnh tất cả trọng số nhỏ nhất và xóa cạnh còn lại.

Bước 2: chuẩn bị xếp tất cả các cạnh theo trọng số tăng nhiều
Bước tiếp sau là sinh sản một tập những cạnh cùng trọng số và sắp xếp chúng theo máy tự tăng dần đều về trọng số. (Giá trị trọng số là số hiển thị ở bên cạnh các cạnh vào hình minh họa trên.)

Bước 3: thêm 1 cạnh có trọng số tốt nhất
Bây giờ bọn chúng ta bắt đầu thêm những cạnh vào vật thị ban đầu từ cạnh tất cả trọng số rẻ nhất. Tại bất kể thời điểm nào, chúng ta cũng bắt buộc kiểm tra những thuộc tính của cây khung bao gồm còn được bảo trì hay không. Trong trường thích hợp khi thêm một cạnh nhưng làm phá vỡ thuộc tính của cây khung, thì bọn họ cần để ý đến việc ko thêm cạnh đó vào thứ thị.

Trọng số nhỏ nhất vào hình là 2 cùng đó là các cạnh là BD với DT, vị đó bọn họ thêm nhị cạnh này vào. Việc thêm nhì cạnh này không vi phạm luật các điểm sáng của cây khung do đó chúng ta có thể tiếp tục chọn lọc cạnh tiếp theo.
Trọng số tiếp theo sau là 3 với đó là các cạnh AC và CD. Bởi vì đó bọn họ thêm nhì cạnh này.

Trọng số tiếp theo sau trong hình là 4 và bọn họ thấy rằng khi thêm nó vào đồ thị sẽ khiến cho một quy trình trong đồ thị. Như hình minh họa:

Do đó họ bỏ qua trọng số này. Tiến trình của họ sẽ vứt qua/tránh vấn đề thêm các cạnh nhưng mà khi thêm cạnh đó vào sẽ tạo cho một chu trình trong trang bị thị.

Tiếp theo với nhị trọng số 5 và 6, chúng ta cũng thấy rằng chúng cũng khiến cho một chu trình. Vì đó họ bỏ qua nhì trọng số này và gửi tới trọng số tiếp theo.

Bây giờ đồ thị của bọn họ chỉ còn một nút nhằm thêm vào. Thân hai cạnh có trọng chu kỳ lượt là 7 cùng 8, họ thêm cạnh tất cả trọng số nhỏ hơn.

Bằng việc thêm cạnh SA, chúng ta đã có một cây khung nhỏ dại nhất theo giải thuật của Kruskal.
Đã có tiện ích Viet
Jack trên năng lượng điện thoại, giải bài tập SGK, SBT biên soạn văn, Văn mẫu, Thi online, bài xích giảng....miễn phí. Download ngay ứng dụng trên app android và i
OS.
Xem thêm: Top 10 Cách Khiêu Khích Đàn Ông Cực Thích, 6 Cách Khiêu Khích Chàng Dễ Ợt, Đàn Ông Cực Thích


Follow fanpage facebook của team https://www.facebook.com/hra.edu.vnteam/ hoặc facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.hra.edu.vn để thường xuyên theo dõi những loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... Mới nhất của chúng tôi.