Mã hóa khoảng cách (DC)

Một phần của tài liệu Kỹ thuật nén dữ liệu burrow wheeler và các cải tiến (Trang 40 - 65)

7. Ý nghĩa khoa học của đề tài

2.3.3. Mã hóa khoảng cách (DC)

Thuật toán DC có liên quan hơn với thuật toán IF và dựa trên lược đồ mã hóa khoảng từ Elias [1987]. Với mỗi biểu tượng của dãy đầu vào, thuật toán DC cung cấp khoảng cách đến xuất hiện tiếp theo của cùng biểu tượng . Nếu biểu tượng không xuất hiện nữa, 0 là đầu ra . Binder [2000] đã đề xuất ba cải tiến từ thuật toán cơ bản. Nếu chiều dài của dãy đầu vào cũng được truyền, dãy cuối cùng của những số 0 mã hóa là dư thừa. Hơn nữa, để tính toán khoảng cách đến xuất hiện tiếp theo của cùng biểu tượng, chỉ có những biểu tượng chưa được biết phải được đếm. Cải tiến cuối cùng là nếu biểu tượng cuối cùng bằng với biểu tượng hiện hành, không có biểu tượng nào được đưa ra và DC xử lý với biểu tượng tiếp theo. Sự khác biệt chính với mã hóa khoảng của Elias là DC không đếm các biểu tượng đã được biết và bỏ qua các biểu tượng lặp đi lặp lại

Mã hóa khoảng cách được dựa trên bắt đầu của mỗi biểu tượng trong đầu ra của BWT, vì vậy ta phải biết xuất hiện đầu tiên của biểu tượng. Sau đó, ta phải đếm khoảng cách của cùng biểu tượng từ xuất hiện đầu tiên của biểu tượng . Biểu tượng

được đếm từ dãy gốc mà không loại bỏ các biểu tượng . Kết thúc biểu tượng sẽ có được khoảng cách 0 để thông báo kết thúc mỗi biểu tượng. Ví dụ, L=[NNBAAA]

Bảng 2.4: Mã hóa khoảng cách

Symbol Fist occurrence Distance to next run

A 4 1,1,0

B 3 0

N 1 1,0

Khi giải mã, ta bắt đầu với cột xuất hiện đầu tiên , bằng cách thiết lập xuất hiện đầu tiên của mỗi biểu tượng đến vị trí của riêng nó. Từ bảng 2.4 có thể thấy rằng biểu tượng A xuất hiện đầu tiên theo vị trí thứ 4, biểu tượng B theo vị trí thứ 3, biểu tượng N theo vị trí thứ 1, và vv….Ở đây “*” là biểu tượng chưa được biết.

N * B A * *

Khoảng cách của cột run tiếp theo cho ta biết khoảng cách đến cùng biểu tượng. Khoảng cách biểu tượng A đến run tiếp theo là 1. Đặt A tiếp theo tại vị trí 5 và khoảng cách tiếp theo là 1 từ vị trí 5 đó là vị trí 6.

N * B A A A

Tiếp tục điều này với biểu tượng N, kết quả cuối cùng của bộ giải mã là L=[NNBAAA]

N N B A A A 2.3.4. Phương pháp đếm trọng số tần số (WFC).

Một giai đoạn GST khác là thuật toán WFC được trình bày bởi Deorowicz năm 2002 [5] đạt tỉ lệ nén tốt hơn nhiều so với các giai đoạn MTF . Vì một biểu tượng được đưa thẳng lên trước L mà không đưa phân phối tần số trước của biểu tượng vào tín h toán, giai đoạn MTF đẩy tới nhiều lần những biểu tượng thường xuyên hơn về một bên bằng những biểu tượng ít được sử dụng thường xuyên hơn . Điều này làm cho những giá trị xếp hạng cao hơn với những biểu tượng đã sử dụng thường xuyên và cản trở quá trình nén tại giai đoạn EC, vì các giá trị thấp hơn ít chi phí để nén hơn với các mô hình EC đã được sử dụng phổ biến

