DISJOINT-SET (CẤU TRÚC DỮ LIỆU)
Diễn đàn 50TH2 - Thỏa sức đam mê với cộng đồng 50TH2 ĐH Nha Trang! :: ஐ♥ღ- HỌC TẬP -ஐ♥ღ :: •°o.O NGÔN NGỮ LẬP TRÌNH O.o°• :: C/C++ :: Algorithm & Online_Judge
Trang 1 trong tổng số 1 trang
DISJOINT-SET (CẤU TRÚC DỮ LIỆU)
Một cấu trúc dữ liệu rất hữu dụng trong lý thuyết đồ thị ,cũng như các bài tập trong OLP và các "constest online", đó là DISJOINT-SET.
Link tham khảo thêm: http://en.wikipedia.org/wiki/Disjoint_sets
Các bạn có thể tham khảo link trên và dùng Google search thêm, Mình chỉ nói đơn giản như sau :
Các phép toán trong DISJOINT-SET:
- Create(x) - Khỏi tạo cây có gốc là x
- Find(x) - Tìm gốc của nút x
- Union(x,y) - Hợp cây chứa nút x và cây chứa nút y.
Đề cài đặt có hiệu quả, chúng ta có hai heusrictics: Union by rank và Path Compress.
Sau đây mình chỉ nói về Union by rank.
Để tránh suy biến thì ta có quy tắc hợp hai cây như sau, cây nào mà nút gốc có rank lớn hơn thì sẽ là nút gốc của cây kia.
Các phép toán được cài đặt chi tiết như sau:
Bài toán vận dụng:
Trong một hội nghị cấp cao, Người A quen với B, B quen với C thì A cũng sẽ quen với C. Như vậy sau hội nghị người i, có quen người j không?
Link tham khảo thêm: http://en.wikipedia.org/wiki/Disjoint_sets
Các bạn có thể tham khảo link trên và dùng Google search thêm, Mình chỉ nói đơn giản như sau :
Các phép toán trong DISJOINT-SET:
- Create(x) - Khỏi tạo cây có gốc là x
- Find(x) - Tìm gốc của nút x
- Union(x,y) - Hợp cây chứa nút x và cây chứa nút y.
Đề cài đặt có hiệu quả, chúng ta có hai heusrictics: Union by rank và Path Compress.
Sau đây mình chỉ nói về Union by rank.
Để tránh suy biến thì ta có quy tắc hợp hai cây như sau, cây nào mà nút gốc có rank lớn hơn thì sẽ là nút gốc của cây kia.
Các phép toán được cài đặt chi tiết như sau:
- Code:
void Create(int x)
{
rank[x]=0;
P[x]=x;
}
int Find(int x)
{
if(x==P[x]) return x;
return Find(P[x]);
}
void Union(int x,int y)
{
int px=Find(x);
int py=Find(y);
if(rank[px]>rank[py]) P[py]=px;
else P[px]=py;
if(rank[px]==rank[py]) rank[py]++;
}
Bài toán vận dụng:
Trong một hội nghị cấp cao, Người A quen với B, B quen với C thì A cũng sẽ quen với C. Như vậy sau hội nghị người i, có quen người j không?
ductam- Thành viên cấp 2
- Tổng số bài gửi : 11
Ngày tham gia : 18/07/2010
Diễn đàn 50TH2 - Thỏa sức đam mê với cộng đồng 50TH2 ĐH Nha Trang! :: ஐ♥ღ- HỌC TẬP -ஐ♥ღ :: •°o.O NGÔN NGỮ LẬP TRÌNH O.o°• :: C/C++ :: Algorithm & Online_Judge
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|
Fri Nov 11, 2011 9:22 pm by ngoctu25
» xin DataBase cho webdatabase
Tue May 10, 2011 12:21 pm by thang50th.dhnt
» Chatbox
Fri Apr 01, 2011 9:11 pm by Admin
» Phần mềm XML Write 2.7
Wed Mar 02, 2011 5:55 pm by Admin
» Lịch bảo vệ môn ĐỒ ÁN TRÍ TUỆ NHÂN TẠO
Wed Mar 02, 2011 12:22 pm by Admin
» Slide Datamining - Chương 3
Tue Mar 01, 2011 9:01 am by Admin