Tại sao mã này có thể giải mã duy nhất?


21

Bảng chữ cái nguồn: {a,b,c,d,e,f}

Bảng chữ cái mã: {0,1}

  • a:0101
  • b:1001
  • c:10
  • d:000
  • e:11
  • f:100

Tôi nghĩ rằng để một mã có thể giải mã duy nhất, nó phải không có tiền tố. Nhưng trong mã này, từ mã c là tiền tố của từ mã f chẳng hạn, vì vậy nó không có tiền tố. Tuy nhiên, sách giáo khoa của tôi nói với tôi rằng mặt trái của nó là tiền tố miễn phí (tôi không hiểu điều này), và do đó nó có thể giải mã được. Ai đó có thể giải thích điều này có nghĩa là gì, hoặc tại sao nó có thể giải mã được không? Tôi biết nó thỏa mãn sự bất bình đẳng của Kraft, nhưng đó chỉ là điều kiện cần, không phải là điều kiện đủ.


10
Không có tiền tố ngụ ý giải mã duy nhất, nhưng đó không phải là câu lệnh "nếu và chỉ khi". Xem, ví dụ, ở đây .
dkaeae ngày

Được rồi tôi hiểu, nhưng cuốn sách văn bản của tôi nói điều này: Mã A có thể giải mã duy nhất vì nó ngược lại là tiền tố, nên có thể giải mã duy nhất Bạn có hiểu ý nghĩa của nó ngược lại không?
2000mroliver

1
Có lẽ chỉ đơn giản là mã thu được bằng cách đảo ngược tất cả các từ mã.
dkaeae ngày

và tại sao điều đó ngụ ý giải mã duy nhất, tôi không hiểu nó
2000mroliver

1
ccó thể là tiền tố của bf, nhưng các hậu tố còn sót lại không tồn tại trong mã. Khi bạn đảo ngược mã, hậu tố trở thành tiền tố và sau đó nó trở thành không có tiền tố.
Barmar

Câu trả lời:


26

Mã của bạn có thuộc tính là nếu bạn đảo ngược tất cả các từ mã, thì bạn sẽ nhận được mã tiền tố. Điều này ngụ ý rằng mã của bạn là giải mã duy nhất.

Thật vậy, hãy xem xét bất kỳ mã C=x1,,xn có đảo ngược CR:=x1R,,xnR là giải mã duy nhất. Tôi cho rằng C cũng có thể giải mã duy nhất. Điều này là do

w=xi1xim if and only if wR=ximRxi1R.
Nói cách, phân tách của w vào từ mã của C là trong one-to-one thư từ với phân tách của wR vào từ mã của CR . Vì cái sau là duy nhất, cái trước cũng vậy.

Vì mã tiền tố có thể giải mã duy nhất, theo sau đó là mã đảo ngược của mã tiền tố cũng có thể giải mã duy nhất. Đây là trường hợp trong ví dụ của bạn.

Bất đẳng thức McMillan nói rằng nếu C có thể giải mã duy nhất thì

i=1n2|xi|1.
Nói cách khác, một mã đáp ứng bất bình đẳng duy nhất có thể giải mã Kraft. Do đó, nếu tất cả những gì bạn quan tâm là giảm thiểu độ dài từ mã dự kiến, không có lý do gì để nhìn xa hơn mã tiền tố.

Sam Roweis đưa ra trong các trang trình bày của mình một ví dụ hay về mã có thể giải mã duy nhất không phải là mã tiền tố cũng không phải là mã đảo ngược của mã tiền tố:

0,01,110.
Để cho thấy mã này có thể giải mã duy nhất, nó đủ cho thấy để giải mã từ mã đầu tiên của một từ. Nếu từ bắt đầu bằng 1 , thì từ mã đầu tiên là 110 . Nếu nó có dạng 01 , sau đó nó phải là 0 hoặc 01 . Nếu không, thì phải có một tiền tố của mẫu 010 . Bây giờ chúng tôi phân biệt một số trường hợp:

prefix00010011001110codeword001001
1


2
Dường như trong ví dụ của OP, chúng ta không thể giải mã được từ mã đầu tiên sau một số chữ số cố định, có vô số trường hợp: 1001010101010101…có thể fcccccc…hoặc caaa…, và chúng ta có thể cần đợi đến khi kết thúc đầu vào để quyết định.
Bergi ngày

1
1,10,00.
Yuval Filmus ngày

4
@Bergi Nó luôn có thể giải mã được cho bất kỳ số lượng chữ số hữu hạn nào. Luôn luôn chỉ có một cách để giải mã mã hóa mà không có bất kỳ phần dư nào. Bất kỳ nỗ lực nào khác sẽ kết thúc với 1 hoặc 0 phụ tùng. Điều này là do mã có thể giải mã duy nhất nếu chúng ta đọc nó ở đuôi trước. Về lý thuyết, nếu một thứ gì đó có thể giải mã duy nhất theo một hướng thì sẽ không có nghĩa là có thể có nhiều hơn một giải pháp theo hướng khác
slebetman

@slebetman Tôi đã đề cập đến một tiền tố hữu hạn (với phần còn lại có thể). Có, nếu chúng ta lấy toàn bộ đầu vào thì nó luôn có thể giải mã được.
Bergi

5

Nếu tôi đưa cho bạn bất kỳ thông báo nào mà bạn có nghĩa vụ phải giải mã, thì bạn có thể làm như sau: Đảo ngược tin nhắn, bắt đầu với bit cuối cùng thay vì bit đầu tiên. Đảo ngược các từ mã. Giải mã tin nhắn. Đảo ngược chuỗi giải mã.

Bạn có thể làm điều đó bởi vì sau khi đảo ngược sáu từ mã, bạn nhận được mã không có tiền tố: 1010, 1001, 01, 000, 11, 001 là tiền tố miễn phí.


0

Nếu không có tiền tố có nghĩa là những gì tôi nghĩ, thì ngược lại 'a' bắt đầu bằng 1, hoặc 10 hoặc 101, không có mã nào trong số đó là toàn bộ mã hợp lệ khác.

Do đó, nếu một tin nhắn kết thúc bằng 0101, nó chỉ có thể là 'a' và bạn có thể áp dụng logic tương tự cho (các) bit trước đó.

Tuy nhiên, nếu không có kết thúc để bắt đầu thì sao? Chà, nếu bit đầu tiên là 1, bạn biết đó không phải là 'a' hay 'd'. Bit thứ hai sẽ loại bỏ 'e' hoặc {'b', 'c', 'f'}. Bit thứ ba có thể đưa nó xuống một lựa chọn, nhưng nếu không, nó là duy nhất bởi bit thứ tư.

Ngay khi bạn nhận được một chuỗi duy nhất, bạn khởi động lại thuật toán trên bit tiếp theo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.