Sơ đồ mã hóa Huffman tạo ra những mã prefix tối ưu thông qua thuật toán tham
lam nhằm khai thác cây nhị phân Huffman. Do tỉ lệ nén nén của nó rất gần với giới
hạn nén được biểu diễn ở (3), mã hóa Huffman cũng được gọi là mã hóa entropy. Kĩ
thuật này được sử dụng cho phương pháp nén dữ liệu không mất thông tin. Do đó ta
hoàn toàn có thể sử dụng nó như là một phương pháp điển hình cho nén tín hiệu EEG. Ở đây chúng ta sử dụng những thuật ngữ “kí tự” (symbol or character), để biểu diễn dữ
liệu lối vào cho thuật toán của chúng ta, đó là những mẫu tín hiệu EEG. Việc này hoàn toàn chỉ là thuận lợi cho việc mô tả thuật toán.
Input
Bảng chữ A = {a1, a2, …,an} là bảng kí hiệu kích thước n
Tập W = {w1, w2, …,wn} là tập hợp những trọng số kí tự (luôn luôn tỉ lệ thuận với xác
suất của kí tự), cụ thể wi = weight (ai) , 1 i n.
Output
Mã C(A, W) = {c1, c2,…,cn}, là tập hợp những từ mã (mã nhị phân), ở đây ci là từ mã của ai, 1 i n Mục đích Đặt L(C) = n i c length wi i 1 )
( là chiều dài tổng cộng của từ mã C. Điều kiện phải đạt được là L(C) L(T) đối với mọi mã T (A, W).
Đây là thuật toán xây dựng mã Huffman thông thường dựa vào xác suất đã biết
của các mẫu tín hiệu. Tuy nhiên, đối với tín hiệu EEG, nhiều khi cần phải tiến hành ghi tín hiệu điện não trong thời gian dài (long-term signal), và nhiều lúc xuất hiện
những tín hiệu bộc phát biểu hiện bệnh lý bất thường có biên độ lớn hơn rất nhiều so
với các tín hiệu cơ bản hay các tín hiệu xảy ra hiếm khi. Khi đó sử dụng thuật toán
năng của các thiết bị lưu trữ thông thường. Để giải quyết vấn đề này chúng ta sẽ sử
dụng một kĩ thuật dựa vào cây Huffman “collapsed” (collapsed Huffman Tree - CHT). Kĩ thuật này cho phép tạo ra một mã mà chứa từ mã có chiều dài cực đại xác định (fixed- maximum length codeword). Trên CHT, mỗi lá sẽ được liên kết với một
xâu bit chiều dài thay đổi mà mã hóa kí tự tương ứng trên lá đó và sẽ tồn tại chính xác
một lá mà tương ứng với một tập hợp những kí tự thay cho một kí tự duy nhất . Ý tưởng là tạo ra những lá cây co (collapse) để những đường dẫn dài từ gốc (root) được
ngắn lại, vì vậy sẽ giới hạn được chiều dài xâu bit cực đại của những từ mã.
Cho một bảng kí tự nguồn là A={a1, a2, a3,…., aM} và đặt I ={1, 2, …, M} là tập
hợp của những chỉ số của nó. Sẽ không mất tính tổng quát, khi giả sử những kí tự này
được sắp xếp thứ tự theo xác suất của nó, cụ thể là , nếu pi là xác suất của ai thì p1>p2>….>pM (3.4)
Giả sử rằng A được chia thành hai tập con không giao nhau A1 và A2 , với chỉ số tương ứng trong I1, I2. Thuật toán nén CHT coi A2như là một kí tự duy nhất s được mã hóa, với xác suât tương ứng
Ps =
I2
i
pi (3.5)
Xem xét vấn đề thu được sự khôi phục chính xác những mẫu từ kí tự ak thuộc A2, và chia mã tiền tố giống nhau mà được sinh ra cho s cho tất cả các thành phần khác
của A2. Trong trường hợp này, theo sau từ mã s là b bít chiều dài cố định, ban đầu của
kí tự ak sẽ được phát ra.
Trong các bước giải mã, khi chuỗi bit tương ứng với s được tìm ra, thì b bit liên tiếp được dịch như giống như kí tự nguồn.
Tỉ lệ nén đạt được bởi kĩ thuật này là :
C = 1 -
b H
- ps (3.6)
Ở đây H là entropy của những kí tự A1{s} = {ai1,…., aim, s}. Số hạng ps là xác suất
của các kí tự thuộc A2.
Sự ép buộc chiều dài từ mã cực đại sẽ được gán vào giá trị được lựa chọn cho m
(cụ thể, chủ yếu của A1), vì cây Huffman cuối cùng có m+1 lá, nên số lượng bit của từ
mã được tính bằng tổng chiều cao của cây CHT mà dẫn đến lá tương ứng với từ mã
được xem như là sự phân chia A thành hai tập con A1, A2, để thiết kế một mã tối ưu
tập hợp chỉ số I1* phải được chọn lựa sao cho
(3.7)
Không may mắn là có thể lựa chọn tập I1 của m chỉ số từ {1, …, M} trong số
những cách bằng nhị thức của m trên M. Rõ ràng không thể khảo sát tỉ mỉ trong toàn bộ không gian tìm kiếm, vì vậy chúng ta lựa chọn để xác định tập I1, I2 bằng kinh
nghiệm đơn giản sau:
I1 = {1, 2, …., m}
I2 = {m+1, …., M} (3.8)
Do xác suất được sắp thứ tự, nên sự phân chia này đảm bảo rằng những kí tự có
xác suất cao sẽ có từ mã riêng của nó, trong khi những kí tự không thường xuyên xuất
hiện được co lại thành một lá duy nhất của cây Huffman. Không loại trừ trường hợp
giải pháp này chỉ tương ứng với sự tối ưu cục bộ, bởi hàm được tối thiểu được tổng hợp bởi những số hạng cơ bản mà không phải đơn điệu (-xlog2(x) với x Є [0, 1]), để
không chỉ đơn giản xuất phát từ đáp ứng (behavior) của hàm yêu cầu (7) khi số hạng
pi, pjđược trao đổi giữa I1, I2.
Giả sử cho một bảng kí tự nguồn A= {a, b, c, d, e, f} với xác suất lần lượt là P =
{0.4, 0.2, 0.2, 0.1, 0.05, 0.05}. Khi đó ta sẽ nhóm các kí tự thành 2 nhóm A1, A2
không giao nhau như sau :
A1 = {a, b, c, d} A2 = {e,f} = s
Khi đó Ps = (pe + pf) = 0.1
Ta xây dựng mã Huffman cho tập B = {a, b, c, d, s} với xác suất lần lượt là P’ = {0.4, 0.2, 0.2, 0.1, 0.1}. Với mô hình như trên chúng ta có một mã sắp theo thứ tự của các kí
tự như sau: C’ = {0, 10, 110, 1111, 1110}. Và do đó mã tương ứng của bảng nguồn là C = {0, 10, 110, 1111, 11100, 11111}.