biểu tượng mới xảy ra . Phương pháp này cung cấp tỉ lệ nén tốt , nhưng rất chậm và phức tạp trong tính toán

Bảng 2.5 biểu diễn những giá trị xếp hạng trung bình r x của MTF và giai đoạn WFC cùng với thời gian thực hiện tương ứng theo giây với tất cả các file của Calgary Corpus. Những giá trị xếp hạng trung bình là những giá trị trung bình dãy đầu ra của những giai đoạn tương ứng . Cả giai đoạn MTF và WFC được thực hiện với giai đoạn RLE được xử lý trước.

Bảng 2.5: Những giá trị xếp hạng trung bình rx và thời gian thực hiện theo giây cho những giai đoạn MTF và WFC.

Trong tất cả các trường hợp, những giá trị xếp hạng trung bình cho giai đoạn WFC là nhỏ hơn hoặc bằng với giai đoạn MTF, vì vậy dãy đầu ra WFC có thể được nén cao hơn. Hạn chế của giai đoạn WFC là thời gian tiêu thụ cao, khoảng 20 lần so với giai đoạn MTF

2.3.5. Những thay thế MTF khác

Bên cạnh MTF, WFC và IF, CD đã có những giai đoạn GST được xuất bản, như thuật toán MTF-1 từ Balkenhol, Kurtx và Shtarkov [1999], thuật toán MTF-2 từ Balkenhol và Shtarkov [1999]. Các thuật toán MTF-1 và MTF-2 gần với thuật toán

MTF. MTF-1 đưa biểu tượng từ vị trí thứ hai lên đầu danh sách, những biểu tượng với vị trí cao hơn được đưa đến vị trí thứ hai. MTF-1 khác với MTF-1, bởi thực tế những biểu tượng từ vị trí thứ hai được đưa đến đầu danh sách nếu giá trị xếp hạng cuối cùng không phải là 0, tức là nếu cùng biểu tượng được xuất hiện lại lần nữa..

2.3.6. Mã hoá Run Length

RLE là một thuật toán nén dữ liệu đơn giản và phổ biến. Dãy có chiều dài l của biểu tượng lặp đi lặp lại s được thay thế bởi một dãy ngắn hơn, thường chứa một hay nhiều hơn những biểu tượng s, thông tin chiều dài và đôi khi một biểu tượng escape c. RLE hiệu quả hơn khi dãy chứa nhiều dữ liệu lặp lại. Ý tưởng chính của RLE là để tính các run được lặp lại trong dữ liệu đầu vào và thay thế các biểu tượng với số lần lặp khác nhau. Ví dụ, dãy các biểu tượng của dữ liệu đầu vào L = NNNNBBBBAAA, biểu tượng “N” được lặp lại bốn lần, biểu tượng “B” lặp lại bốn lần, biểu tượng “A” được lặp lại ba lần. Các giá trị có thể được biểu diễn như (N,4), (B,4),(A,3)

Khi đó bộ mã hóa được là: N4B4A3

Giải mã run-length, biểu tượng đầu tiên của bảng mã hóa được biết bởi giá trị của biểu tượng, biểu tượng thứ hai là lần lặp của một giá trị.

Bộ giải mã: NNNNXXXXXXX

Trong khi giải mã đến hết giá trị, đầu ra của bộ mã hóa là: Dữ liệu đầu ra: NNNNBBBBAAA

Mã hóa RLE sẽ nén các biểu tượng của dãy hiệu quả với các run chứa các biểu tượng lớn hơn hoặc bằng 3. Nhưng nếu các lần lặp của các run là nhỏ hơn 2, điều đó không giảm tỉ lệ nén của dãy.

Dữ liệu đầu vào: NNBAAA Bộ mã hóa: N2B1A3

