Trường hợp hiệu suất MTF kém nhất:
Về hiệu suất trường hợp xấu nhất? Bạn có thể mong đợi rằng trường hợp xấu nhất cho MTF sẽ xảy ra đối với trình tự:
ANAN−1AN−2. . . A1ANAN−1 AN−2 . . . A1ANAN−1 AN−2. . .A1
Lý do là các biểu tượng được mã hóa tiếp theo sẽ luôn luôn nằm ở cuối danh sách. Do đó chiều dài trung bình từ mã sẽ được λ (N), đó là tối đa.
Để phân tích hiệu suất tồi tệ nhất của MTF, chúng ta sử dụng một phiên bản khác của thuật toán. Giả sử chúng ta có một C mã tiền tố cho các vị trí số nguyên dương trong một danh sách các biểu tượng. Chúng ta cũng xem xét một mã tiền tố C* cho các biểu tượng trong bảng chữ cái. Hai mã này tách biệt nhau.
Trong phiên bản mới của thuật toán, bộ mã hóa bắt đầu với một danh sách trống. Đối với mỗi ký hiệu A theo thứ tự, nó sẽ kiểm tra xem biểu tượng có trong danh sách. Nếu biểu tượng ở vị trí j, sau đó từ mã C(j) được gửi và biểu tượng được chuyển đến phía trước. Nếu biểu tượng không có trong danh sách (tức là nó đã không được nhìn thấy trước theo thứ tự), và nếu có các yếu tố k trong danh sách hiện (k ≥ 0) sau đó các từ mã C(k + 1) được gửi - nghĩa là, biểu tượng được xử lý như thể nó là cuối cùng trong danh sách. Biểu tượng mới này sau đó được lắp ở mặt trước của danh sách (tức là di chuyển đến phía trước), và mã cho biểu tượng C*(A) được gửi đi.
Bộ giải mã làm điều tương tự. Nó bắt đầu với một danh sách trống. Sau đó, bất cứ lúc nào có k biểu tượng trong danh sách, nó đọc từ mã tiếp theo đó là một số C(i) . Nếu i = k +1, điều này có nghĩa là các biểu tượng tiếp theo trong chuỗi không có trong danh sách hiện hành, vì thế nó diễn giải các bit tiếp theo là từ mã cho biểu tượng mới này C*(k + 1). Sau đó nó chèn biểu tượng mới này ở phía trước của danh sách. Nhưng nếu I ≤ k, thì các biểu
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
53
tượng phải ở trong danh sách, cụ thể là ở vị trí i trong danh sách, và do đó, nó nhìn lên biểu tượng này trong danh sách và di chuyển nó đến phía trước.
Ví dụ: Giả sử ví dụ trình tự được mã hóa bắt đầu giảm A3A4A1A2A2A6A2 . . .
Thuật toán MTF thực hiện như sau. Danh sách này ban đầu trống rỗng:
encode C(1)C∗(A3) C(2)C∗(A4) C(3)C∗(A1) C(4)C∗(A2) C(1) C(5)C∗(A6) C(2) : updated list empty [A3] [A4, A3] [A1, A4, A3] [A2, A1, A4, A3] [A2, A1, A4, A3] [A6, A2, A1, A4, A3] [A2, A6, A1, A4, A3] :
Chắc chắn rằng bạn có thể giải mã trình tự và lấy lại ví dụ ban đầu. C(1)C*(A3)C(2)C*(A4)C(3)C*(A1)C(4)C*(A2)C(1)C(5)C*(A6)C(2) Lợi thế này của thuật toán MTF là danh sách ngắn hơn rất nhiều trong trường hợp đó, số lượng các ký hiệu N trong bảng chữ cái là lớn. Ví dụ, giả sử bảng chữ cái của chúng ta là tập hợp các từ trong từ điển tiếng Anh. Chúng ta có thực sự muốn tạo ra một danh sách và bắt đầu di chuyển các yếu tố đến phía trước? Không.
Xem xét một chuỗi các biểu tượng n mà chúng ta muốn mã hóa. Các biểu tượng xảy ra theo thứ tự được ký hiệu là {A1, A2,. . , AN}, N ≤ n. Cho ni
≥ 1 là số lượng xuất hiện của biểu tượng Ai. Thời gian khi Ai thực hiện được ký hiệu là ti
1, ti2,. . ,tini. t này sử dụng một ma trận N × n với các giá trị trong 0 và 1. Trong hàng i và m cột, chúng ta có một số 1 nếu và chỉ nếu Ai xảy ra
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
54
tại thời điểm m. Các số 1 trong hàng i do đó ni, Và có duy nhất một số 1 trong mỗi cột. 0 0 1 0 0 0 0 . . . 0 0 0 1 1 0 1 . . . 1 0 0 0 0 0 0 . . . 0 1 0 0 0 0 0 . . . 0 0 0 0 0 0 0 . . . 0 0 0 0 0 1 0 . . . λi
tot là số bit được sử dụng để mã hóa các vị trí của những ni xuất hiện của Ai.
Như vậy:
• Các biểu tượng lần đầu tiên xảy ra Ai, danh sách có thể có ở hầu hết các ti1-1, và do đó vị trí mã hóa bằng cách MTF là hầu hết các ti
1. Điều này đòi hỏi nhiều nhất λ(ti
1) bits. • Từ kth
đến k + 1st
xảy ra, một biểu tượng Ai có thể giảm ở hầu hết các vị trí ti
k +1 – Ti
k trong danh sách. Vì vậy, để mã hóa vị trí này đòi hỏi ít λ nhất ( ti k +1- tik)bits. Do đó: λi tot ≤ λ(ti 1) + λ(ti 2− ti 1) + λ(ti 3− ti 2) + … + λ(ti ni− ti ni−1)
Tiếp theo chúng ta đơn giản hóa sự chênh lệch này bằng cách sử dụng bất đẳng thức của Jensen. Giả sử chúng ta ràng buộc về chức năng λ(), cụ thể là một hàm lồi liên tục không giảm f(x) sao cho λ (j) ≤ f (j), j là một số nguyên dương.
Ví dụ, thu hồi mã Elias với chiều dài từ mã λ (j) = 2 ⌊ log j ⌋ + 1
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
55
chúng ta có thể thực hiện
f (x) ≡ 2 log (x) + 1
Kết hợp hai bất đẳng thức ở trên để có được một đẳng thức (cao hơn) bị ràng buộc cho λi tot λi tot≤ f (ti1) + f (ti2− ti 1) + f (ti3− ti 2) + … + f (tini− ti ni−1)
Tiếp theo, chúng ta nhân ni/ni và áp dụng bất đẳng thức của Jensen. [Chú ý rằng bất đẳng thức của Jensen đã được chứng minh cho log(x) cùng một chứng minh giữ cho hàm lồi f(x) bất kỳ.]
Để có được ràng buộc trên về độ dài từ mã trung bình (đối với mã C), chúng tôi tổng hợp λi
tot trên tất cả các i, sau đó chia cho số lượng các biểu tượng n trong trình tự,
Đó là, cho tất cả các trình tự bảng chữ cái Ai, i = 1, ..., N và với tần số ni, Từ mã trung bình chiều dài sẽ có mặt tại hầu hết bấy nhiêu.
Ví dụ, hãy xem xét mã Elias1. Chúng ta có thể bị ràng buộc λ () bởi f (x) = 2 log x + 1. Vì vậy, nếu chúng ta sử dụng mã Elias1, sau đó chiều dài mã trung bình đáp ứng:
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
56
Quay trở lại để Eq. (1), thông báo rằng, đối với n »N, tỷ lệ ni/n sẽ hội tụ về xác suất rằng biểu tượng Ai xảy ra tại bất kỳ yếu tố đặc biệt trong trình tự . Vì vậy, khi n → ∞, chúng ta có:
Đặc biệt, nếu ta sử dụng mã Elias1, sau đó khi n → ∞ (xem Eq. (2)), chúng ta có
λ ≤ 2H + 1
Trong đó: H là dữ liệu ngẫu nhiên được xác định bởi các xác suất p(Ai).
Có thể coi đây là một ràng buộc yếu. Mã hóa chương trình sẽ cung cấp cho chiều dài mã trung bình là gần entropy, không gấp đôi dữ liệu ngẫu nhiên!
Tuy nhiên, Eq . (1) định nghĩa một ràng buộc về trường hợp xấu nhất, cho các tần số n1,n2,..., nN. MTF có thể thực hiện tốt hơn nhiều so với các ràng buộc của Eq . (1) ví dụ như nếu các ký tự cụm lại với nhau, có nghĩa là, nếu sự xuất hiện của Aiở vị trí nào làm cho nhiều khả năng là Ai sẽ xảy ra tại một vị trí gần đó.
Cuối cùng, lưu ý rằng nếu chúng ta sử dụng mã Elias2, sau đó sử dụng chính xác cùng một đối số, có thể cho thấy λ ≤ H + 2 log (H + 1) + 1.
Đối với H lớn, chiều dài mã trung bình không kém hơn nhiều so với H. Trong thực tế, sẽ có phân nhóm, mà sẽ dẫn đến hiệu suất cao hơn.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
57
Một ứng dụng quan trọng của biến đổi MTF là Burrows-Wheeler nén dựa trên biến đổi. Biến đổi Burrows-Wheeler sẽ sản xuất một chuỗi các biểu tượng theo tần số tương quan, từ văn bản và các lớp đặc biệt của dữ liệu. Một biến đổi MTF trước khi các bước mã hóa dữ liệu ngẫu nhiên cuối cùng sẽ đem lại lợi ích nén rất cao sau chuyển đổi Burrows-Wheeler. Các biến đổi Burrows-Wheeler không làm giảm entropy của tin nhắn, nó chỉ ghi lại các byte trong một cách mà làm cho MTF chuyển đổi hiệu quả hơn.
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn
58
Chương III: GIẢI THUẬT MOVE TO FRONT VÀ DEMO 3.1. Thuật toán nén dữ liệu Move – To - Front
Chuyển đổi MTF là một thuật toán chuyển đổi mà không nén dữ liệu nhưng có thể giúp làm giảm sự dư thừa một số lần, như sau khi chuyển đổi BWT, một biểu tượng gần đã xuất hiện trở lại. MTF thay vì xuất ra các biểu tượng (byte), kết quả đầu ra một mã trong đó đề cập đến vị trí của biểu tượng trong một bảng với tất cả các biểu tượng, do đó chiều dài của mã này là tương tự như chiều dài của biểu tượng. (Khi sử dụng các byte như là biểu tượng, byte dựa trên kết quả có thể được thực hiện).
Cả hai bộ mã hóa và giải mã cần khởi tạo các bảng với các biểu tượng tương tự trong cùng một vị trí. Khi một biểu tượng đang được xử lý mã hóa các kết quả đầu ra vị trí của nó trong bảng và sau đó đặt nó trong top của bảng, vị trí 0. Tất cả các mã số từ vị trí đến vị trí của các biểu tượng được mã hóa được chuyển đến các vị trí tiếp theo. Kế hoạch này đơn giản chỉ định mã số với giá trị thấp hơn cho các biểu tượng dư thừa (biểu tượng xuất hiện thường xuyên hơn).
Ví dụ: MTF xử lý chuỗi văn bản như sau: "abaacabad" Ta có mã hóa: Kí hiệu Mã Danh sách a 0 a b c d b 1 b a c d a 1 a b c d a 0 a b c d c 2 c a b d a 1 a c b d b 2 b a c d a 1 a b c d d 3 d a b c
Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn 59 Giải mã: Mã Kí hiệu Danh sách 0 a a b c d 1 b b a c d 1 a a b c d 0 a a b c d 2 c c a b d 1 a a c b d 2 b b a c d 1 a a b c d 3 d d a b c
"011021213" Như bạn có thể thấy điều này dễ dàng hơn để mã dữ liệu ngẫu nhiên. ―run‖ của cùng byte, nơi mà MTF có thể chuyển đổi "aaaaabbbb" thành ―000001000‖ một bộ mã hóa dữ liệu ngẫu nhiên sẽ chỉ định ít bit ―0‖ đó xảy ra thường xuyên hơn so với "a" hoặc "b".