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

75 190 0
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 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ ĐẠ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 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ 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 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 LỜI CẢM ƠN Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ ii 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ó đƣợc kết nhƣ ngày hôm Thái Nguyên, tháng 10 năm 2015 Học viên Hoàng Văn Sáng MỤC LỤC Trang Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ iii 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 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 Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ iv 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 toá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/ v 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 toá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ữ đƣợc nhiều liệu nhƣng lại tiết kiệm đƣợc 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, nhƣng 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 đƣợc 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 đƣợc 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” đƣợc 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 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 - 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 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ể Số hóa Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ 54 } // Add an reversed integer v to bb, take only left most size bits inline void AddInvbb(int v, int size) { for (SI i = size-1; i >= 0; i) AddBitbb(GetBit(v,i)); } // Add char c to bb inline void AddCharbb(int c) { AddIntbb(c,8); } // Lay bit tai vi tri bitcount khoi bb, giam bitcount inline SI GetBitbb() { int v = (bb[Byte(bitcount)] >> Bit(bitcount)) & 1; bitcount++; return v; } // Lay tu bb so nguyen size bit inline int GetIntbb(int size) { int v = 0; for (int i = 0; i < size; ++i) { if (GetBitbb()) v |= (1 && 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 L); DelTree(p->R); delete p; } // Cay nhi phan dung de giai ma void DTree(){ t = NewNode(); // cout [...]... http://www.lrc.tnu.edu.vn/ 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"... 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ố... định 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 2.3 Quy trình nén dữ liệu theo mã Huffman 2.3.1 Giới thiệu về mã Huffman Trong... 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 Số hóa bởi Trung tâm Học liệu - ĐHTN http://www.lrc.tnu.edu.vn/ 20 đề xuất bởi David A Huffman khi ông còn là nghiên cứu sinh Ph.D tại MIT, và. .. 16 CHƢƠNG 2: TỔNG QUAN VỀ MÃ NÉN 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... 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... thời gian và lƣu trữ Tuy dụng ký hiệ 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ự Thời gian nén: Ta thƣờng xem xét thờ ải mã tách biệt nhau Trong một số ứng dụng, thời gian giả ọng hơn thời gian mã hóa Trong các ứng dụng khác, chúng quan trọng nhƣ nhau Entropy: Nếu thuật toán nén dựa trên các kết quả thống kê, thì entropy có thể đƣợc sử dụng nhƣ... đá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... số thấp nằm ở xa gốc -> mã bít dài  Các nút có tần số cao nằm ở gần gốc -> mã bít ngắn  Số nút của cây: (2n-1) 2.3.4 Thuật toán tạo mã Huffman Thuật toán Huffman đƣa cho chúng ta cách xây dựng một cây đơn từ một nhóm (một rừng) các cây Ban đầu, tất cả các cây có một nút đơn tƣơng ứng với một kí tự và tần số xuất hiện của kí tự đó Các cây đƣợc kết hợp bằng cách chọn ra hai cây và tạo ra một cây mới ... 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 đƣợc học... 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... gọi mã tối ƣu 2.3 Quy trình nén liệu theo mã Huffman 2.3.1 Giới thiệu mã Huffman Trong khoa học máy tính lý thuyết thông tin, mã Huffman thuật toán mã hóa dùng để mã hóa liệu Nó dựa bảng tần suất

Ngày đăng: 06/01/2016, 14:51

Từ khóa liên quan

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

  • Đang cập nhật ...

Tài liệu liên quan