TRƯỜNG ĐẠI HỌC M HÀ NỞ ỘI KHOA CÔNG NGHỆ THÔNG TIN --- BÀI TẬP LỚN MÔN: CÔNG NGHỆ ĐA PHƯƠNG TIỆN ĐỀ 2 Tìm hiểu thuật toán nén số học, cho ví d minh hoụ ạ Giảng viên hư ng d n: Tr n Duy
Trang 1TRƯỜNG ĐẠI HỌ C M HÀ N Ở ỘI
KHOA CÔNG NGHỆ THÔNG TIN -
BÀI TẬP LỚN MÔN: CÔNG NGHỆ ĐA PHƯƠNG TIỆN
ĐỀ 2 Tìm hiểu thuật toán nén số họ c, cho ví d minh ho ụ ạ
Giảng viên hư ng d n: Tr n Duy Hùng ớ ẫ ầ Sinh viên thực hiện : Vũ Đức Thọ Lớp : 1910A05
Hà Nội – 2023
Trang 2MỤC LỤC
I GIỚI THIỆU V NÉN D Ề Ữ ỆU LI 3
II PHÂN LOẠI NÉN DỮ ỆU LI 3
1 Nén tổn thất 3
2 Nén không tổn thất 4
III CÁC KHÁI NIỆM LIÊN QUAN 4
1 Nén dữ ệu li 4
2 Sự phân b ký t 4 ố ự 3 Sự lặ p lại các ký t 4 ự 4 Độ dư th ừa 4
5 Đơn vị đo thông tin(Entropy) và đ dài trung bình c ộ ủa từ mã 5
IV THUẬT TOÁN NÉN SỐ HỌC 5
1 Sơ lược về thuật toán nén s ố học 5
2 Ý tưởng thuật toán 5
2.1 Mã hoá 6
2.2 Giải mã 6
3 Thuật toán 6
3.1 Mã hoá 6
3.2 Giải mã 10
V VÍ DỤ MINH HO Ạ 11 VI TÀI LIỆU THAM KHẢO 13
Trang 3I GIỚI THIỆU V NÉN D Ề Ữ ỆU LI
Cùng với sự hoà nh p cậ ủa tin h c vớọ i các lĩnh vực trong đ i sống hi n ờ ệ đại ngày nay thì việc xử lý các lo i tạ ập tin với các kiểu file khác nhau là điều tất yếu, và cá loại tập tin này thư ng có kích thườ ớc lớn nên nhi u khi ề
nó gây khó khăn trong công tác truy n gề ửi và lưu tr Vì vữ ậy, khi lưu trữ hay truy n gề ửi ngư i ta mong muờ ốn giảm đến mức thấp nhất dung lượng
bộ ớ nh mà các tập tin này chiếm dụng để dễ dàng t chức, quản lý và tiết ổ kiệm kinh phí
Để đáp ng các yêu c u trên ngưứ ầ ời ta đã nghĩ ra các phương pháp làm cho các thông tin đó chiếm ít dung lượng hơn b ng cách nén chúng Hiằ ểu đơn gi n thì đó là quá trình giả ảm dung lượng nhớ cần thiết cho các tập tin
mà vẫn bi u diể ễn cùng một lượng thông tin như trước
Đã có rất nhi u phương pháp nén đưề ợc cho ra đời M t trong sộ ố đó là
thuật toán nén số học
Thuật toán nén số học đư c sợ ử dụng đ nénể dữ liệu b ng cách sằ ử dụng
mã hoá entropy Thuật toán này được đề xuất lần đ u tiên vào năm 1976 ầ bởi nhà toán học người Mỹ Robert M Fano Thuật toán này sử dụng phép tính số học đ mã hoá các ký tể ự trong chu i dỗ ữ liệu
II PHÂN LOẠI NÉN DỮ ỆU LI
Nén dữ liệu chia thành 2 dạng là nén t n thổ ất và nén không tổn thất
1 Nén tổn thất
- Nén tổn thất là kỹ thu t nén chậ ấp nh n mậ ất mát m t lượng thông tin ộ nhất đinh để đạt được hiểu qu nén cao, nén t n thả ổ ất thích hợp với các tập tin hình nh, âm thanh đã đưả ợc số hoá Theo b n chả ất việc
biểu di n thông tin tương tễ ự ới dạng s ngay tdư ố ừ đầu đã chứa các sai số Hầu hết các kỹ thuật nén tổn thất đều có thể diều ch nh đỉ ể cân
Trang 4bằng giữa độ chính xác và hiệu quả nén, Đối v i các thông tin bớ ị mất mát không phải là vấn đ quan tr ng bề ọ ởi vì nó có thể được khôi ph c ụ lại, Do đó ở đây chúng ta ch quan tâmỉ đến hi u quệ ả nén mà thôi
2 Nén kh ông tổ n th ất
- Nén không tổn thất là phương pháp nén đảm bảo không mất mát thông tin sau quá trình mã hoá và gi i mã Sau khi nén và gi i nén ả ả thì nó ph i tả ạo ra một bản sao chính xác so với lúc đầu Kỹ thuật này
sử dụng đ lưu tr và truy n cá cơ sể ữ ề ở dữ liệu, các b ng tính đi n tả ệ ử,
cá văn bản… vì với vavs t p tin này thì việậ c mất mát dù chỉ 1 bit thông tin cũng là điều không thể chấp nh n đưậ ợc
III CÁC KHÁI NIỆM LIÊN QUAN
1 Nén dữ ệu li
- Nén dữ liệu là quá trình giảm dung lượng thông tin “dư thừa” trong
dữ liệu gốc và làm cho lượng thông tin thu được sau nén thường nhỏ hơn dữ liệu gốc rất nhiều Do vậy, ti t kiệm được bộ nhớ ế và giảm
thời gian trao đổi dữ ệu trên, mang lạli i thông tin mà l i cho phép ạ chúng ta khôi phục lạ ữ ệu i d li ban đầu
2 Sự phân b ký t ố ự
- Một số ký t (Pixel) xuấự t hiện vớ ần xuấ ớn hơn so với t t l i các ký tự khác t ng dỏ ữ liệu gốc(ảnh, ) Ta có thể thay th nhữế ng ký t này ự bằng từ mã nhị phân nhi u bit hơn và các ký tề ự xuất hiện ít hơn b ng ằ
mã nhị phân ít bit hơn
3 Sự lặ p lại cá ký t c ự
- Một chu i cá ký tỗ ự (bit 1 hoặc 0) đư c lợ ặp lại nhiều l n Ta có thầ ể
mã hoá chuỗi lặp đó b ng it bit hơn.ằ
4 Độ dư th ừa
Trang 5- Nếu nh ng ký t nào đó xuữ ự ất hiện ở một v trí mà ta có thị ể đoán trước đư c khi mã hoá ta có thợ ể giữ vị trí mà ký tự đó xuất hiện thay
vì lưu trữ các ký t đó ự
5 Đơn vị đo thông tin(Entropy) và độ dài trung bình c ủa từ mã
- Lý thuyết thông tin sử dụng thuật ngữ Entropy là đơn vị đo thông tin được mã hoá trong một thông điệp Entropy của một thông điệp càng cao thì thông tin nó chứa đựng càng nhiều
- Độ dài trung bình của từ mã là giá trị trung bình của tất cả các từ mã trong m t bộ ộ mã Đ dài trung bình của t mã không th nào nhộ ừ ể ỏ hơn entropy của nguồn số liệu được mã hoá và do đó một bộ mã t i ố
ưu là một bộ mã có độ dài trung bình cảu từ mã gần với entropy của nguồn dữ liệ u
IV THUẬT TOÁN NÉN SỐ HỌC
1 Sơ lược về thuật toán nén s ố học
- Nén số học là một trong những phương pháp nén không t n hao tuy ổ nhiên ngay t khi ra đừ ời, phương pháp này không mang tính khả thi
vì nó phức tạp về mặt khái niệm lẫn việc th c hiự ện trong thực tế Khi thực hiện phương pháp này nó yêu c u bộ nhớ ầ có dung lượng l n, ớ thời gian thực hiện lâu nên trong một th i gian dài nó vờ ẫn chỉ mang tính thử nghiệm ở trong các cuộc thí nghiệm và nghiên cứu Cho đ n ế khi có sự phát tri n cể ủa t c đố ộ tính toán cũng như dung lượng bộ nhớ các máy tính thì phương pháp này mới được người ta chú ý đến nhi u ề hơn Khi đó người ta m i nghĩ đến viớ ệc áp dụng phương pháp này vào trong thực tế
2 Ý tưởng thuật toán
Trang 6Thuật toán nén số học áp dụng cho rất nhiều việc như nén hình ảnh, văn bản, dữ liệu,… Dưới đây là chi ti t thu t toán nén văn bế ậ ản
2.1 Mã hoá
- Không thay thế cá ký tự đầu vào b ng cá tằ ừ mã riêng biệt mà thay
th luế ồng ký hi u đ u vào b ng mệ ầ ằ ột từ mã duy nhất ở đầu ra Đ u ra ầ
là m t sộ ố lớn hơn 0 và nh hơn 1 ỏ
- Phân chia khoảng giữa 0 và 1 d a vào sự ự phân b xác suố ất của kí hiệu trong mô hình đax xây d ng đự ể bắt đầu hoạt động Kho ng này ả
được tính lại sau khi có m t ký tộ ự ợc mã hoá đư
- Giả sử chúng ta có một thông điệp bao g m các ký t khác nhau ồ ự thuộc bảng chữ cái alphabet có độ lớn giới hạn Cũng giả sử rằng chúng ta biết xác su t xu t hiấ ấ ện của mỗi ký tự là khác nhau, và ta tìm cách diễn tả lại thông điệp đó mà dùng một số bit nhỏ nhất có th ể Với thu t toán nén sậ ố học nó không tạo ra t ng từ ừ mã riêng biệt cho từng ký tự mà nó chỉ tạo ra một từ mã duy nhất cho toàn bộ nguồn
số liệu T mã này sừ ẽ bị thay đổi trong quá trình mã hoá m i khi có ỗ thêm m t ký tộ ự được mã hoá Do đó t mã ừ ở đầu ra không còn là một số nguyên các bit nữa mà là một số lẻ các bit Vì vậy nó g n vầ ới entropy hơn mà mang lại hiệu qu nén tả ốt nhất
2.2 Giải mã
- Để giải mã ta tìm ký tự đầu tiên của thông điệp b ng cáh tìm xem ằ giá trị củ ừ a t mã mà b mã hoá gưộ ở đến là bao nhiêu và nằm trong khoảng nào và nó tương đương với ký tự nào và xuất nó ra
3 Thuật toán
3.1 Mã hoá
Trang 7- Bước mã hoá cơ sở của bộ mã hoá được th c hiự ện bới arithmetic_encode(l,h,t) trong đó l và h l n lưầ ợt là mức thấp và mức cao c a biủ ến đ m trước khi tích luỹ số tầế n s trong ngữ cảnh của các ố
ký tự tương ứng, hàm này mã hoá 1 ký tự giả sử ngầm định nó xuất hiện h - l lần trong t ng sổ ố t lần, và nó chỉ định vùng xác suất là [ l/h, h/t ] Tr ng thái nạ ội t i cạ ủa bộ mã hoá được cho bởi 2 giá tr là R và ị
L, trong đó L là mức thấp hi n t i và R là vùng củệ ạ a đoạn đang mã hoá, và tại m i giai đoỗ ạn thì thông đi p có thệ ể được diễ ả bất kì n t giai đo n nào trong đo n [ L, ạ ạ L+R ] Giá trị L và R được th hiệể n thông qua b bit, L được kh i tạở o là 0 và nó có giá trị nằm giữa 0 và (2^b) – [2^(b-2)], R được khởi to là 2^(b ạ -1) và có giá trị nằm giữa 2^(b-2) + 1 và 2^(b 1) Cho 0 1 h - £ £ £ t và t là tổng t n sầ ố của tất
cả ký t khác nhau đư c chự ợ ỉ định trong ngữ cảnh, t phải tho mãn ả điều ki n t ệ £ 2^f với f là s bit đã dùng đố ể giữ tần số của ký t cà có ự thể không vượt quá giá tr điều khi n bị ể ởi lựa chọn của b và kích thước máy đang dùng
Đầu vào là các bi n thành ph n l, h, t ế ầ
Đầu ra là các bit bi u di n kí t ể ễ ự đó
Trang 8- Hoạt động cơ sở của b mã hoá, trong các bước 1, 2 và 3 là làm nhỏ ộ khoảng [L, L + R ) thành các kho ng nh hơn đả ỏ ể biểu di n cá ký tễ ự mới [ l/t, h/t ], mang l i m t vùng m i là [L + R.l/t, L+ R.h/t] Giá trạ ộ ớ ị của L và R được cập nhật để phản ánh vùng mới này Vùng này phải chuẩn hoá l i thành các giai đo n đ ngăn c n nó trạ ạ ể ả ở thành các khoảng quá nhỏ để ễn t dùng b bit cdi ả ủa giá trị này
- Để giảm tối đa sự mất mát hiệu qu nén bả ởi sự chia không chính xác của không gian mã, R nên được gi a ữ ở giá trị lớn n u có thế ể và trong hoạt động hi n tệ ại, nó pahir có độ rộng tối thiểu cũng như t Đi u này ề được th c hiự ện b ng cách duy trì trong kho ng 2^(b 2) < R < 2^(bằ ả - -1) trước mỗi bước mã hoá và khẳng đ nh r ng t ị ằ £ 2^f với f £ b-2 Đó
là R ph i đưả ợc chuẩn hoá một cánh định kỳ với m t hoộ ặc nhiều hơn
cá bit ở đầu ra Chi tiết của quá trình chuẩn hoá này phù h p vợ ới sự chuẩn hoá l i của L, R và chu n hoá l i R là m t bưạ ẩ ạ ộ ớc c a ủ arithmetic_encode()
Trang 9- Trong thuật toán chuẩn hoá lại R trong bộ mã hoá, khi L và L+R đều
£ 2^(b-1), bit 0 có thể là đầu ra và L, R nên đi u ch nh cho đúng ề ỉ Tương tự, k t quế ả đầu ra có thể là bit 1 khi cả 2 đ u l n hoen 2^(bề ớ -1) Khi R £ 2^(b-2) và cả 2 trư ng h p trên khôgn ch p nh n, kho ng ờ ợ ấ ậ ả [L, L+R) phải thuộc 2^(b-1) Trong trường h p th 3 thì biợ ứ ến bit_outstanding được tăng, đây là biến lưu trữ tấ ả t c các bit biểu di n ễ
ký tự đầu vào, do đó bit 0 hoặc 1 c a đủ ầu ra s đi theo sau bẽ ởi m t ộ hoặc nhi u bit đề ối lập với nó Hàm bit_plus_follow() kiểm tra vị tí
có sự tồn tại các bit ngư c nhau c a các bit tợ ủ ại th i gian mà nó đườ ợc gọi là trên đầu ra với m t bit khác đã biộ ết
- Hàm big_plus_follow(x): Ghi bit x có giá trị 0 hahy 1 vào dãy bit đầu ra C ng vào bộ ất kỳ một bit tự do nào voà sau cá bit đó n u biế ết được rằng nó ngư c nhau: ợ
big_plus_follow(x)
{
Trang 101 write_one_bit(x) –
2 Trong khi bit_outstanding >0 ch– ạy
Gán bit_outstanding = bit_outstanding – 1 }
Giá trị mới của L và R sẽ ể th hiện việc thay đổi trạng thái mã hoá các thông tin còn lại của ký tự
3.2 Giải mã
- Với V là của sổ hiện tại mở rọng với b bit vào luồng bit đã nén 2 hàm decode_target(t) và arithmetic_decode(l,h,t) tương đương với 2
bước cơ bản được yêu cầu để ải mã m t ký t Giá tr target() dgi ộ ự ị ựa trên V và giá tị của t đã dùng trong mã hoá tương đương, nó đáp ứng cho quá trình tìm kiếm c u trúc dấ ữ liệu và xác đ nh ký tị ự s, tìm ký
tự với 1 target £ £ h Rồ ọi g i hàm aritthmetic_decode() thay đ i giá ổ trị của cá biến L và R để ể th hiện sự thay đ i tương đương trong bổ ộ
mã hoá khi gọi hàm arithmetic_encode()
Trang 11- Hàm decode_target():
decode_target()
{
Return (((V – L +1) x t) -1)/R
}
V VÍ DỤ MINH HO Ạ
Cho tần số xuất hiện ký tự A là 1/4 và tần số xuất hiện ký tự B là 3/4 Xét việc mã hóa trong trường hợp chuỗi mã hóa là hợp thành của 2 ký tự một
pA=1/4, pB=3/4, pAA = pA x pA = 1/16 , pAB = pA x pB = 3/16, pBA =
pB x pA = 3/16 , pBB = pB x pB = 9/16
Sau khi đã chia được các khoảng cho mỗi ký tự đơn, tiếp tục chia các khoảng của bước trước cho 2 ký tự ghép Cụ thể là khoảng [0, 1/ 4) của A
Trang 12được chia thành hai khoảng cho AA, AB dựa vào tần số xuất hiện của chúng
Trang 13VI TÀI LIỆU THAM KHẢO
[1]-https://neptune.ai/blog/lossless data -
-compression-using-arithmetic - encoding-in python- - and - - its applications - - in deep learning -[2]- https://go-compression.github.io/algorithms/arithmetic/
[3]-https://www.sciencedirect.com/topics/computer-science/arithmetic coding