Giáo trình Cấu trúc dữ liệu và giải thuật: Phần 2 - ThS. Nguyễn Thị Hương tài liệu, giáo án, bài giảng , luận văn, luận...
Chương - CẦY 6.Ỉ Định nghĩa khái niệm Định nghĩa: Cây tập hữu hạn nút có nút đặc biệt gọi gốc Giữa nút có quan hệ phân cấp - Quan hệ cha tuân theo cách đệ quy sau: Một nút cây, nút đồng thời gốc Nếu n nút Tj, T2 , , T|[ với gốc tương ứng ni,n2 , n i c ta tạo T cách cho nút n l c h a c ủ a c c n ú t n i , 112, 11* T a g ọ i c c T i l c c c â y c o n c ủ a c â y T Để thuận tiện người ta cho phép tồn rỗng (không cỏ nút nào) Ví du : 66 Biểu diễn biểu thức số học x+y*(z-l)+u/v Biểu diễn tập bao * Đối với cây: Một số khái niệm - Số nút gọi bậc nút Nếu nút mà có bậc bàng gọi Nút khơng có nút nhánh; - Bậc cao nút có gọi bậc cây; - G ố c c ủ a c â y c ó m ứ c 1, c o n c ủ a n ó c ó m ứ c i+ , c o n c ủ a n ú t có gọi cấp cây; - Nếu có n nút (cây nhị phân) số mức là: [log2 n]+l (lấy phần nguyên log2 n); - Chiêu cao (chiều sâu) số mức lớn nút có cây; Nếu thứ tự nút coi trọng đan; xét gọi có thứ tự Thơng thường ta đánh thứ tự từ trái qua phải Nhiều độc lậ] với gọi rừng 6.2 Cây nhị phân 6.2.1 Định nghĩa tính chất Định nghĩa nhị phân: Là cây, nút chi có tố: đa hai nút Đối với nút người ta phân biệi trái phải Cây nhị phân có thứ tự Tính chất: Cây nhị phân suy biến có dạng danh sách tuyến tính Ví du: Cây lệch trái Cây lệch phải Cây Zic-zắc 68 Cây nhị phân hoàn chinh (cây nhị phân đầy đủ) Cây nhị phân hoàn chinh (complete binary tree): Các nút trừ mức cuối đạt tối đa * Nhận xét: Trong có số lượng nút: + Cây nhị phân suy biến có chiều cao lớn nhất; + Cây đầy đủ có chiều cao nhỏ Đối với nhị phân đầy đủ cần ý tới số tính chất sau: Bổ dề: ) Số lượng tối đa nút mức i nhị phân 1' (i > ) ) Số lượng tối đa nút có chiều cao h h- (h>l) 6.2.2 Biểu diễn cày nhị phân a) Lưu trữ Ta đánh số cho nút từ mức đến mức cuối, mức đánh từ trái sang phải Cách chi dùng cho đầy đù nghĩa khơng q nút chi có Ta thấy: Con nút thứ i nút thứ 2*i 2*i + Cha nút thứ j [)/2] 69 Ta cô thê liru trir bâng mot vector V theo nguyên tàc: Nüt thü i dirac liru trir V[i] Dô chinh câc liru trir kê tiêp dôi vôi nhi phân + Cây nhi phân dây dü: A B V[1 V[ C D E F G V[3 V[4 V[5 V [ V[7 E + Cây nhi phân không dây du: A B C 4ằ D 4ằ *Nhuỗrc diờm: Vôi câch liru trir së gây lâng phi (do cô nhiêu phàn tù bô trông) b) Luu trxx môc nôi: Moi nüt img vâi mot bàn ghi (phân tù nhâ) Quy câch moi nüt: - INFO: Chûa nhûng thông tin (dû lieu) cùa nüt; - LPTR: Trô toi trâi cùa nüt dô; - RPTR: Trô phài cùa nüt dơ LPTR 70 INFO RPTR Ví du: Xét - Để truy nhập vào cây: Sử dụng trỏ T, trỏ tới nút gốc Nếu nhị phân rỗng ta cỏ T=null Nhận xét: Từ nút cha truy nhập dễ dàng, ngược lại khơng làm 6.2.3 Phép duyệt nhị phân - Duyệt cây: Là phép thăm nút cây, cho nút chi thăm lần Có ba cách duyệt cây: a) Duyệt theo thứ tự trước (preoder traversal) - Thăm gốc; - Duyệt trái theo thứ tự trước; - Duyệt phải theo thứ tự trước b) Duyệt theo thứ tự (inorder traversal); - Duyệt trái theo thứ tự giữa; - Thăm gốc; 71 - Duyệt phải theo thứ tự giữa, c) Duyệt theo thứ tự sau (post order traversal) - Duyệt trái theo thứ tự sau; - Duyệt phải theo thứ tự sau; - Duyệt gốc Chú ý: Nếu rỗng thăm có nghĩa khơng làm Ví du: Cho hình vẽ, thực phép duyệt Thăm theo thứ tự trước ABDECFGH b) Theo thứ tự giữa: DBFAEGHC Theo thứ tự sau: DEBGHFCA *Nhận xét: a) Chính dạng biểu thức tiền tố; b) Là dạng trung tổ; c) Là dạng hậu tố 6.2.4 Cây nhị phân nối vịng Có thể thấy rằng, nhị phân lưu trữ móc nối, có n nút có tới n+1 mối nối không Ta tận dụng mối nối để tạo điều kiện thuận lợi cho phép duyệt Một cách tận dụng: thay “mối nối không” bàng mối nối trỏ tới nút quy định, để tạo điều kiện thuận lợi cho phép duyệt cây, loại mối nối gọi “mối vòng” Dạng biểu diễn nhị phân gọi “cây nhị phân nối vịng” 72 Nhằm mục đích cho phép duyệt theo thứ tự thuận lọi, Perlis đưa quy ước: Với p nút cây, nếu: + LPTR(P)=null thay LPTR(p) = +P; + RPTR(P)=null thay RPTR (P) = p+ Trong đó: +P: trỏ tới nút đứng trước p, thứ tự giữa; p+: Chi tới nút sau p theo thứ tự Mối nối vòng, biểu diễn — > Quy cách nút có dạng: / r Nhận xét: Hai trường bit LBIT RBIT dùng để đánh dấu hai loại mối nối nếu: LPTR(P) * null LBIT(P)=0; RPTR(P)=null LBIT(P)=1 (ứng với mối nối vịng) Với RBIT tương tự Nghĩa qui cách nút LBIT LPTR INFO RPTR RBIT 73 Ví dụ hình trên: Mối nối vòng trái D: gọi nút cực trái cây; Mối nối vòng phải nút I: gọi nút cực phải T Để biểu diễn quán nút, mà khơng gây điều phức tạp, người ta quy ước đưa thêm vào nút “đầu cây” T gọi trái cùa nút đầu ấy, mối nối phải nút đầu ln trỏ tới - HEAD: trỏ tới nút đầu cây; - Cây rỗng nút đầu có dạng: RPTR(HEAD) = HEAD RBIT(HEAD)=0 LBIT(HEAD)=HEAD LBIT(HEAD)=1 (Với cấu trúc nối vịng này, giải thuật tìm nút đứng trước nút p, sau nút p ừong thứ tự trở nên đơn giản, việc đưa thêm nút đầu với quy ước hoàn toàn phù hợp) Cây tổng quát 6.3.1 Biểu diễn tổng quát - Đối với nhị phân cấp m đỏ, sử dụng cách biểu diễn móc nối tương tự nhị phân Như vậy, nút phải dành m trường mối nối để trỏ nút Nhược điểm số “mối nối không” nhiều Nếu có n nút có tới n(m-l)+l “mối khơng” số m*n mối nối 74 Cịn tuỳ theo số cùa nút mà định mối nối, nghĩa dùng nút có kích thước biến đổi tiết kiệm khơng gian nhớ trả giá phức tạp trình xử lý o Cách khác thực biểu diễn tổng quát nhị phân (cây nhị phân tương đương) Mỗi nút có quy cách: CHILD INFO SIBLING CHILD: trỏ tới nút cực trái; SIBLING: trỏ tới nút em kế phải Vỉ du: Xét + Với nút B: cực trái E, em kế cận phải C; + Với nút D: cực trái H, em kế cận phải khơng có Biểu diễn tổng quát bàng nhị phân tương đương 75 j:=j-l; while if k [j ]> K E Y j:=j-l; (ik[j] với < [j/2] < j < n Khoá gốc khoá max (trội so với cây) - Giai đoạn xếp: nhiều lượt xừ lý thực hiện, lượt ứng vói hai phép: + Đưa khố trội vị trí thực cùa bàng cách đổi chồ cho khố vị trí đó; + “Vun lại thành đống” gồm khố cịn lại (sau loại khố trội ngồi) Vi d u : Xét dãy: 42 23 74 11 65 58 94 36 99 87 103 Ban đầu: cấu trúc đống có dạng đống (hình a) Sau giai đoạn đầu: cấu trúc có dạng hình b a) Cây biểu diễn cho dãy khóa b) Đống ban đầu Sang giai đoạn 2: Khố ừội 99 đưa vào vị trí cuối cách đổi chỗ cho khố 42 Sau nút ứng với vị trí coi loại khỏi cây, khơng cịn đống nữa, ta phải vun đống cho Mỗi lượt thực tương tự khoá vào chỗ xếp a) Sau khóa 99 vào vị trí b) Cây với nút cịn lại, vun thành đống 8.4.2 Giải thuật 1) procedure begin 104 H o a n - v i - c h a - c o n (1, r) if (l*lá kl mang giá trịv’p (tăng) - Output: dãy z = X ghép Y tảng + Cách 1: trộn hai đường vào sẳp lai; 105 + Cách 2: phép họp ghi hai bảng xếp để ghép thành bảng Nguyên tắc: So sánh hai khoá nhỏ (lớn nhất) hai dãy X, Y chọn khoá nhỏ (lớn hơn) đưa miền xếp (có kích thước băng tơng sơ phần tử hai dãy X, Y); khoá chọn bị loại khỏi dãy chứa Q trình tiếp tục dãy bị cạn Lúc cần chuyển tồn phần cùa dãy cịn lại miền xếp xong * Giải thuật hoà nhập hai dãy sấp hai phân đoạn ữong dãy lớn X: Procedure MERGE 1) i:=k:=b; 2) while (X,b,m,n,Z) j:=m-l; (i