Làm thế nào để tôi xây dựng một mã gắn tối ưu?


8

Một đang đóng là một mã số đó là đồng thời một tiền tố và hậu tố mã. Đó là, không có từ mã nào không phải là tiền tố cũng không phải là hậu tố của bất kỳ loại tiền mã hóa nào khác. Mã gắn có thể được giải mã tức thời theo cả hai hướng (tiến và lùi).

Tôi muốn tạo một cái tối ưu nén một phân phối ký hiệu đầu vào đã cho, đưa ra một bộ các ký hiệu đầu ra.

Thuật toán Huffman (tạo mã tiền tố) đến gần nhất, nhưng do chiến lược tham lam của nó, có vẻ như không phù hợp để sửa đổi mục đích này.

Làm thế nào có thể tìm thấy mã gắn tối ưu?

Câu trả lời:


4

Tôi thực sự không nghĩ rằng có một thuật toán được biết là tối ưu. Trong thực tế, có một phỏng đoán chính về hiệu quả của một tập hợp các từ mã, xem: http://arxiv.org/abs/0709.2598 (tên tôi biết cho mã gắn là mã không có sửa chữa). Nếu một thuật toán đã được chứng minh là tối ưu, thì rất có thể nó cũng sẽ giải quyết (hoặc không bảo vệ) phỏng đoán này.


Những câu trả lời này dường như cho thấy thuật toán Huffman tạo ra các mã tối ưu trong các điều kiện hợp lý.
Anko

Tôi không thấy những câu trả lời đó liên quan đến vấn đề của bạn như thế nào. Nếu bạn chỉ là một thuật toán, bạn có thể sử dụng huffman, và sau đó mở rộng một số từ xấu.
domotorp

Tôi chỉ đưa ra quan điểm rằng một số mã có thể được chứng minh là tối ưu. Việc mở rộng các từ mã của mã Huffman có thể sẽ khiến nó không tối ưu, vì mọi tiện ích đều khiến nó tiếp cận mã hóa khối. Đây có thể là một điểm khởi đầu mặc dù!
Anko

1
Nhưng huffman không có tiền tố mà chúng ta biết về bất đẳng thức của Kraft ( en.wikipedia.org/wiki/Kraft%27s_inequality ). Nếu chúng ta có bằng chứng về sự tối ưu, bất bình đẳng giống như kraft sau đây. Nhưng đối với mã sửa lỗi miễn phí. bất bình đẳng là phỏng đoán, vì vậy không thể có bằng chứng.
domotorp

Trên trang 8, dưới cùng, một số mã không sửa lỗi cho tiếng Anh được mô tả và được đề cập rằng không có thuật toán nào được sử dụng để xây dựng chúng được chứng minh là tối ưu. Vì vậy, có lẽ không có thuật toán hiệu quả được biết đến.
Yuval Filmus

2

FWIW, dường như đối với tôi có một PTAS cho vấn đề này, theo ý tưởng cơ bản trong bài viết này . (Điều này không trả lời chính xác câu hỏi của bạn, nhưng tôi vẫn sẽ mô tả PTAS ở đây trong phần trả lời vì quá dài để phù hợp với nhận xét.)

Khắc phục mọi hằng số . Đặt p là một ví dụ của vấn đề, nghĩa là phân phối xác suất trên [ n ] .ϵ>0p[n]

KK

K=1/ϵ2p n S K K C ( S ) | S | p S n - | S | K S n - | S | n - | S | S C ( S ) C 0 S C 0 K pKpnSKKC(S)|S|pSn|S|Kkhông có tiền tố hoặc hậu tố trong và gán cácchuỗi là từ mã cho còn lại xác suất (theo thứ tự xác suất giảm). Mỗi tập con cho một mã ; lấy là một trong những chi phí tối thiểu (bằng cách liệt kê tất cả các lựa chọn cho ). là mã không có -fix có chi phí tối thiểu cho .Sn|S|n|S|SC(S)C0SC0Kp

Lưu ý rằng chi phí của là giới hạn thấp hơn về chi phí của mã không sửa lỗi tối ưu cho , vì mã không sửa lỗi tối ưu cũng là mã không có mã -fix. p KC0pK

Tiếp theo, chuyển đổi thành mã không có sửa chữa, mà không làm tăng chi phí của nó nhiều hơn một yếu tố , như sau. ( 1 + O ( ϵ ) )C0(1+O(ϵ))

C0K=1/ϵ(1+ϵ)KKC0KKK1+O(ϵ)C1

C1(1+O(ϵ))C0C0C1(1+O(ϵ))

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.