5. Sơ lược lý thuyết mã hóa
Claude Shannon là cha đẻ của lý thuyết thông tin và lý thuyết mã hóa. Sẽ không có truyền thông hiện đại nếu không có Shannon. Nhà toán học lỗi lạc Kolmogorov từng nói về Shannon như sau: “Trong thời buổi mà kiến thức nhân loại càng lúc càng đuợc chuyên môn hóa, Claude Shannon là một nhà khoa học ngoại lệ. Shannon kết hợp các ý tưởng toán học sâu sắc với các hiểu biết rộng và cụ thể của các vấn đề quan trọng bậc nhất của công nghệ. Shannon là một trong những nhà toán học vĩ đại nhất đồng thời là một trong những kỹ sư giỏi nhất trong vài thập niên qua”. Nếu câu nói đó được phát biểu lúc này, thì phải thay “vài thập niên qua” bằng “thế kỷ 20″. Bài này duyệt qua một số kiến thức cơ bản về lý thuyết mã hóa cần cho thử nhóm.
5.1. Ý tưởng của Shannon (và Hamming)
Ý tưởng chính của lý thuyết mã hóa là thêm thông tin vào từng thông điệp trước khi gửi đi để bên nhận có thể tự phát hiện lỗi hoặc thậm chí tự sửa lỗi xảy ra trên đường truyền. Hai tham số chính của một mã là tỉ lệ (rate) của thông tin nguyên thủy trên thông tin gửi đi, và khả năng chịu đựng lỗi — số lỗi tối đa mà mã có thể dùng để kiểm tra hoặc sửa lỗi.
Cụ thể hơn, giả sử ta làm việc trên an-pha-bê . Trong truyền thông số thì thông thường
với số tự nhiên
nào đó vì thường chỉ có 2 bits
và
. Trong lý thuyết mã hóa thì
có thể tổng quát hơn, là một trường
chẳng hạn. Chuyển từ an-pha-bê
sang an-pha-bê nhị phân không khó khăn gì. Nhưng ta cứ xét một an-pha-bê tổng quát trước đã. Giả sử mỗi thông điệp gửi đi có chiều dài
, nghĩa là mỗi thông điệp gửi đi là một vector trong
. Thay vì gửi một thông điệp
, ta gửi
là ảnh của
dưới ánh xạ mã hóa
. Chúng ta cần
chứa nhiều thông tin hơn
, để cho bên nhận — dù có nhận một bản bị lỗi của
— thì vẫn có thể hồi phục lại
. Do đó
.
Tập tất cả các ảnh của
được gọi là mã sửa lỗi (error-correcting code, hoặc ECC cho gọn). Tỉ lệ
là tỉ lệ của mã,
là số chiều của mã, và
là độ dài mã (block length). Mỗi thành viên của
được gọi là một mã tự (codeword). Khoảng cách (distance) của mã là khoảng cách Hamming nhỏ nhất giữa hai mã tự. Cụ thể hơn, gọi
là khoảng cách Hamming giữa hai vectors trong
, thì
Còn khoảng cách tương đối của mã là
Nếu thì ta gọi
là mã
. Và nếu cụ thể hơn ta biết
thì ta gọi
mã
.
Mục đích chính của một mã là làm sao cho bên nhận có thể xây dựng lại mã tự đã được gửi, cho dù đường truyền có thay đổi vài vị trí của vector . Ví dụ,
, thì mỗi
là một vị trí của
.
Yêu cầu cơ bản nhất là giải mã duy nhất (unique decoding): bộ giải mã phải giải mã ra được đúng mã tự đã gửi, hoặc báo rằng không giải mã được. Giả sử có tổng cộng vị trí của
bị lỗi. (Ví dụ, nếu
là vector nhị phân thì
là tổng số bits bị lỗi; Và,
là tỉ lệ tổng số bits lỗi trên tổng số bits gửi.) Câu hỏi chính là: mã của chúng ta có thể “chịu đựng” được
lớn cỡ nào? Chặn thông tin (information theoretic bound) dễ dàng cho ta biết
, do đó
gần với
vì như vậy ta tốn ít băng thông thừa; nhưng khi
gần với
thì độ chịu lỗi tiến đến
. Ngoài ra, nếu bên nhận nhận được một vector nằm ngay giữa hai mã tự thì không biết giải mã thành từ nào. Do đó, nếu ta cố chấp yêu cầu mã phải có tính giải mã duy nhất thì độ chịu đựng lỗi còn bị ép xuống nữa:
Chặn Singleton nói rằng , do đó
. Điều này cho thấy ép buộc tính chất giải mã duy nhất đẩy chúng ta ra rất xa chặn thông tin (1). Nói cách khác, để luôn luôn giải mã duy nhất được thì chúng ta phí rất nhiều băng thông, chí ít là gấp đôi cần thiết.
5.2. Mã giải theo danh sách
Cuối thập niên 1950, Elias và Wozencraft đề xuất một giải pháp gọi là giải mã danh sách (list-decoding) rất đơn giản và thú vị. Ý tưởng chính như sau. Cái chặn là do các điểm tiếp xúc giữa các quả cầu Hamming bán kính
với tâm là các mã tự. Nhưng trong toàn bộ không gian
thì các điểm tiếp xúc này chiếm một lượng cực kỳ nhỏ. Nếu ta xét các điểm không nằm trong các quả cầu Hamming này, thì đa số chúng đều gần một mã tự nào đó hơn tất cả các mã tự khác, mặc dù khoảng cách từ một điểm đến mã tự gần nhất có thể xa hơn
nhiều.
Vì thế, nếu chúng ta dùng phép giải mã cự ly ngắn nhất (minimum distance decoding) thì chúng ta có thể chịu đựng được tỉ lệ lỗi lớn hơn nhiều, miễn là vector nhận được không nằm trong xóm nhà lá gần điểm tiếp xúc giữa hai quả cầu Hamming nào đó. Tiếc rằng giải mã cự ly ngắn nhất là một bài toán không khả thi và thậm chí không xấp xỉ được trong một tỉ lệ tốt.
Elias-Wozencraft đề xuất là, với tỉ lệ lỗi cho trước (nghĩa là giả sử có nhiều nhất
lỗi), thì thuật toán giải mã đưa ra một danh sách các mã tự trong bán kính
của vector nhận. Nếu
thật sự là tổng số lỗi lớn nhất có thể có, thì mã tự được gửi chắc chắn nằm trong danh sách này. Ngoài ra, nếu mã giải theo danh sách (list-decodable code) này được thiết kế tốt thì danh sách này thường là chỉ có một mã tự trong đó và vì thế giải mã là duy nhất với đa số các vectors được nhận. Khác với giải mã cự ly ngắn, giải mã danh sách lại là bài toán khả thi về mặt tính toán, và thậm chí chúng ta có thể đạt gần sát chặn thông tin (1). Đây là một nhánh nghiên cứu rất quan trọng trong chục năm đổ lại đây. Ngoài ứng dụng trong lý thuyết mã hóa thì còn ứng dụng trong lý thuyết độ phức tạp, thử thuộc tính (property testing), và các PCP. Xem thêm survey của Madhu Sudan và luận án của Venkat Guruswami (luận án được giải luận án xuất sắc nhất của ACM năm 2002). Hai bài báo của Parvaresh-Vardy và của Guruswami-Rudra là các phát triển (rất mạnh) gần đây nhất về giải mã danh sách.
5.2. Mã hồi phục danh sách
Trong ngữ cảnh của thử nhóm thì chúng ta lại cần một tổng quát hóa của khái niệm mã giải theo danh sách gọi là mã hồi phục danh sách (list-recoverable codes), do Guruswami và Indyk đề xuất ở FOCS 2001.
Định nghĩa 1 (Mã hồi phục danh sách) Cố định
. Gọi
là các số nguyên dương. Một mã
được gọi là mã hồi phục danh sách với các tham số
nếu nó thỏa tính chất sau đây. Cho
tập hợp bất kỳ
các ký tự, nghĩa là
, trong đó
. Tồn tại nhiều nhất là
các mã tự
thỏa mãn
với ít nhất
các vị trí
.
Mã giải theo danh sách chính là mã hồi phục danh sách với . Khi
thì bộ
đại diện cho vector mà bên nhận nhận được,
là tỉ lệ các vị trí bị lỗi, và
số nhiều nhất các mã tự nằm trong quả cầu Hamming với bán kính
có tâm là vector nhận.
Để đơn giản hóa thảo luận ở đây, ta sẽ chỉ dùng một trường hợp đặc biệt của kết quả của Parvaresh-Vardy. Trường hợp đặc biệt này đã được chứng minh trong bài báo của Guruswami-Sudan hồi 1999, áp dụng cho bộ mã lừng danh Reed-Solomon. Do đó trước hết hãy định nghĩa bộ mã RS.
Ở trên ta định nghĩa một bộ mã là một tập con của
. Một loại mã rất quan trọng trong thực tế là mã tuyến tính, khi đó
là một trường hữu hạn,
là một lũy thừa của một số nguyên tố, và
là một không gian con tuyến tính của
. Sở dĩ ta cần
tuyến tính trên thực tế vì ta có thể tận dụng tính tuyến tính của
để mã hóa và giải mã nhanh với các phép biến đổi tuyến tính thông thường. Một mã tuyến tính với độ dài
, số chiều
, trên trường
sẽ được ký hiệu là mã
. Nếu khoảng cách Hamming giữa hai mã tự bất kỳ ít nhất là
, thì ta gọi mã này là mã
.
Bộ mã Reed-Solomon (RS) là một bộ mã với
, định nghĩa như sau. Mỗi một thông điệp
có thể xem như một đa thức bậc
trên vành
:
Mã RS là một ánh xạ định nghĩa như sau. Cố định
phần tử khác nhau
. (Đây là lý do tại sao ta cần
.) Định nghĩa:
Một đa thức bậc có nhiều nhất
nghiệm trên trường bất kỳ. Do đó hai đa thức khác nhau chỉ có thể trùng giá trị ở nhiều nhất là
điểm
. Vì thế, mã RS có khoảng cách ít nhất là
. Vì thế, mã RS là một mã
. (Sự tuyến tính của RS là hiển nhiên.) Mã RS đạt đến chặn Singleton, và vì thế còn được gọi là một mã phân ly khoảng cách tối đa (maximum distance separable code). Mã RS có rất nhiều ứng dụng trên thực tế vì có các thuộc tính đại số dễ mến. Các ứng dụng bao gồm các mã trên CDs, DVDs, truyền thông trên cáp, không gian, vân vân.
Điểm thú vị là mã RS cũng là một mã hồi phục danh sách tốt. Chúng ta sẽ chỉ phát biểu định lý sau đây với là một lũy thừa của
, mặc dù định lý đúng cho bất kỳ lũy thừa nguyên tố nào. Đại khái, định lý nói rằng RS là một mã hồi phục danh sách với các tham số
mà thời gian giải mã là poly
.
Định lý 2 (Guruswami-Sudan) Xét
là một số nguyên dương bất kỳ,
là một lũy thừa tùy ý của
thỏa
, và
. Thì, tồn tại một thuật toán thỏa tính chất sau đây. Cho
tập con bất kỳ
với
. Thuật toán sẽ in ra tất cả các mã tự
của mã RS
thỏa tính chất
. Ngoài ra, luôn luôn có nhiều nhất
các mã tự như vậy, và thuật toán chạy trong thời gian poly
.
5.3. Thêm về mã Reed-Solomon
Mã RS có vài tính chất quan trọng mà chúng ta sẽ dùng vào việc thiết kế thuật toán thử nhóm giải mã nhanh. Trong giới hạn bài này, ta sẽ không chứng minh định lý Guruswami-Sudan mà chỉ dùng nó như một “hộp đen”. Đó là phần giải mã. Còn phần mã hóa thì ta cũng cần mã hóa nhanh và sẽ thảo luận một chút về nó.
Nhớ rằng mỗi mã từ của mã RS có thể viết dưới dạng
trong đó
và
Do đó, nếu ta định nghĩa ma trận sinh như sau
thì ta có
Ma trận
còn được gọi là ma trận Vandemonde, có nhiều tính chất thú vị và ứng dụng khắp mọi nơi, bao gồm trong biến đổi Fourier. Mỗi mã từ được “đánh chỉ số” bằng một vector
. Có tổng cộng
mã từ, và tính mã từ từ một vector chỉ số
chỉ tốn thời gian poly
. Cũng nhớ rằng mã RS là một mã tuyến tính
. Do đó, khoảng cách tương đối của mã là
.

