MÃ HOÁ NÉN DỮ LIỆU VÀ MÃ HOÁ CÓ KHẢ NĂNG PHÁT HIỆN SAI VÀ SỬA SAI

96 665 1
MÃ HOÁ NÉN DỮ LIỆU VÀ  MÃ HOÁ CÓ KHẢ NĂNG PHÁT HIỆN  SAI VÀ SỬA SAI

Đ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 SƯ PHẠM KHOA TOÁN  MÃ HOÁ NÉN DỮ LIỆU VÀ MÃ HOÁ CÓ KHẢ NĂNG PHÁT HIỆN SAI VÀ SỬA SAI LUẬN VĂN TỐT NGHIỆP ðẠI HỌC THÁI NGUYÊN ðẠI HỌC THÁI NGUYÊN TRƯỜNG ðẠI HỌC SƯ PHẠM KHOA TOÁN  LÊ QUÝ TÀI MÃ HOÁ NÉN DỮ LIỆU VÀ MÃ HOÁ CÓ KHẢ NĂNG PHÁT HIỆN SAI VÀ SỬA SAI Chuyên ngành: Tin học LUẬN VĂN TỐT NGHIỆP ðẠI HỌC Người hướng dẫn khoa học: Thạc sỹ Nguyễn Văn Trường THÁI NGUYÊN – 2007 2 LỜI NÓI ðẦU Máy tính ra ñời giúp con người lưu trữ và xử lý thông tin, bên cạnh việc xử lý nhanh, người ta còn quan tâm ñến việc lưu trữ ñược nhiều thông tin nhưng lại tiết kiệm ñược bộ nhớ và giảm chi phí lưu trữ. Mặt khác, khi mạng máy tính ra ñời, nhu cầu trao ñổi thông tin lại càng lớn hơn, dẫn ñến nhu cầu phải giảm thiểu thời gian và chi phí ñể trao ñổi dữ liệu trên mạng. Khi truyền tin, có thể vì một lí do nào ñó mà tập tin bị lỗi, một câu hỏi ñặt ra là có thể khôi phục lại tập tin ban ñầu từ tập tin lỗi ñó hay không? Tất cả những vấn ñề trên nảy sinh ra khái niệm nén dữ liệu, nén dữ liệu nhằm tiết kiệm không gian lưu trữ cũng như tăng hiệu suất truyền tin, ñồng thời ñây cũng là một phương pháp ñể bảo mật dữ liệu. Cùng với nén dữ liệu thì mã hoá có khả năng phát hiện sai và sửa sai cũng phát triển mạnh bởi ñây là phương pháp mã hoá giúp tăng ñộ tin cậy của dữ liệu khi truyền ñi trên mạng. ðể giải quyết những yêu cầu ñó, cách ñây khoảng nửa thế kỉ, nhiều nhà khoa học ñã phát minh ra những thuật toán ñể phục vụ cho việc nén dữ liệu cũng như phát hiện và sửa sai. ðến nay, những thuật toán ñó ñã ñược cải tiến, tối ưu, ñồng thời nhiều thuật toán mới cũng ra ñời. Vì vậy, tôi ñã chọn nghiên cứu ñề tài: “Mã hoá nén dữ liệu và mã hoá có khả năng phát hiện sai và sửa sai” với mục ñích tìm hiểu các thuật toán ñó và cài ñặt một số thuật toán bằng ngôn ngữ lập trình cụ thể nhằm làm sáng rõ và cải tiến thuật toán. Trong thời gian làm ñề tài, tôi ñã nhận ñược sự giúp ñỡ, chỉ dẫn của Thạc sỹ Nguyễn Văn Trường. ðồng thời tôi cũng nhận ñược những ý kiến ñóng góp của các bạn ñồng nghiệp. Vì thời gian làm ñề tài có hạn nên chắc chắn không tránh khỏi những thiếu sót, rất mong nhận ñược những góp ý của các quý thầy cô và các bạn ñể ñề tài chất lượng và thiết thực hơn. Tôi xin chân thành cảm ơn! Sinh viên Lê Quý Tài 3 MỤC LỤC LỜI NÓI ðẦU 2 MỤC LỤC 3 MỞ ðẦU 5 1. Lí do chọn ñề tài 5 2. Lịch sử nghiên cứu ñề tài 5 3. Mục ñích nghiên cứu ñề tài 6 4. Giới hạn của ñề tài 6 5. Phương pháp nghiên cứu 7 6. Cấu trúc của ñề tài 7 Chương 1. NHỮNG KIẾN THỨC LIÊN QUAN 8 1.1. Cấu trúc dữ liệu cây 8 1.1.1. ðịnh nghĩa và các khái niệm 8 1.1.2. Cây nhị phân 9 1.2. Cấu trúc dữ liệu kiểu con trỏ 12 1.2.1. Khái niệm 12 1.2.2. Sử dụng con trỏ xây dựng cây nhị phân 15 1.3. Vài nét về ngôn ngữ lập trình C và C ++ 17 1.4. Vài nét về ngôn ngữ lập trình Visual Basic 19 Chương 2. CÁC KHÁI NIỆM CƠ BẢN 21 2.1. ðịnh nghĩa và các khái niệm về mã hoá 21 2.1.1. ðịnh nghĩa 21 2.1.2. Một số khái niệm cơ bản về mã hoá 22 2.1.3. Các phương pháp biểu diễn mã 23 2.1.4. ðiều kiện ñể mã phân tách ñược và mã có tính Prefix 26 2.2. Mã hoá nén dữ liệu 27 2.2.1. Khái niệm 27 4 2.2.2. Tầm quan trọng của việc nén dữ liệu 28 2.2.3. Phân loại 29 2.2.4. Giới thiệu một số chuẩn nén 30 2.3. Mã hoá có khả năng phát hiện sai và sửa sai 31 2.3.1. Khái niệm 31 2.3.2. Tầm quan trọng của việc mã hoá sửa sai 31 Chương 3. THUẬT TOÁN NÉN DỮ LIỆU 32 3.1. Các thuật toán nén dữ liệu theo kiểu thống kê 32 3.1.1. Phương pháp mã hoá ñộ dài loạt 32 3.1.2. Mã Shanon - Fano 34 3.1.3. Mã Huffman 39 3.1.4. Mã số học 50 3.2. Các thuật toán nén dữ liệu theo kiểu từ ñiển 54 3.2.2. Thuật toán LZ77 - LZ78 55 3.2.3. Thuật toán LZW 61 Chương 4. MÃ PHÁT HIỆN SAI VÀ SỬA SAI 74 4.1. Mã Hamming 74 4.2. Mã CRC 82 KẾT LUẬN 89 TÀI LIỆU THAM KHẢO 91 PHỤ LỤC 93 5 MỞ ðẦU 1. Lí do chọn ñề tài Trong nhiều năm gần ñây, kết nối mạng máy tính ñã trở nên phổ biến trên thế giới. Sự ra ñời của mạng máy tính ñã thực hiện ñược ước mơ chinh phục khoảng cách giữa con người. Những lợi ích mà mạng cung cấp rất ña dạng và phong phú như: cung cấp, trao ñổi thông tin giữa các máy tính, giữa máy tính với máy chủ hoặc giữa các máy chủ với nhau. ðiều này ñòi hỏi phải có phương pháp nén dữ liệu ñể nâng cao chất lượng, tốc ñộ truyền tin và giảm thiểu chi phí. Trong quá trình truyền tải dữ liệu, có thể vì một lí do nào ñó mà tập dữ liệu bị hỏng, ñòi hỏi cần có phương pháp giúp khôi phục lại tập tin ban ñầu từ tập tin bị hỏng. Nhiều thuật toán nén dữ liệu ñã ñược phát minh, phát triển và tối ưu qua nhiều năm và ñược ứng dụng trong nhiều sản phẩm phần mềm có giá trị phục vụ cho người dùng máy tính. Việc tìm hiểu, cài ñặt và tối ưu các thuật toán ñó là một yêu cầu cấp thiết ñang ñặt ra. Vì vậy, tôi ñã mạnh dạn chọn nghiên cứu ñề tài “Mã hoá nén dữ liệu và mã hoá có khả năng phát hiện sai và sửa sai”. Trên cơ sở ñề tài này, tôi sẽ nghiên cứu và phát triển phần mềm nén dữ liệu với khả năng nén cao và hiệu quả. 2. Lịch sử nghiên cứu ñề tài Những nền tảng ban ñầu của lĩnh vực nén dữ liệu ñã xuất hiện vào những năm 1940 cùng với sự phát triển của lí thuyết thông tin. Những khái niệm ban ñầu ñã ñược ñưa ra cuối những năm 1940 bởi Claude Shanon tại phòng thí nghiệm Bell. Nén dữ liệu liên quan ñến hàng loạt vấn ñề thông tin, bao gồm việc lưu trữ và truyền thông tin. Các nhà nghiên cứu ñã ñưa ra các phương pháp khác nhau ñể nén dữ liệu, trong ñó hai thuật toán mã Huffman và mã Shanon - Fano ñược công bố khá sớm. Thuật toán mã Huffman ñược David A. Huffman ñưa ra năm 1952 và ñược chấp nhận rộng rãi và luôn ñược sử dụng cho các chương trình nén 6 dữ liệu trước năm 1980, còn thuật toán mã Shanon - Fano do Claude Shanon công bố. Do tính ñơn giản, dễ xây dựng, không quá tốn thời gian của CPU nên vẫn ñược sử dụng rộng rãi. ðến năm 1980, hầu hết các phương pháp nén ñều sử dụng phương pháp thống kê. Nhưng vào năm 1977 - 1978, Jacov Ziv và Abraham Lempel ñã mô tả một cặp phương pháp nén sử dụng kết hợp từ ñiển, ñã ñạt ñược một tỉ lệ nén ñầy ấn tượng. ðến năm 1984, Terry Welch’s ñã phát triển thuật toán LZ78 và ñưa ra giới thiệu thuật toán nén dữ liệu LZW (Lempel-Ziv-Welch). Mã Hamming ñược R. W. Hamming ñưa ra và ñược dùng trong một số hệ thống sử dụng kĩ thuật Forward Error Correction (FEC), mã này có khả năng sửa sai một lỗi, mã Hamming ñược sử dụng khá rộng rãi trong thực tế. Ngoài ra, còn rất nhiều phương pháp khác ñể nén dữ liệu cũng như ñể kiểm tra và sửa lỗi: phương pháp của Meggit, Kasamin, Mitchell và Rudolph, giải thuật của Berlekamp… 3. Mục ñích nghiên cứu ñề tài Với ñề tài “Mã hoá nén dữ liệu và mã hoá có khả năng phát hiện sai và sửa sai”, chúng tôi có mục ñích nghiên cứu: - Khái niệm tổng quan về mã hoá và mã hoá nén dữ liệu, mã hoá có khả năng phát hiện sai và sửa sai. - Tìm hiểu các thuật toán nén dữ liệu và cài ñặt bằng ngôn ngữ lập trình một số thuật toán nén dữ liệu tiêu tiểu. - Tìm hiểu về phương pháp mã hoá có khả năng phát hiện sai và sửa sai và cài ñặt mô phỏng bằng ngôn ngữ lập trình. Tuy nhiên, do khái niệm mã hoá nói chung cũng như mã hoá nén dữ liệu và mã hoá có khả năng phát hiện sai và sửa sai khá rộng và phức tạp, do ñó, với khuôn khổ của một luận văn tốt nghiệp, chúng tôi chỉ giới hạn nghiên cứu những nội dung dưới ñây. 4. Giới hạn của ñề tài - Nghiên cứu những nét tổng quan về mã hoá nói chung, mã hoá nén dữ liệu và mã hoá có khả năng phát hiện sai và sửa sai. 7 - Tiến hành cài ñặt bằng ngôn ngữ lập trình một số thuật toán nén dữ liệu và mã hoá sửa sai tiêu biểu, các thuật toán khác chỉ ñược trình bày những nét khái quát và không có chương trình cài ñặt cụ thể. 5. Phương pháp nghiên cứu Với những nội dung giới hạn trên ñây và dựa vào những yêu cầu của ñề tài và tình hình thực tế, chúng tôi ñã chọn những phương pháp nghiên cứu sau: - Phương pháp nghiên cứu tài liệu. - Phương pháp tổng hợp, khái quát hoá - Phương pháp thực nghiệm 6. Cấu trúc của ñề tài Căn cứ theo mục ñích nghiên cứu cũng như giới hạn của ñề tài, chúng tôi chia ñề tài làm 4 chương, với các nội dung chủ yếu của mỗi chương như sau: Chương 1. Những kiến thức liên quan: Trình bày những kiến thức có liên quan có sử dụng khi viết chương trình như: cấu trúc dữ liệu ñộng, cấu trúc dữ liệu kiểu con trỏ, cấu trúc dữ liệu cây…, và một vài nét về các ngôn ngữ lập trình ñược sử dụng ñể viết chương trình (C++, Visual Basic). Chương 2. Các khái niệm cơ bản: Trình bày các ñịnh nghĩa và khái niệm cơ bản về mã hoá, mã hoá nén dữ liệu và mã hoá có khả năng phát hiện sai và sửa sai. Chương 3. Thuật toán nén dữ liệu: Trình bày các thuật toán nén dữ liệu ñược phân loại theo phương pháp nén, ñồng thời trình bày chi tiết về chương trình cài ñặt minh hoạ. Chương 4. Mã phát hiện sai và sửa sai: Trình bày các phương pháp mã hoá có khả năng phát hiện sai và sửa sai cùng với mô tả chi tiết việc cài ñặt minh hoạ của thuật toán. 8 Chương 1. NHỮNG KIẾN THỨC LIÊN QUAN Chương này trình bày những kiến thức liên quan có sử dụng khi cài ñặt các thuật toán nén dữ liệu và mã hoá sửa sai. ðây là các kiến thức cơ sở giúp xây dựng chương trình, vì vậy, chúng tôi sẽ chú ý ñến việc thể hiện của các kiến thức này trên ngôn ngữ lập trình (cụ thể là ngôn ngữ lập trình C). 1.1. Cấu trúc dữ liệu cây 1.1.1. ðịnh nghĩa và các khái niệm Một cây (tree) là một tập hợp hữu hạn các nút trong ñó có một nút dặc biệt ñược gọi là gốc (root), giữa các nút có quan hệ phân cấp gọi là quan hệ “cha-con”. ðịnh nghĩa cây một cách ñệ quy: 1. Một nút là một cây, nút ñó cũng là gốc của cây ấy. 2. Nếu T 1 , T 2 , …, T k là các cây, với n 1 , n 2 , …, n k lần lượt là các gốc. n là một nút và n có quan hệ cha con với n 1 , n 2 , …, n k thì lúc ñó một cây mới T sẽ ñược tạo lập, với n là gốc của nó, n ñược gọi là cha của n 1 , n 2 , …, n k ; ngược lại n 1 , n 2 , …, n k ñược gọi là con của n. Các cây T 1 , T 2 , …, T k ñược gọi là các cây con (subtrees) của n. [6] Quy ước: một cây không có nút nào ñược gọi là cây rỗng (null tree). Chẳng hạn, hình 1.1 dưới ñây biểu diễn một cây: Hình 1.1. Một cây A B C D E F G H I 9 Số các con của một nút gọi là cấp (degree) của nút ñó. Ví dụ, cấp của A là 3, cấp của H là 2. Nút có cấp bằng không gọi là lá (leaf) hay nút tận cùng (terminal node), ví dụ các nút E, C, K,… nút không có lá ñược gọi là nút nhánh (branch node). Cấp cao nhất của nút trên cây gọi là cấp của cây ñó. Ví dụ, cây hình 1.1 là cây cấp 3. Gốc của cây có số mức (level) là 1. Nếu nút cha có số mức là i thì nút con có số mức là i+1. Ví dụ A có mức 1, D có mức 2. Chiều cao (heigh) hay chiều sâu (depth) của một cây là số mức lớn nhất của nút ñó có trên cây ñó. Ví dụ, cây hình 1.1 có chiều cao 4. Nếu n 1 , n 2 , …, n k là dãy nút mà n i là cha của n i+1 với 1 ≤ i < k, thì dãy ñó gọi là ñường ñi (path) từ n 1 tới n k . Ví dụ, trong hình 1.1 ñộ dài ñường ñi từ A ñến K là 3. Nếu thứ tự các cây con của một nút ñược coi trọng thì cây ñang xét là cây thứ tự (ordered tree), ngược lại là cây không có thứ tự (unordered tree). Thường thứ tự các cây con của một nút ñược ñặt từ trái sang phải. Nếu một tập hữu hạn các cây phận biệt thì ta gọi ñó là rừng (forest). 1.1.2. Cây nhị phân 1.1.2.1. ðịnh nghĩa Cây nhị phân là một cây mà mỗi nút trên cây chỉ có tối ña hai con. ðối với cây nhị phân người ta cũng phân biệt cây con trái (left subtree) và cây con phải (right subtree). Như vậy, cây nhị phân là cây có thứ tự. Cây nhị phân hoàn chỉnh (complete binary tree) là cây nhị phân mà các nút ứng với các mức trừ mức cuối cùng ñều ñạt tối ña và ở mức cuối các nút ñều dạt về phía trái. Cây nhị phân ñầy ñủ (full binary tree) là cây nhị phân mà các nút tối ña ở mọi mức. Cây gần ñầy là cây nhị phân mà các nút ứng với các mức trừ mức cuối cùng ñều ñạt tối ña.[6] [...]... cách mã hoá Tóm l i, hai nhi m v l n mà vi c mã hoá c n ph i ñ t ñư c là: tăng hi u su t truy n tin và tăng ñ tin c y T ñây d n ñ n hai hư ng l n c n nghiên c u c a vi c mã hoá là: mã hoá nén d li u và mã hoá có kh năng phát hi n sai và s a sai Chương này gi i thi u m t s khái ni m cơ b n v mã hoá, các phương pháp bi u di n mã, các khái ni m v nén d li u và mã hoá có kh năng phát hi n sai và s a sai. .. n th y b mã có tính prefix khi các t mã ch là nút lá Mã ñ y là b mã có tính prefix Trong th c t , các lo i mã không ñ ng ñ u mà không có tính prefix không ñư c nghiên c u vì không có giá tr th c t , lí do là các thi t b mã hoá và gi i mã quá ph c t p 2.2 Mã hoá nén d li u 2.2.1 Khái ni m Nén là phương pháp mã hoá d li u s nh m làm gi m dung lư ng và gi m ñòi h i băng thông ñ truy n ñi [9] Nén d li... hàm toán h c ñ nén hình nh v i t l l n hơn nh ng phương pháp khác – có th ñ t ¼ kích thư c c a cùng b c nh nén b ng JPEG Windows Media Technology: S n ph m c a Microsoft, cho ch t lư ng âm thanh t t hơn MP3 ñ i v i t p tin cùng kích thư c, cũng như ch t lư ng video g n b ng DVD 2.3 Mã hoá có kh năng phát hi n sai và s a sai 2.3.1 Khái ni m Mã hoá có kh năng phát hi n sai và s a sai có th hi u ñơn gi... mã Ví d : Ngu n X = {x1,x2,…x4} B mã nh phân M = {0,1} Mã hoá x1 = 00, x2 = 01, x3 = 10, x4 = 11 2.1.2 M t s khái ni m cơ b n v mã hoá a Chi u dài t mã Chi u dài t mã là s kí hi u c a b mã dùng ñ mã hoá cho t mã ñó [12] Ví d : t mã 0011001 dùng 7 ký hi u c a b mã nh phân nên có chi u dài là 7 b Tr ng lư ng t mã Tr ng lư ng t mã là t ng s các ký hi u khác 0 c a t mã Ký ki u: w(Wi) là tr ng lư ng t mã. .. là vô h n thì ta có th xem là không phân tách ñư c ð mã có tính phân tách ñư c thì ñi u ki n c n và ñ là b t kì t h p mã nào cũng không ñư c trùng v i ph n ñ u c a b t kì t h p mã khác cùng b mã [12] Mã có tính Prefix Trong các lo i mã có tính phân tách ñư c, lo i mã mang nhi u ñ c ñi m có ích cho vi c khai thác s d ng và ñư c nghiên c u nhi u là mã có tính prefix ðây cũng là m t lo i mã mà chúng tôi... h n ‘E’ ñư c mã hoá trong h mã Morse như là m t d u ch m duy nh t, trong khi ‘Z’ ñư c bi u di n như là - -, … m c ñích là làm t i thi u mã cho m t kí t Ví d : kí t A có th mã hoá thành 01, kí t G có th mã hoá là 101 Nguyên t c cơ b n c a phương pháp nén v i mã ñ dài thay ñ i là mã c a kí t này không th là ph n ñ u c a mã kí t khác (mã có tính prefix) Ta s s d ng cây nh phân ñ xác ñ nh mã c a kí t ... pháp mã v i ñ ñài mã thay ñ i, trư c khi trình bày v phương pháp l p mã c a mã Shanon - Fano, chúng tôi trình bày các khái ni m v mã ñ dài thay ñ i 34 Phương pháp nén v i mã ñ dài thay ñ i là phương pháp nén s d ng vi c mã hoá các kí t thành các chu i bit có ñ dài khác nhau tuỳ thu c vào t n s xu t hi n c a kí t ñó trong file d li u Ý tư ng cơ b n c a các sơ ñ mã hoá có chi u dài thay ñ i là dùng các mã. .. không thích h p cho trư ng h p b mã l n và c ng k nh 2.2.2.2 Phương pháp m t ph ng to ñ c a mã Phương pháp này ch thích h p cho các lo i mã có tr ng s D a vào hai thông s là ñ dài n và tr ng s b c a t mã ñ l p nên m t m t ph ng to ñ M i t mã ñư c bi u di n b ng m t ñi m trên m t ph ng to ñ (n, b) N u t mã v = (v0, v1, …vn) ñư c mã hoá b i b mã M có cơ s là m: v1∈ M và vi =0, 1,…, m-1 v i i = 1, 2,…,... có th d dàng t o mã và gi i mã ñ i v i mã vòng Tóm l i, có nhi u cách ñ bi u di n mã M i phương pháp có ưu ñi m và khuy t ñi m riêng Tuỳ theo t ng trư ng h p mà s d ng phương pháp nào cho phù h p 2.1.4 ði u ki n ñ mã phân tách ñư c và mã có tính Prefix ði u ki n quan tr ng c a vi c t o mã là cho phép khi nh n ñư c m t chu i các kí hi u, chúng ph i tách ra ñư c thành các thành ph n cơ b n là các t mã. .. ð nh nghĩa và các khái ni m v mã hoá 2.1.1 ð nh nghĩa Mã hoá ngu n tin X theo b mã M là phép ánh x 1:1 bi n ñ i m t tin xi∈ X thành m t t h p các ký hi u c a b mã M Ngu n X = {x1,x2,…,xn} B mã M = {m1,m2,…,mk} 21 Trong ñó k là cơ s c a b mã Ví d : k = 2 là mã nh phân, k = 10 là mã th p phân, k = 16 là mã th p l c phân N u tin xi ñư c mã hoá thành: xi ↔ mr1mr2…mrl ñây l là s ký hi u c a b mã dùng ñ bi . bản về mã hoá, mã hoá nén dữ liệu và mã hoá có khả năng phát hiện sai và sửa sai. Chương 3. Thuật toán nén dữ liệu: Trình bày các thuật toán nén dữ liệu ñược phân loại theo phương pháp nén, . niệm nén dữ liệu, nén dữ liệu nhằm tiết kiệm không gian lưu trữ cũng như tăng hiệu suất truyền tin, ñồng thời ñây cũng là một phương pháp ñể bảo mật dữ liệu. Cùng với nén dữ liệu thì mã hoá. tài Với ñề tài Mã hoá nén dữ liệu và mã hoá có khả năng phát hiện sai và sửa sai”, chúng tôi có mục ñích nghiên cứu: - Khái niệm tổng quan về mã hoá và mã hoá nén dữ liệu, mã hoá có khả năng

Ngày đăng: 13/11/2014, 19:59

Từ khóa liên quan

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

Tài liệu liên quan