Trong một số cách tiếp cận B WCA, giai đoạn RLE được sử dụng trước BWT hoặc trước giai đoạn EC . Hầu hết những cài đặt BWT sử dụng RLE trước giai đoạn EC vì đầu ra GST chứa nhiều run dài những số 0, Balkenhol và Shtarkov đặt tên cho hiện tượng này là “áp suất của run” . Giai đoạn RLE làm giảm áp suất này . Một kiểu RLE phổ biến cho máy nén dựa trên BWT là chuyển đổi run_0 (RLE0) từ Wheeler [Fenwick, 1996] được thể hiện trong hình 2.13.

Hình 2.13: Thuật toán nén Burrows-Wheeler sử dụng giai đoạn RLE0

Để giải thích các mô hình hoạt động của các giai đoạn khác nhau, hình 2.14(a)- 2.14(e) cho thấy dữ liệu được chuyển đổi của xâu đầu vào

abracadabraabracadabra” trong hệ 16. Dữ liệu đầu vào của giai đoạn BWT được hiển thị trong hình 2.14(a). Như có thể thấy trong hình 2.14(b) dữ liệu đầu ra của BWT chứa nhiều dãy những biểu tượng lặp lại và có cấu trúc cục bộ , tức là những biểu tượng với cùng ngữ cảnh tạo thành các đoạn nhỏ. Trong ví này giai đoạn GST là MTF được sử dụng để chuyển đổi cấu trúc cục bộ của đầu vào BWT sang cấu trúc tổng thể bằng cách sử dụng lược đồ xếp hạng theo những biểu tượng vừa mới xảy ra sau cùng và đưa ra dãy những số 0 liên tiếp như được hiển thị trong hình 2.14(c). Giai đoạn RLE0 loại bỏ các run_0 trong hình 2.14(d) và giai đoạn EC cuối cùng đưa ra đầu ra bit bằng cách sử dụng lược đồ mã hóa số học trong hình 2.14(e).

Hình 2.14: Dữ liệu được chuyển đổi của xâu đầu vào ”abracadabraabracadabra” với các giai đoạn khác nhau

2.3.7. Các cải tiến với mã hóa RLE

2.3.7.1. Hoạt động chung

Các thuật toán RLE khác khác nhau chủ yếu bởi ba điểm: ngưỡng t, đánh dấu bắt đầu của một run và mã hóa thông tin chiều dài. Nếu l nhỏ hơn t, run giữ không thay đổi, và nếu l lớn hơn hoặc bằng t, run được thay thế . Bắt đầu của một run có thể được biểu thị bằng một run ngưỡng hay một biểu tượng escape c. Nếu run ngưỡng được sử dụng, bắt đầu được mô tả bằng một dãy nhỏ s, dãy này có chiều dài lớn hơn hoặc bằng t. Nếu biểu tượng escape c chỉ định bắt đầu của run, thì s thường đặt sau c

xuất hiện của c phải được mã hóa làm sao mà nó không lẫn lộn với bắt đầu của run. Thông tin chiều dài l có thể được mã hóa theo nhiều cách khác nhau. Thông thường l

đặt trực tiếp sau run ngưỡng hay sau s.

Maniscalco [2001] mô tả một thuật toán sử dụng mã hóa chiều dài thay đổi và chia thông tin chiều dài làm hai phần: một phần mũ e và một phần biểu diễn nhị phân

Ba. Phần mũ e, được gọi là kích thước của mã hóa chiều dài thay đổi trong bài báo của Maniscalco, tương ứng với logarithm của l. Phần biểu diễn nhị phân Ba, được gọi là

giá trị của mã hóa chiều dài thay đổi bởi Maniscalco, chứa các bit biểu diễn nhị phân của l. Một cấu trúc đưa đến thuật toán RLE tao nhã và hiệu quả cho BWCA.

Hai thuật toán RLE được xây dựng và thảo luận trong phần tiếp theo. Một thuật toán dựa trên mã hóa chiều dài thay đổi của Maniscalco được gọi là RLE-EXP. Thuật toán khác là một thuật toán mới có tên là RLE-BIT và dựa trên ý tưởng sử dụng hai biểu tượng escape hơn là một.

