Giả sử tôi có một bảng chữ cái của n ký hiệu. Tôi có thể mã hóa chúng một cách hiệu quả với các -bits. Chẳng hạn nếu n = 8:
A: 0 0 0
B: 0 0 1
C: 0 1 0
D: 0 1 1
E: 1 0 0
F: 1 0 1
G: 1 1 0
H: 1 1 1
Bây giờ tôi có các ràng buộc bổ sung mà mỗi cột phải chứa tối đa các bit p được đặt thành 1. Ví dụ cho p = 2 (và n = 8), một giải pháp có thể là:
A: 0 0 0 0
B: 0 0 0 0 1
C: 0 0 1 0 0
D: 0 0 1 1 0
E: 0 1 0 0 0
F: 0 1 0 1 0
G: 1 0 0 0 0
H: 1 0 0 0 1
Cho n và p, thuật toán có tồn tại để tìm một mã hóa tối ưu (độ dài ngắn nhất) không? (và có thể chứng minh rằng nó tính toán một giải pháp tối ưu không?)
BIÊN TẬP
Hai cách tiếp cận đã được đề xuất cho đến nay để ước tính giới hạn thấp hơn về số lượng bit . Mục tiêu của phần này là cung cấp một phân tích và một sự kết hợp của hai câu trả lời, để giải thích sự lựa chọn cho câu trả lời tốt nhất .
Cách tiếp cận của Yuval dựa trên entropy và cung cấp giới hạn dưới rất đẹp: Ở đâu .
Cách tiếp cận của Alex dựa trên tổ hợp. Nếu chúng ta phát triển lý luận của mình nhiều hơn một chút, cũng có thể tính được giới hạn dưới rất tốt:
Được số lượng bit , tồn tại một sự độc đáo sao cho Người ta có thể tự thuyết phục rằng một giải pháp tối ưu sẽ sử dụng từ mã với tất cả các bit thấp, sau đó các từ mã có độ cao 1 bit, cao 2 bit, ..., k bit cao . Đối với các ký hiệu còn lại để mã hóa, không rõ ràng về việc sử dụng từ mã nào là tối ưu để sử dụng nhưng chắc chắn là trọng số của mỗi cột sẽ lớn hơn mức có thể nếu chúng ta chỉ có thể sử dụng các từ mã có bit cao và có cho tất cả . Do đó, người ta có thể hạ thấp ràng buộc với
Bây giờ, cho và , cố gắng ước tính . Chúng ta biết rằng vì vậy nếu , thì . Điều này cho giới hạn dưới cho . Đầu tiên tính sau đó tìm lớn nhất sao cho
Đây là những gì chúng ta có được nếu chúng ta vẽ, với , hai giới hạn dưới cùng nhau, giới hạn dưới dựa trên entropy màu xanh lá cây, một giới hạn dựa trên tổ hợp lý do ở trên màu xanh lam, chúng ta có được:
Cả hai trông rất giống nhau. Tuy nhiên, nếu chúng ta vẽ sự khác biệt giữa hai giới hạn dưới, rõ ràng là giới hạn dưới dựa trên lý luận tổ hợp là tổng thể tốt hơn, đặc biệt là đối với các giá trị nhỏ của .
Tôi tin rằng vấn đề xuất phát từ thực tế là bất đẳng thức yếu hơn khi trở nên nhỏ hơn, bởi vì các tọa độ riêng lẻ trở nên tương quan với nhỏ . Tuy nhiên, đây vẫn là giới hạn dưới rất tốt khi .
Đây là tập lệnh (python3) đã được sử dụng để tính các giới hạn dưới:
from scipy.misc import comb
from math import log, ceil, floor
from matplotlib.pyplot import plot, show, legend, xlabel, ylabel
# compute p_m
def lowerp(n, m):
acc = 1
k = 0
while acc + comb(m, k+1) < n:
acc+=comb(m, k+1)
k+=1
pm = 0
for i in range(k):
pm += comb(m-1, i)
return pm + ceil((n-acc)*(k+1)/m)
if __name__ == '__main__':
n = 100
# compute lower bound based on combinatorics
pm = [lowerp(n, m) for m in range(ceil(log(n)/log(2)), n)]
mp = []
p = 1
i = len(pm) - 1
while i>= 0:
while i>=0 and pm[i] <= p: i-=1
mp.append(i+ceil(log(n)/log(2)))
p+=1
plot(range(1, p), mp)
# compute lower bound based on entropy
lb = [ceil(log(n)/(p/n*log(n/p)+(n-p)/n*log(n/(n-p)))) for p in range(1,p)]
plot(range(1, p), lb)
xlabel('p')
ylabel('m')
show()
# plot diff
plot(range(1, p), [a-b for a, b in zip(mp, lb)])
xlabel('p')
ylabel('m')
show()