Mã tiền tố

Một phần của tài liệu Toán rời rạc (Trang 154 - 155)

Giả sử ta cần mã hóa các chữ cái Latin viết hoa A, B,.., Z. Thông thường người ta dùng 26 xâu nhị phân, mỗi xâu 8 bít để mã hóa một chữ cái. Do chỉ có 6 chữ cái, nên ta chỉ cần dùng 5 bít

để mã hóa cho các chữ cái là đủ. Với cách làm này, bảng mã đầy đủ các chữ cái được cho như

dưới đây: A 00000 J 01001 S 10010 B 00001 K 01010 T 10011 C 00010 L 01011 U 10100 D 00011 M 01100 V 10101 E 00100 N 01101 W 10110 F 00101 O 01110 X 10111 G 00110 P 01111 Y 11000 H 00111 Q 10000 Z 11001 I 01000 R 10001

Theo bảng mã này, xâu kí tự S =”BACBARA” tương ứng với dãy nhị phân

S* =”00001 00000 00010 00001 00000 10001 00000”. Tổng số bít cần mã hóa là 35. Trong xâu kí tự S =”BACBARA” chữ cái A, B xuất hiện nhiều lần hơn so với C và R. Trong văn bản, các chữ cái khác nhau xuất hiện với tần xuất không giống nhau. Bảng mã ở ví dụ

trên phân bốđộ dài xâu cho mọi chữ cái là giống nhau. Vấn đềđặt ra là có thể thay đổi bảng mã sao cho chữ cái nào xuất hiện nhiều hơn thì dùng số bít ít hơn không?

Bảng mã với độ dài mã thay đổi không thể xây dựng một cách tùy tiện. Chẳng hạn, nếu mã hóa A bởi 0, B bởi 1, C bởi 01, R bởi 10, khi ấy xâu “BACBARA” được mã hóa thành “100110100”. Nhưng xâu bít này với cùng bộ mã trên cũng có thể tương ững với “RABBCAA” hoặc “RCRRA”.

Nếu mã hóa A bởi 0, B bởi 10, R bởi 110 và C bởi 111, khi ấy xâu kí tự S =”BACBARA”

được mã hóa thành S* = “101111001100” sẽ có một cách duy nhất để giải mã.

Mã có tính chất đảm bảo mọi xâu kí tự tương ứng duy nhất với một dạy nhị phân gọi là mã tiền tố. Mã tiền tố có thể biểu diễn bằng dãy nhị phân, trong đó

a. Các kí tự là khóa của lá trên cây.

b. Cạnh dẫ tới con bên trái được gán nhãn 0. c. Cạnh dẫn đến con bên phải được gán nhãn 1.

Dãy nhị phân mã hóa một kí tự là dãy các nhãn của cạnh thuộc đường đi duy nhất từ gốc tới lá tương ứng.

Quá trình giải mã được thực hiện như sau: đối chiếu dãy nhị phân S* và cây nhị phân T lưu trữ bảng mã, lần lượt đi từ gốc T theo chỉ thị của các chữ số trong dãy nhị phân S*, đi theo cạnh phải nếu bit đang xét có giá trị 1, đi theo cạnh trái nếu bít đang xét có giá trị 0. Khi gặp lá thì dừng lại xác định một kí tự là khóa của lá. Việc tìm kiếm các khóa tiếp theo được lặp lại như trên.

Ví dụ. Cây nhị phân tương ứng trong hình 7.5 biểu diễn bảng mã: A:0 C:111 B: 10 R: 110

0 1 0 1 0 1 A B R C

Hình 7.5. Cây mã hóa tiền tố các kí tự ABRC

Một phần của tài liệu Toán rời rạc (Trang 154 - 155)