Tiếp cận mã huffman theo tần suất và ứng dụng

77 181 3
Tiếp cận mã huffman theo tần suất và ứng dụng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG HOÀNG VĂN SÁNG TIẾP CẬN MÃ HUFFMAN THEO TẦN SUẤT VÀ ỨNG DỤNG LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH Thái Nguyên - 2015 Học viên: Hoàng Văn Sáng – Lớp CHK12I ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG HOÀNG VĂN SÁNG TIẾP CẬN MÃ HUFFMAN THEO TẦN SUẤT VÀ ỨNG DỤNG Chuyên ngành: KHOA HỌC MÁY TÍNH Mã số: 60 48 01 01 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH NGƯỜI HƯỚNG DẪN KHOA HỌC PGSTSKH NGUYỄN XUÂN HUY Thái Nguyên - 2015 Học viên: Hoàng Văn Sáng – Lớp CHK12I i LỜI CAM ĐOAN Học viên xin cam đoan luận văn công trình nghiên cứu riêng cá nhân tôi, kết luận văn hoàn toàn kết tự thân tìm hiểu, nghiên cứu hướng dẫn giáo viên hướng dẫn PGS.TSKH Nguyễn Xuân Huy Học viên hoàn toàn chịu trách nhiệm tính pháp lý trình nghiên cứu khoa học luận văn Thái Nguyên, tháng 10 năm 2015 Học viên Hoàng Văn Sáng Học viên: Hoàng Văn Sáng – Lớp CHK12I ii LỜI CẢM ƠN Lời đầu tiên, học viên xin gửi lời biết ơn sâu sắc đến PGS.TS Nguyễn Xuân Huy người tận tình hướng dẫn, bảo, giúp đỡ học viên suốt trình làm luận văn Học viên xin gửi lời cảm ơn đến thầy cô giáo trường Đại học Công nghệ thông tin Truyền thông - Đại học Thái Nguyên, thầy cô Viện Công nghệ thông tin truyền đạt kiến thức giúp đỡ học viên suốt trình học tập Học viên xin gửi lời cảm ơn tới Ban giám đốc Trung tâm Tin học - nơi học viên công tác - tạo điều kiện thuận lợi cho học viên tham gia khóa học trình hoàn thành luận văn Và học viên xin gửi lời cảm ơn tới đồng nghiệp, gia đình bạn bè, người ủng hộ, động viên tạo điều kiện giúp đỡ để học viên có kết ngày hôm Thái Nguyên, tháng 10 năm 2015 Học viên Hoàng Văn Sáng Học viên: Hoàng Văn Sáng – Lớp CHK12I iii MỤC LỤC Trang LỜI CAM ĐOAN i MỤC LỤC iii DANH MỤC CÁC HÌNH v MỞ ĐẦU 1 Đặt vấn đề Đối tượng phạm vi nghiên cứu Hướng nghiên cứu đề tài Phương pháp nghiên cứu Ý nghĩa khoa học đề tài Bố cục luận văn CHƯƠNG 1: TỔNG QUAN VỀ NÉN DỮ LIỆU 1.1 Vấn đề nén liệu 1.2 Bài toán nén liệu 1.3 Phân loại chương trình nén 1.4 Chất lượng thuật toán nén liệu 1.5 Vấn đề giải nén 1.6 Nén không tổn hao nén tổn hao 11 1.7 Nén không tổn hao 11 1.8 Nén tổn hao 12 1.9 Đơn vị đo đặc tính nén 13 CHƯƠNG 2: TỔNG QUAN VỀ MÃ NÉN HUFFMAN 16 2.1 Mã tiền tố 16 Học viên: Hoàng Văn Sáng – Lớp CHK12I iv 2.2 Biểu diễn mã tiền tố nhị phân 17 2.3 Quy trình nén liệu theo mã Huffman 20 2.3.1 Giới thiệu mã Huffman 20 2.3.2 Phương pháp mã hóa Mã hóa Huffman 20 2.3.3 Tính chất Huffman 21 2.3.4 Thuật toán tạo mã Huffman 21 2.3.5 Giải mã thuật toán Huffman 32 2.4 Xây dựng cải tiến thuật toán 33 CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH NÉN SỬ DỤNG 38 PHƯƠNG PHÁP MÃ HÓA HUFFMAN 38 3.1 Cấu trúc chương trình 38 3.2 Các thuật toán nhóm 38 3.2.1 Thuật toán A1: Nén Huffman 38 3.2.2 Thuật toán A2: Dựng Huffman 39 3.2.3 Thuật toán A3: Huffman code 40 3.2.4 Thuật toán A4: Giải mã Huffman 42 3.3 Giới thiệu chương trình 44 3.4 Kết kiểm thử chương trình 47 KẾT LUẬN 49 TÀI LIỆU THAM KHẢO 51 Chương trình chi tiết thực giải thuật ngôn ngữ Dev-C++ 52 Học viên: Hoàng Văn Sáng – Lớp CHK12I v DANH MỤC CÁC HÌNH Trang Hình 1: Quy trình nén liệu Hình 2: Bộ nén giải nén 10 Hình 3: Bộ mã hóa giải mã 10 Hình 4: Những thuật toán nén không hao tổn 11 Hình 5: Các thuật toán nén tổn hao 12 Hình 1: Sắp xếp danh sách kí tự (ví dụ 1) 22 Hình 2: Xây dựng Huffman (ví dụ 1) 25 Hình 3: Cây Huffman điền đầy đủ thành phần (ví dụ 1) 26 Hình 4: Sắp xếp danh sách kí tự (ví dụ 2) 27 Hình 5: Xây dựng Cây Huffman (ví dụ 2) 30 Hình 6: Cây Huffman điền đầy đủ thành phần (vi dụ 2) 31 Học viên: Hoàng Văn Sáng – Lớp CHK12I MỞ ĐẦU Đặt vấn đề Một chức máy tính xử lý liệu lưu trữ Bên cạnh việc xử lý nhanh, người ta quan tâm đến việc lưu trữ nhiều liệu lại tiết kiệm vùng nhớ giảm chi phí lưu trữ Về mặt lý thuyết thiết bị lưu trữ giới hạn, ngày nhu cầu xử lý nhiều tập tin, nhiều loại liệu tệp, mà kích thước tệp trở nên lớn Những vấn đề nảy sinh khái niệm nén liệu Nén liệu trình làm giảm lượng thông tin “dư thừa” liệu gốc, lượng thông tin thu sau nén thường nhỏ liệu gốc nhiều Nén liệu giải pháp hợp lý nhằm mục đích giảm chi phí cho người sử dụng Một kĩ thuật thường dùng nén liệu xác định tần suất xuất đối tượng file nguồn Đối tượng xuất nhiều mã ngắn Heuristics sử dụng thuật toán nén Huffman Với văn cho trước, thuật toán đếm số lần xuất kí tự văn sau xây dựng Huffman cuối từ Huffman sinh mã nén Nếu ta xác định tần suất xuất chữ ngôn ngữ cho trước chương trình thực thủ tục đếm Vì vậy, “Tiếp cận mã Huffman theo tần suất ứng dụng” học viên chọn làm luận văn tốt nghiệp Đối tượng phạm vi nghiên cứu  Đối tượng: - Các phần mềm nén liệu Học viên: Hoàng Văn Sáng – Lớp CHK12I - Các thuật toán nén liệu - Các phương pháp mã hóa Huffman - Hệ thống phần mềm nén liệu  Phạm vi: - Các khái niệm ký tự mã hóa, thuật toán nén văn Kiến trúc, chức thành phần nén liệu cụ thể cho toán nén sử dụng phương pháp mã hóa Huffman - Các chức quy trình thực thi toán nén liệu - Hệ thống chương trình cho toán nén liệu Hướng nghiên cứu đề tài - Tìm hiểu tổng quan nén liệu nghiên cứu thuật toán nén cụ thể - Tìm hiểu toán nén liệu, tiến hành phân tích - Thu thập số liệu có liên quan - Phân tích, đánh giá thông qua số liệu thu thập - Cài đặt thực nghiệm Phương pháp nghiên cứu - Phương pháp nghiên cứu lý thuyết: Tổng hợp tài liệu, hệ thống lại kiến thức, tìm hiểu khái niệm, thuật toán sử dụng đề tài - Phương pháp quy nạp toán học - Phương pháp đối sánh - Phương pháp trao đổi khoa học, lấy ý kiến chuyên gia Ý nghĩa khoa học đề tài - Sau thực đề tài học viên có thêm hiểu biết công trình khoa học nghiên cứu Học viên: Hoàng Văn Sáng – Lớp CHK12I - Đề tài đóng góp phương pháp kĩ thuật tối ưu hóa lĩnh vực mã hóa Bố cục luận văn Bố cục luận văn bao gồm chương: Chương 1: Tổng quan nén liệu Chương học viên trình bày tổng quan đề tài, khái niệm nén liệu, phương pháp nén liệu, phân loại đánh giá chất lượng chương trình nén Chương 2: Tổng quan mã nén Huffman Chương học viên trình bày mã tiền tố, cách biểu diễn mã tiền tố nhị phân, quy trình nén liệu theo mã Huffman, thuật toán tạo mã Huffman giải mã Huffman Chương 3: Xây dựng chương trình nén sử dụng phương pháp mã hóa Huffman Dựa vào sở lý thuyết thuật toán trình bày chương 2, chương này, học viên trình bày ứng dụng thực tế cài đặt chương trình thực nghiệm cụ thể Học viên: Hoàng Văn Sáng – Lớp CHK12I 56 inline SI GetCharbb() { return GetIntbb(8); } // Kich thuoc file (bytes) UL FileSize(const char * fn) { FILE * f; UL s = 0; if ((f = fopen(fn,"rb")) == NULL) return s; s = filelength(fileno(f)); // File size fclose(f); return s; } // Kiem tra input file // * Ton tai? // * Kich thuoc < MN bool CheckInput(const char * fn) { UL s = FileSize(fn); return (s > && s < MN); } // Doc toan bo du lieu tu file fn vao s // return: so bytes thuc doc UL Read(const char * fn, UC s[]) { UL k; FILE * f; if (!(f = fopen(fn, "rb"))) { cout [...]... Sáng – Lớp CHK12I 17 mã hóa của cả từ là 0001010010 Để giải mã ta đọc hai bit một và đối chiếu với bảng mã Nếu mã hóa ‘A’=0, ‘R’=01, ‘Y’=11 thì bộ từ mã này không là mã tiền tố ví từ mã của ‘A’ là tiền tố của từ mã của ‘R’ Để mã hóa cả từ ARRAY phải đặt dấu ngăn cách vào giữa các từ mã 0,01,01,0,11 Nếu mã hóa ‘A’=0, ‘R’=10, ‘Y’=11 thì bộ mã này là mã tiền tố Với bộ mã tiền tố này khi mã hóa xâu “ARRAY"... 2.3.1 Giới thiệu về mã Huffman Trong khoa học máy tính và lý thuyết thông tin, mã Huffman là một thuật toán mã hóa dùng để mã hóa dữ liệu Nó dựa trên bảng tần suất xuất hiện các kí tự cần mã hóa để xây dựng một bộ mã nhị phân cho các kí tự đó sao cho dung lượng (số bít) sau khi mã hóa là nhỏ nhất Thuật toán được đề xuất bởi David A Huffman khi ông còn là nghiên cứu sinh Ph.D tại MIT, và công bố năm 1952... hạn dãy aa và ký hiệu c cùng một mã là 00 - Cách mã hóa thứ III: Ký hiệu Mã III a 1 b C d e f 010 011 0010 000 0011 Cách mã hóa thứ ba này cho chiều dài bản tin là: 1010(1*40+3*10+3*15+3*5+3*20+4*10)/100 = 2,3*1010 Cách mã III ngắn hơn cách mã I và có tính chất sau: - Không có chuỗi mã ký hiệu nào là tiền tố (tức dãy con đầu) của chuỗi mã của ký hiệu khác Mọi mã thỏa mãn tính chất này gọi là mã tiền tố... đã có từ lâu Ví dụ, sử dụng ký hiệu O[CLRS01] với yêu cầu hiệu quả thời gian và lưu trữ Tuy nhiên, hoạt động của các thuật toán nén có thể không nhất quán Vì thế nó có thể sử dụng các kết quả thực nghiệm trước đây Thời gian nén: Ta thường xem xét thời gian mã hóa và giải mã tách biệt nhau Trong một số ứng dụng, thời gian giải mã quan trọng hơn thời gian mã hóa Trong các ứng dụng khác, chúng quan trọng... đặt tại nguồn và đích của một kênh truyền thông Trong trường hợp này, bộ nén tại nguồn thường được gọi là bộ mã hóa và bộ giải nén tại đích của thông điệp được gọi là bộ giải mã Hình 1.3 cho thấy một mô hình dựa trên quan hệ giữa bộ mã hóa và bộ giải mã được kết nối bởi một kênh truyền dẫn Hình 1 3: Bộ mã hóa và bộ giải mã Học viên: Hoàng Văn Sáng – Lớp CHK12I 11 1.6 Nén không tổn hao và nén tổn hao... Codes" Sau này Huffman đã trở thành giảng viên ở MIT và sau đó ở khoa Khoa học máy tính của Đại học California, Santa Cruz, Trường Kỹ nghệ Baskin (Baskin School of Engineering) Mã Huffman thích hợp với kiểu dữ liệu văn bản Tư tưởng chính như sau: Thay vì lưu trữ mỗi ký hiệu là 8 bit (mã ASCII), dựa vào tần suất xuất hiện của mỗi ký hiệu mà ta sẽ biểu diễn ít bit đối với ký hiệu có tần suất cao và nhiều bit... được gọi là mã hóa Huffman, và ngược lại, xây dựng từ nút gốc rồi đi sâu xuống các lá, được gọi là phương pháp Shanon -Fano Để xây dựng cây nhị phân theo kiểu từ dưới lên, cần phải đưa ra các cặp lá, gộp chúng lại, và xây dựng lặp lại cho tới khi đến nút gốc mới thôi 2.3.3 Tính chất cây Huffman  Nhánh trái tương ứng với mã hóa bít ’0’; nhánh phải tương ứng với mã hóa bít ’1’  Các nút có tần số thấp... HUFFMAN 2.1 Mã tiền tố Để mã hóa các kí hiệu (kí tự, chữ số, ) ta thay chúng bằng các xâu nhị phân, được gọi là từ mã của kí hiệu đó Chẳng hạn bộ mã ASCII, mã hóa cho 256 kí hiệu là biểu diễn nhị phân của các số từ 0 đến 255, mỗi từ mã gồm 8 bít Trong ASCII từ mã của kí tự ‘a’ là 1100001, của kí tự ‘A’ là 1000001 Trong cách mã hóa này các từ mã của tất cả 256 kí hiệu có độ dài bằng nhau (mỗi từ mã 8 bít)... đáng kể trong bản mã Một cách giải quyết khác dẫn đến khái niệm mã tiền tố Mã tiền tố là bộ các từ mã của một tập hợp các kí hiệu sao cho từ mã của mỗi ký hiệu không là tiền tố (phần đầu) của từ mã một ký hiệu khác trong bộ mã ấy Ví dụ: Giả sử mã hóa từ "ARRAY", tập các ký hiệu cần mã hóa gồm 3 chữ cái ‘A’, ‘R’, ‘Y’ Nếu mã hóa bằng các từ mã có độ dài bằng nhau ta dùng ít nhất 2 bit cho một chữ cái chẳng... một mã tiền tố Với mỗi lá x, mức h(x) của x chính là chiều dài chuỗi mã của x gọi f(x) là tần suất xuất hiện thì chiều dài chuỗi mã bản tin là: LĒ h(x)Ēf(x) xX trong đó L là số ký hiệu của bản tin Độ dài trên ngắn nhất khi và chỉ khi cây T có E(T) =  h(x)Ēf(x) xX đạt giá trị nhỏ nhất Cây T như vậy gọi là cây mã tối ưu Học viên: Hoàng Văn Sáng – Lớp CHK12I 20 2.3 Quy trình nén dữ liệu theo mã Huffman

Ngày đăng: 29/05/2016, 16:53

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan