Luận văn tốt Chương MỘT SỐ VẤN ĐỀ VỀ CÂY I CÁC KHÁI NIỆM VÀ TÍNH CHẤT CƠ BẢN Định nghĩa Cho đồ thị G = , G gọi G liên thông khơng có chu trình, n = X > Khi sáu tính chất sau tương đương 1) G đồ thị liên thông chu trình 2) G khơng có chu trình có n - cạnh 3) G liên thơng có n - cạnh 4) G khơng có chu trình thêm vào cạnh nối đỉnh khơng kề G xuất chu trình 5) G liên thơng bỏ cạnh tuỳ ý đồ thị nhận không liên thông 6) Mỗi cặp đỉnh G nối với đường Chứng minh: Ta chứng minh theo trình tự sau: 1) 2) 3) 4) 5) 6) 1) Ta sử dụng đẳng thức v(G) = m - n + p X = n, U = m p số chu trình độc lập đồ thị G = , số thành phần liên thơng G 1) 2): Vì G khơng có chu trình nên v(G) = m - n + p = Do G liên thông nên p =1 m - n + = hay số cạnh m = n - 2) 3): Giả sử G khơng có chu trình n - cạnh ta chứng minh 3) Thật vậy, giả sử ngược lại G khơng liên thơng, p Từ 2) ta có v(G) = m - n + p = m = n -1, kết hợp ta có (n - 1) - n + p = hay p = 1, trái với giả thiết p Vậy G liên thông số cạnh n -1 4): Giả sử G liên thông có n - cạnh, ta chứng minh 4) 3) Thật G liên thơng nên p = 1, mặt khác m = n - nên v(G) = m - n + = hay G khơng có chu trình Nếu thêm vào G cạnh ta đồ thị G' với số cạnh n, hay v(G') = n - n + = hay G' có chu trình 4) 5): Giả sử ngược lại G không liên thông, tức tồn cặp đỉnh x, y G mà đường nối x với y Khi nối x y cạnh, đồ thị nhận khơng có chu trình điều mâu thuẫn với 4) Hay G liên thông 56 Luận văn tốt Nếu bỏ cạnh G mà đồ thị liên thơng khơi phục lại cạnh đồ thị có chu trình Điều mâu thuẫn với 4) Vậy ta có 5) 5) 6): Giả sử ngược lại, G có tồn cặp đỉnh x, y không nối với đường cả, chứng tỏ G không liên thông mâu thuẫn với 5) Vậy cặp đỉnh có đường nối với nhau, đường có nhiều sau bỏ đường đồ thị liên thông, trái với 5) 6) 1) Với cặp đỉnh nối với đường G liên thơng Giả sử G có chu trình xét cặp đỉnh x, y chu trình Khi x, y có cặp đường nối với nhau, mâu thuẫn với 6) Một số khái niệm - Gốc: Đối với T chọn đỉnh làm gốc, chọn đỉnh làm gốc gọi có gốc Vậy tạo thành nhiều có gốc khác - Quan hệ cha con: Giả sử a gốc có b, c kề với a b, c gọi a (hoặc gọi a cha b, c) tương tự có d, e kề với b b cha chúng cịn d, e b (Xem T' hình 1.1) - Trong tất đỉnh cha gọi đỉnh Các đỉnh đỉnh gọi (hay đỉnh khơng có con), có gốc đỉnh - Bậc đỉnh số nó, bậc bậc lớn đỉnh - Mức cây: Mỗi đỉnh gán mức, mức gốc 0, gốc có mức Nếu mức cha i mức i + Một đỉnh x có mức độ dài đường từ gốc đến x, mức cao số đỉnh gọi chiều cao Khi chưa có gốc, chưa phân chia thành các quan hệ cha con, bậc, mức tự phân chia gọi phân cấp i a d c b d j e b a h e h f i c k f j g T k T' Hình 1.1 57 g Luận văn tốt Ví dụ hình 1.1 T tự do, chọn a làm gốc trở thành phân cấp T' có gốc Với T' gốc a có bậc mức 0, đỉnh c có bậc mức Mức cao đỉnh i, j, k nên chiều cao h(T') = 3 Cây m - phân - Định nghĩa: Xét phân cấp T đỉnh có khơng q m T gọi m phân Đặc biệt m = gọi nhị phân, nhị phân quan trọng có nhiều ứng dụng rộng rãi - Cây đầy đủ: Cây m - phân T gọi m - phân đầy đủ đỉnh có m - Cây cân đối: Xét m - phân có chiều cao h Nêu có mức h - h gọi cân đối Các ứng dụng 4.1 Mã tiền tố Kỹ thuật nén mã hoá lĩnh vực thường hay sử dụng Tin học, nhị phân có nhiều ứng dụng việc nghiên cứu áp dụng giải thuật lĩnh vực vực Một ứng dụng nhị phân mã tiền tố Ví dụ mã tiền tố dùng xâu nhị phân có độ dài khác để mã ký tự để khơng có xâu nhị phân ứng với chữ Trên nhị phân mã hoá, ký tự cần mã hoá đường từ cha đến trái (hoặc 0), tới phải (hoặc 1) Q trình mã hố duyệt từ gốc tới lá, tới nút tạo bít tới nút tạo xâu bít Do vậy, mã sinh cho ký tự không phần đầu ký tự khác 0 a e 1 i 1 k o p u Hình 1.2 Ví dụ hình 1.2 nhị phân biểu diễn mã tiền tố ký tự a, e, i, k, o, p, u đó: a : 000 k : 1100 u : 11111 e : 001 o : 1101 i : 01 p : 11110 58 Luận văn tốt Thuật toán mã hoá Huffman: Một số thuật toán mã tiền tố đời sử dụng rộng rãi đem lại hiệu cao vấn đề nén mã hố thơng tin Một thuật tốn Huffman xuất từ năm 1952, thuật toán mã hoá theo phương pháp kiểu thống kê, tạo mã có độ dài thay đổi khác có bảng tần số xuất ký tự Q trình mã hố giải mã phụ thuộc vào việc xây dựng nhị phân mã hoá Thuật toán Huffman tạo nhị phân từ nút đến nút gốc, ký tự có tần số cao nút tương ứng gần gốc Thuật toán: Vào: Bảng tần số xuất ký tự xếp giảm dần Ra : Cây nhị phân biểu diễn mã, nhánh phải 1, trái Bước 1: Lấy hai phần tử cuối bảng tần số xuất khỏi bảng Bước 2: Nếu phần tử chưa nằm nhị phân tạo nút chứa phần tử đó, phần tử ký tự Nối hai nút tương ứng với hai phần tử với thông qua việc tạo nút cha chúng Phần tử có tần số xuất lớn nút trái, nhỏ nút phải Bước 3: Tính tổng tần số xuất phần tử chèn vào bảng cho phù hợp với nguyên tắc giảm dần bảng Phần tử bảng tương ứng với nút vừa tạo bước Bước 4: Quay trở lại bước đến bảng lại phần tử Phần tử cuối tương ứng với nút gốc nhị phân Ví dụ: Ta có kết mã Huffman cho ký tự bảng sau: Ký tự Tần suất Mã nhị phân Chiều dài mã a 0.3 00 b 0.2 10 c 0.2 11 d 0.1 011 e 0.1 0100 f 0.1 0101 Cây nhị phân biểu diễn hình 1.3 59 Luận văn tốt a,e,f,d,b,c a,e,f,d 0,6 a b,c 0,3 0,3 e,f,d e,f d 0,2 0,2 c 0,2 0,1 e b 0,4 0,1 f 0,1 Hình 1.3 Với thuật tốn Huffman trường hợp xấu thời gian hình thành nhị phân O(n) với n số ký tự cần mã hố Chương trình viết ngơn ngữ Pascal minh hoạ thuật toán tạo mã Huffman: Const n = 6; {Số ký tự cần mã hoá a, b, c, .} Type Nod = record S:integer; {tần suất} Code:String; {mã nhị phân} Name:char; {tên ký tự} end; Var a:array[1 n] of Nod; i,m:integer; Procedure InputData; {Khởi tạo bảng tần suất ký tự} Var i:integer; begin for i:=1 to n with A[i] begin S:=Round(exp(n/5)/exp(i/5))+1;Name:=Char(64+i);Code:=''; end; Procedure FindCode(m:integer); {Sinh mã huffman} Var y,z:nod; k:integer; Begin if m=1 then exit; y:=a[m-1]; a[m-1].s:=a[m-1].s+a[m].s; k:=m-1; While (k>1) and (a[k].s>a[k-1].s) Begin 60 end; Luận văn tốt z:=a[k]; a[k]:=a[k-1]; a[k-1]:=z; k:=k-1; End; FindCode(m-1); z:=a[k]; for i:=k to m-2 a[i]:=a[i+1]; a[m-1]:=y; a[m-1].code:=z.code+'1'; a[m].code:=z.code+'0'; End; BEGIN InputData; FindCode(n); For i:=1 to n writeln(a[i].code); END 4.2 Cây biểu diễn biểu thức Một biểu thức tốn học biểu diễn cây, vấn đề hữu ích việc xử lý lưu trữ biểu thức toán học máy tính Xét biểu thức đại số sau: d⎞ ⎛ A = (a + b ) × ⎜ c − ⎟ 2⎠ ⎝ Có thể vẽ nhị phân hình 1.4 biểu diễn biểu thức A, đỉnh mang dấu phép tính, gốc mang phép tính sau A, dấu nhân ký hiệu: *, mang số chữ đại diện cho số * - + a / b c d Hình 1.4 Một phép duyệt tiền thứ tự thăm gốc trước sau thăm trái với phương pháp thăm gốc trước cuối thăm phải với phương pháp thăm gốc trước Duyệt mang tính đệ quy Khi duyệt theo tiền thứ tự ta có: * + a b - c / d Cách viết biểu thức theo tiền thứ tự ký pháp Balan 61 Luận văn tốt Bằng duyệt ta tính giá trị biểu thức, ngồi phương pháp tiền thứ tự cịn duyệt theo phương pháp pháp khác để tính giá trị biểu thức tùy vào yêu cầu đặc điểm tốn 4.3 Cây định Có toán phụ thuộc vào định Mỗi định có nhiều kết cục kết cục cuối lời giải tốn Để giải toán vậy, người ta biểu diễn định đỉnh đồ thị kết cục định Một xây dựng gọi định Trong nhiều tốn Tin gặp phải, dùng định để mơ hình hố từ việc cài đặt dễ dàng thuận tiện Ví dụ: hình 1.5 định biểu diễn việc xếp số khác a, b, c a?b b