3 Comments
Thanks so much for your information. I already knew how to define the RS code.
But in your sesson not showing the way how RS code can correct data when nose occur during transportation.
Please, send to me some explaination. I need to master this sesson.
Thanks you so much for best support.
P/S: Reply via ngodaoki18@yahoo.com
Chào Minh Quan, bạn có thể tìm thêm thông tin về các thuật toán giải mã mã RS ở đây. Cái dễ đọc nhất có lẽ là syndrome decoding.
Hi Minh Quan,
Thuật toán giải mã có thể được tóm lược như sau:
Theo như phần anh Hưng trình bày phía trên, mỗi bản mã tương ứng với 1 đa thức
bậc
. Do vậy việc giải mã là việc tìm lại đa thức
.
Một bản mã
cho ta
giá trị của
tại
điểm. Do vậy nếu không có lỗi thì chỉ cần
là ta có thể phục hồi lại đa thức
(đa thức bậc
có thể xác định từ
giá trị tại
điểm), tức là có thể giải mã.
Bây giờ ta biết sẽ có
lỗi trên đường truyền, tức là trong số
điểm sẽ có
điểm không tương ứng với giá trị thực của đa thức
. Nếu ta xác định được vị trí của
lỗi thì ta chỉ cần loại bỏ chúng và như vậy với
là sẽ phục hồi được đa thức P. Vấn đề là ta không biết vị trí của
lỗi (có thể ở các vị trí tùy chọn). Câu hỏi đặt ra là
cần lớn bao nhiêu để ta có thể xây dựng lại
.
Có thể chứng minh được với
thì sẽ giải mã được. Cách khôi phục lại là như sau:
Cho
giá trị
trong đó có ít nhất
vị trí
tại đó giá trị
, với
là một đa thức bậc
. Mục đích xác định đa thức
.
Xử dụng kỹ thuật thêm biến để xóa sổ sự mù mờ về vị trí của
lỗi. Gọi
là một đa thức bậc cao nhất là
thỏa mãn tính chất
nếu
khác
(có nhiều nhất
điểm thỏa mãn). Khi đó, với mọi
ta đều có
. Đa thức
có bậc cao nhất
. Do đó ta có
phương trình tuyến tính với
biến (các biến là các hệ số của
và của
, hệ số cao nhất của
có thể cho bằng 1). Do vậy ta sẽ giải được phương trình này (do
). Tính được
và
, ta tìm lại được
, tức là giải mã được.