Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 77 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
77
Dung lượng
2,15 MB
Nội dung
ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THƠNG HỒ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 ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THƠNG HỒ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 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, Học viên hồn tồ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 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 q trình hồ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 Hồng Văn Sáng Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ MỤC LỤC Trang LỜI CAM ĐOAN i MỤC LỤC ii 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 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 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ 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 19 2.3.1 Giới thiệu mã Huffman 19 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 31 2.4 Xây dựng cải tiến thuật toán 32 CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH NÉN SỬ DỤNG 37 PHƯƠNG PHÁP MÃ HÓA HUFFMAN 37 3.1 Cấu trúc chương trình 37 3.2 Các thuật tốn nhóm 37 3.2.1 Thuật toán A1: Nén Huffman 37 3.2.2 Thuật toán A2: Dựng Huffman 38 3.2.3 Thuật toán A3: Huffman code 39 3.2.4 Thuật toán A4: Giải mã Huffman 41 3.3 Giới thiệu chương trình 43 3.4 Kết kiểm thử chương trình 46 KẾT LUẬN 48 TÀI LIỆU THAM KHẢO 50 Chương trình chi tiết thực giải thuật ngôn ngữ Dev-C++ 51 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ DANH MỤC CÁC HÌNH Trang 1: Quy trình nén liệu 2: Bộ nén giải nén 10 3: Bộ mã hóa giải mã 10 4: ật tốn nén khơng hao tổn 11 5: Các thuật toán nén tổn hao 12 1: Sắp xếp danh sách kí tự (ví dụ 1) 22 2: Xây dựng Huffman (ví dụ 1) 25 3: Cây Huffman điền đầy đủ thành phần (ví dụ 1) 25 4: Sắp xếp danh sách kí tự (ví dụ 2) 26 5: Xây dựng Cây Huffman (ví dụ 2) 29 6: Cây Huffman điền đầy đủ thành phần (vi dụ 2) 30 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ 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ữ khơng có 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 tố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 khơng phải 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 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ - 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 tố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 tốn nén liệu - Hệ thống chương trình cho tố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 tốn nén cụ thể - Tìm hiểu tố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 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 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ - Đề 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 tố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ể Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ } // Ghi n bytes tu s vao file fn int Write(const char * fn, const UC s[], int n) { int k; FILE * f; if (!(f = fopen(fn, "wb"))) { cout 0) { fre[nfre] = ts[c]; sym[nfre] = c; ++nfre; } } } // Ghi vao bb (xac suat, ki tu) cuoi day: void AddHeader() { for(US c = 0; c < nfre; c++) { AddCharbb(fre[c]); AddCharbb(sym[c]); } // Dat vao cuoi byte va so nguyen 14 bit AddCharbb(0); } Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ // Sau co ma cua tung ki tu Nen Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ void HEncode(const char *fn){ UC c; FILE * f = fopen(fn,"rb"); // cout