2.3.7.2. Vị trí mới cho giai đoạn RLE

Gringeler đã có ý tưởng với vị trí giai đoạn RLE trực tiếp sau giai đoạn BWT thay vì trước giai đoạn EC [2002]. Có hai lý do cho thứ tự mới. Vì chiều dài Xout của giai đoạn RLE thường nhỏ hơn chiều dài của Xin, giai đoạn GST phải xử lý ít biểu tượng hơn với giai đoạn RLE ở phía trước. Ngoài ra, giai đoạn RLE thường nhanh hơn giai đoạn GST, vì vậy toàn bộ quá trình nén trở nên nhanh hơn. Lý do thứ hai là việc mã hóa các run làm giảm áp suất của các run thực sự tại giai đoạn GST và điều này làm cho dãy đầu ra GST có thể nén được tốt hơn. Tỉ lệ nén cho BWCA với giai đoạn RLE-BITvà RLE sau giai đoạn WFC (RLE0, [Fenwick, 1996]) được so sánh trong bảng 2.6. Đặt vị trí giai đoạn RLE lên trước giai đoạn WFC đạt được lợi ích nén khoảng 1.3%.

Bảng 2.6. Tỉ lệ nén với giai đoạn RLE trước và sau giai đoạn WFC trong bps.

2.3.7.3. Thuật toán RLE-EXP

Vì biểu tượng escape c khác với biểu tượng run s, c phá vỡ ngữ cảnh biểu tượng cục bộ. Vì vậy, cách sử dụng run ngưỡng thay cho biểu tượng escape thường làm cho cài đặt BWCA đạt được kết quả tốt hơn [Maniscalco, 2001]. Thuật toán RLE- EXP sau đây dựa trên một run ngưỡng. Run ngưỡng gồm hai phần: Một run chiều dài cố định có kích thước t và một run chiều dài thay đổi kích thước e. Cả hai run chứa các dãy của s. Kích thước e được định nghĩa bởi công thức sau:

e=log2(L-1).

Run chiều dài thay đổi chứa thông tin của logarithm gồm chiều dài L, run này giống hệt với chiều dài của biểu diễn nhị phân Ba. Ba sẽ phá vỡ ngữ cảnh biểu tượng cục bộ nếu đặt sau run ngưỡng. Vì vậy, Ba được đặt như dãy bit trong luồng dữ liệu riêng biệt được gọi là RLE Mantissa Buffer (RMB). Trong suốt quá trình giải mã, thuật toán đầu tiên giải mã e và sau đó đọc Ba từ RMB. Dữ liệu của RMB sẽ không được xử lý bởi giai đoạn GST nhưng được mã hóa trực tiếp trong giai đoạn EC. Vì vậy thuật toán RLE-EXP thay thế mỗi run chiều dài l bằng run chiều dài t+e và dãy bit Ba trong RMB, dãy này được xử lý riêng biệt. Đặc biệt là những run dài được mã

hóa rất hiệu quả bởi cấu trúc logarithmic. Vì vậy áp suất của các run được làm mất trước giai đoạn GST, có thể loại bỏ giai đoạn RLE0 trước giai đoạn EC. Toàn bộ thuật toán được trình bày trong Hình 2.15.

Hình 2.15: Thuật toán RLE-EXP

Bảng 2.7 biểu diễn một số ví dụ của các run ngưỡng với t=2. Thuật toán RLE- EXP làm việc đặc biệt tốt với thuật toán IF.

Bảng 2.7: Các run ngưỡng với t=2

2.3.7.4. Thuật toán RLE-BIT

Ngoài việc sử dụng một ngưỡng run như thuật toán RLE-EXP, bắt đầu của một

run có thể được mã hóa bởi các biểu tượng escape. Vì các biểu tượng escape thường làm xáo trộn ngữ cảnh biểu tượng của giai đoạn GST, một kỹ thuật mới được giới thiệu trong phần này mà không cản trở ngữ cảnh GST . Về vấn đề này thuật toán RLE - BIT được chia làm hai phần, với cả hai tiến trình đang rất nhanh và bỏ qua thông tin

run vòng quanh giai đoạn GST. Phần thứ nhất được gọi là RLE-BIT-0 được đặt trước giai đoạn GST. Phần thứ hai được gọi là RLE-BIT-1 được đặt sau giai đoạn GST . RLE-BIT-0 lưu giữ vị trí và chiều dài của mỗi run trong bộ đệm tạm thời riêng biệt TB và loại bỏ tất cả các biểu tượng của run này ngoại trừ biểu tượng đầu tiên. Vì vậy

dãy đầu ra của RLE-BIT-0 ngắn hơn chiều dài tương ứng dãy đầu ra của RLE-EXP. Sau giai đoạn GST, RLE-BIT-1 chèn vào dãy của các biểu tượng escape tại vị trí trước của các run để mã hóa chiều dài run. Hình 2.16 miêu tả hoạt động của thuật toán RLE-BIT.

Hình 2.16: Thuật toán RLE-BIT

Chiều dài run được mã hóa bởi các biểu tượng escape 0 và 1. Tất cả các bit biểu diễn nhị phân của chiều dài run ngoại trừ bit quan trọng nhất được lưu giữ với các biểu tượng 0 và 1, tương tự với phần hai của mã hóa Elias và mã hóa RLE0. Bảng 2.8 cho thấy một số ví dụ của các chiều dài run được mã hóa với chiều dài L khác nhau.

Bảng 2.8: Mã hóa RLE-BIT của chiều dài run

Tất cả các biểu tượng từ dãy đầu ra của giai đoạn GST được tăng lên 2 để có thể giải mã các biểu tượng escape. Vì RLE-BIT-1 chèn vào các biểu tượng escape tại vị trí trước của run, chiều dài của Xout của giai đoạn GST phải giống như chiều dài của

Xin. Do chiều dài của Xout tại giai đoạn IF nhỏ hơn Xin, nên thuật toán RLE-BIT không hoạt động được với giai đoạn IF.

2.3.8. Các cải tiến với đảo ngược tần số

2.3.8.1. Sắp xếp biểu tượng bằng phân phối tần số

Giai đoạn IF đưa ra dãy thành phần Sa với mỗi biểu tượng aAin. Trong suốt quá trình này, chỉ các biểu tượng lớn hơn a được đếm. Vì vậy, nếu các biểu tượng với phân phối tần số cao sẽ được xử lý đầu tiên , các dãy thành phần của các biểu tượng tiếp theo, với phân bố tần số thấp hơn có được các giá trị nhỏ hơn. Mặt khác, những dãy thành phần cho các biểu tư ợng với phân phối tần số cao dài hơn các dãy thành phần cho các biểu tượng với một phân phối tần số thấp hơn. Để chỉ ra ảnh hưởng của phân phối tần số, Ain của giai đoạn IF được hoán vị theo thứ tự tần số tăng dần hoặc thứ tự tần số giảm dần. Bảng 2.9 biểu thị tỉ lệ nén với bảng chữ cái gốc và cả hai bảng chữ cái đã được hoán vị.

Bảng 2.9. Tỉ lệ nén theo bps cho các giai đoạn IF với bảng chữ cái gốc, bảng chữ cái đã thay đổi trật tự được sắp xếp bởi các tần số theo thứ tự tăng và bảng chữ cái đã

hoán vị được sắp xếp theo các tần số giảm dần.

Việc hoán vị bảng chữ cái theo thứ tự tăng dần cho tỉ lệ nén tốt hơn bảng chữ

Một phần của tài liệu Kỹ thuật nén dữ liệu burrow wheeler và các cải tiến (Trang 40 - 65)