TIỂU LUẬN MÔN MẬT MÃ VÀ AN TOÀN DỮ LIỆU NÉN DỮ LIỆU ĐỘ DÀI HÀNG LOẠT RUN LENGTH ENCODING

14 1.3K 2
TIỂU LUẬN MÔN MẬT MÃ VÀ AN TOÀN DỮ LIỆU NÉN DỮ LIỆU ĐỘ DÀI HÀNG LOẠT  RUN LENGTH ENCODING

Đ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

TIỂU LUẬN MÔN MẬT MÃ VÀ AN TOÀN DỮ LIỆU NÉN DỮ LIỆU ĐỘ DÀI HÀNG LOẠT RUN LENGTH ENCODING.Nén dữ liệu rất quan trọng, giúp giảm tài nguyên lưu trữ và truyền dẫn. Tuy nhiên, nén dữ liệu cũng không hoàn toàn chỉ là được. Để sử dụng dữ liệu, chúng ta cần tiêu tốn tài nguyên vào việc nén và giải nén, đòi hỏi nhiều hơn về phần cứng và xử lý. Tuy nhiên, với sự phát triển của khoa học công nghệ, năng lực tính toán của thiết bị ngày càng được nâng cao, và nén dữ liệu ngày càng trở nên quan trọng và được ứng dụng rộng rãi.

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ &&& TIỂU LUẬN MÔN MẬT MÃ VÀ AN TOÀN DỮ LIỆU Tiểu luận: “NÉN DỮ LIỆU ĐỘ DÀI HÀNG LOẠT - RUN LENGTH ENCODING” Giảng viên: PGS.TS Trịnh Nhật Tiến Học viên thực hiện: Nguyễn Viết Thắng, K20 Mã HV: 13025205 Hà Nội, 04/2014 MỤC LỤC I.CÁC PHƯƠNG PHÁP NÉN DỮ LIỆU 4 II.NÉN DỮ LIỆU HÀNG LOẠT (RUN-LENGTH ENCODING) 5 III.CHƯƠNG TRÌNH DEMO 12 IV.DANH MỤC TÀI LIỆU THAM KHẢO 14 2 MỞ ĐẦU Trong xã hội hiện đại, CNTT ngày một phát triển và tác động vào mọi khía cạnh trong cuộc sống con người. Một trong những nhu cầu lớn của CNTT là việc lưu trữ và truyền thông tin. Nếu chỉ đơn thuần lưu trữ và truyền dữ liệu thì dung lượng lưu trữ lớn, băng thông đường truyền yêu cầu cao. Điều này dẫn đến khó khăn chung trong việc ứng dụng CNTT, tiêu tốn tài nguyên lưu trữ, tài nguyên mạng. Để giải quyết vấn đề ngày, con người đã nghĩ đến các thuật toán nén dữ liệu. Mục đích của các thuật toán nén đều hướng tới việc sử dụng ít dữ liệu hơn dữ liệu gốc nhưng vẫn thể hiện được chính xác hoặc tương đối chính xác (lọc bỏ các thành phần dữ liệu không cần thiết) dữ liệu gốc ban đầu. Nén dữ liệu rất quan trọng, giúp giảm tài nguyên lưu trữ và truyền dẫn. Tuy nhiên, nén dữ liệu cũng không hoàn toàn chỉ là "được". Để sử dụng dữ liệu, chúng ta cần tiêu tốn tài nguyên vào việc nén và giải nén, đòi hỏi nhiều hơn về phần cứng và xử lý. Tuy nhiên, với sự phát triển của khoa học công nghệ, năng lực tính toán của thiết bị ngày càng được nâng cao, và nén dữ liệu ngày càng trở nên quan trọng và được ứng dụng rộng rãi. 3 I. CÁC PHƯƠNG PHÁP NÉN DỮ LIỆU Nén dữ liệu là việc thực hiện thu gọn kích thước các tập tin hoặc làm cho thông tin lưu trữ chiếm không gian đĩa nhỏ hơn, tối ưu hơn. Có nhiều thuật toán nén, nếu phân loại theo tiêu chí mất mát thông tin thì có thể chia thành 02 phương pháp nén: o Nén mất dữ liệu (lossy compression): Hay gặp nhất trong công nghệ thông tin là nén hình ảnh và âm thanh. Có nhiều giải thuật được đặt ra để đáp ứng yêu cầu giảm thiểu kích thước của file ảnh, file âm thanh sao cho vẫn duy trì được chất lượng ở mức độ chấp nhận được. Với việc nén ảnh, những giải thuật này đều dựa trên nền tảng là loại bớt những màu mà mắt người không hoặc khó cảm nhận được, chỉ giữ lại những màu chủ yếu thực sự ảnh hưởng tích cực lên khả năng cảm nhận màu của mắt. Nếu đã từng biên tập hình ảnh bằng Photoshop, bạn sẽ dễ dàng nhận thấy sự khác biệt khá lớn giữa bảng màu chuẩn và bảng màu dùng cho hình ảnh tải lên web, đó chính là hình nén. Trong bảng màu web, các màu trung gian, chuyển tiếp đã bị lược bỏ mất, thay vào đó là các màu tương đương cận kề. Tuy 2 bảng màu này dễ phân biệt như vậy nhưng khi xem một hình ảnh bạn không dễ dàng nhận biết được đó là file .bmp (chưa nén), .gif hay .jpg (ảnh nén). Còn một cách nữa cũng sử dụng kiểu mất dữ liệu để nén hình là giảm độ phân giải, tức là bớt số điểm ảnh trên một inch (dots per inch - dpi). Cách này khi được sử dụng, tùy trường hợp mà phải gia giảm cho phù hợp. Độ phân giải cao quá thì phí chỗ, nhưng giảm đi nhiều quá thì bị “vỡ hình”. Đối với âm thanh, có nhiều chuẩn nén khác nhau như: Windows Media, MP3, Real G2, Liquid Audio, ACC, nhưng thông dụng nhất hiện nay là MP3. Nén theo chuẩn MP3, kích thước file audio có thể được thu nhỏ đi 8 lần so với kích thước ban đầu. Để làm được như vậy, người ta sử dụng một kỹ thuật gọi là lấy mẫu âm, thử nghiệm rồi bỏ bớt những tone mà tai người không nghe được 4 hoặc kém nhạy. Do đó, chất lượng âm của MP3 rất khó phân biệt với âm của đĩa CD chuẩn. o Nén không mất dữ liệu (lossless compression): thể hiện dữ liệu hiệu quả hơn (ít bit hơn) mà không làm mất thông tin. Không mất thông tin được hiểu là từ dữ liệu đã được nén, ta có thể khôi phục hoàn toàn dữ liệu ban đầu. Nén không mất dữ liệu bắt buộc sử dụng trong việc nén các văn bản, bảng tính, các đoạn code thực thi là những loại dữ liệu cần chính xác hoàn toàn. Các thuật toán nén không mất dữ liệu phổ biến gồm: Nén dữ liệu hàng loạt (RLE - Run length Encoding), Lempel- Ziv(LZ), Huffman, Delta. Nếu phân loại các phương pháp nén theo kích cỡ (size) dữ liệu được lấy ra từ dữ liệu gốc để nén thì có thể chia thành 04 nhóm: Method Kích cỡ nhóm Dữ liệu đốc (Đầu vào) Dữ liệu nén CS&Q Cố định Cố định Huffman Cố định Thay đổi Arithmetic Thay đổi Thay đổi Run-length, LZW Thay đổi Cố định II. NÉN DỮ LIỆU HÀNG LOẠT (RUN-LENGTH ENCODING) 1. Thông tin chung Nén dữ liệu hàng loạt - Run length Encoding (RLE) là phương pháp nén không mất dữ liệu. RLE hoạt động làm việc bằng cách giảm kích thước vật lý của chuỗi các ký tự lặp lại trong một chuỗi dữ liệu bằng cách biểu diễn khác. Nén dữ liệu hàng loạt có thể áp dụng cho mọi loại dữ liệu mà không phụ thuộc vào nội dung thông tin của dữ liệu đó, tuy nhiên mức độ hiệu quả của việc nén hay tỷ lệ nén rất phụ thuộc vào nội dung dữ liệu. Với những loại dữ liệu mà thông tin trong đó ít lặp lại, việc áp dụng nén RLE có thể gây hiệu ứng ngược - tạo ra dữ liệu sau khi nén dung lượng lớn hơn cả dữ liệu gốc. Bởi vậy, RLE thường chỉ được áp dụng trong việc nén ảnh bmp, tiff, loại dữ liệu cón nhiều "loạt" dữ liệu lặp lại. 5 2. Ý tưởng phương pháp Ý tưởng của phương pháp nén dữ liệu hàng loạt là tìm loạt dữ liệu liền nhau lặp lại, thay nó bằng một dữ liệu đại diện khác, mục đích để giảm kích thước dữ liệu gốc. Loạt dữ liệu liền nhau được gọi là "Run length". Chúng ta sẽ tìm hiểu ứng dụng của phương pháp trong việc nén dữ liệu text và dữ liệu ảnh 2.1. RLE trong nén dữ liệu Text Để tìm hiểu về phương pháp RLE trong nén dữ liệu Text, ta xét ví dụ với chuỗi sau: AAAABBBAABBBBBCCCCCCCCDABCBAAABBBBCCCD Chuỗi này có thể được thể hiện một cách cô đọng hơn bằng cách thay thế chuỗi kí tự lặp lại bằng một thể hiện duy nhất của kí tự lặp lại cùng với một biến đếm số lần kí tự đó được lặp lại. Ta muốn nói rằng chuỗi này gồm bốn chữ A theo sau bởi ba chữ B rồi lại theo sau bởi hai chữ A, rồi lại theo sau bởi năm chữ B Việc nén một chuỗi theo phương pháp này được gọi là nén độ dài loạt. Khi có những loạt dài, việc tiết kiệm có thể là đáng kể. Có nhiều cách để thực hiện ý tưởng này, tuỳ thuộc vào các đặc trưng của dữ liệu, ứng dụng. Chẳng hạn nếu ta biết rằng chuỗi của chúng ta chỉ chứa các chữ cái, thì ta có thể nén bằng cách đơn giản xen kẽ các con số với các chữ cái. Vì vậy chuỗi kí tự trên được nén lại như sau: 4A3BAA5B8CDABCB3A4B3CD Ở đây "4A" có nghĩa là "bốn chữ A". Có chú ý là ta đã tối ưu không thay thế các loạt chạy có độ dài 1 hoặc 2 vì cần đến hai kí tự để thể hiện, không tiết kiệm được dung lượng so với dữ liệu gốc. Như vậy, từ dữ liệu gốc là 38 byte (giả sử mỗi ký tự được biểu diễn bằng 01 byte), sau khi nén ta được dữ liệu mới chỉ còn 22byte, tiết kiệm được 16 byte. Trường hợp chuỗi chỉ chứa cả ký tự chữ (A-Z) và số, việc nén đơn giản như trên không thực hiện được. Ta có thể sử dụng một ký tự đặc biệt như @ để phân biệt giữa ký tự thường và ký tự được mã hóa. Ví dụ xét chuỗi sau: AAA33333BBBBBBBBBC Ta có thể nén và thu được chuỗi sau khi nén như sau: A@33@5b@9C, trong đó byte sau ký tự @ thể hiện số lượng hay độ dài lặp lại của ký tự trước nó. 6 Một số nhược điểm: o Trong dữ liệu text có nghĩa nói chung, các ký tự không lặp lại nhiều, thường chỉ là đến 2 ký tự, việc lặp đến ký tự thứ 3 là khá hiếm gần như không có. Ký tự lặp lại nhiều là ký tự trống. Áp dụng phương pháp như trên sẽ không hiệu quả trong việc nén dữ liệu text o Việc lựa chọn ký tự @ như ở trên làm ký tự đặc biệt có thể không đáp ứng được trong trường hợp dự liệu đầu vào có thể chứa bất kỳ ký tự alphabet nào. Ta cần có sự cải tiến thêm để giải quyết trường hợp này. o Với việc nén dữ liệu như ví dụ ở trên, ký tự lặp tối đa được là 255 (vì số "run length" được biểu diễn bằng 1 byte). Tất nhiên, giới hạn này có thể được "mềm hóa" phần nào để thể hiện được số lượng lặp lớn hơn, chẳng hạn ta quy định số 0 qui định là đã 3 lần lặp, khi đó số 255 thể hiện có 258 ký tự lặp lại. Ở dưới là thuật toán đơn giản thể hiện phương pháp RLE 7 3. RLE trong nén ảnh RLE là ứng viên tự nhiên trong việc nén dữ liệu đồ họa. Một ảnh số chứa những chấm nhỏ là pixel. Mỗi pixel có thể là 1 bit, xác định màu, đen hoặc có thể là nhiều bit để quy định nhiều màu khác nhau cho pixel. Ta có thể coi rằng những pixels được lưu trữ trong một mảng gọi là bitmap trong bộ nhớ. Pixels thường được sắp xếp trong bitmap dưới dạng các dòng, pixels đầu tiên là ở phía trên cùng bên trái, pixel cuối cùng ở dưới cùng bên phải. 8 Nén ảnh sử dụng RLE dựa trên ý tưởng rằng, nếu ta lựa chọn ngẫu nhiên 01 pixel trong ảnh thì xác suất cao là nó có cùng màu với pixel bên cạnh. Chương trình nén bởi vậy sẽ scan mảng pixel từng dòng (stream), tìm ra những pixel có cùng màu. Ví dụ, nếu đọc được 17 pixel màu trắng, rồi 1 pixel màu đen, tiếp theo 55 pixel màu trắng thì chỉ cần lưu trữ các số 17, 1, 55. Dựa trên ý tưởng này, người ta có thể scan ảnh theo chiều ngang, chiều dọc hoặc zigzac. Tỷ lệ nén phụ thuộc độ phức tạp của ảnh, càng chi tiết thì tỷ lệ nén càng thấp. Bởi vậy, với những ảnh mà màu sắc thay đổi liên tục giống text như nêu ở trên, việc nén có thể thu về kết quả ngược - file ảnh nén lớn hơn file ảnh gốc. Bởi vậy, Phương pháp mã hoá độ dài loạt thường được áp dụng cho các tập tin đồ hoạ bitmap vì ở đó 9 thường có các mảng lớn cùng màu được biểu diễn dưới dạng bitmap là các chuỗi bit có đường chạy dài. Trên thực tế, nó được dùng trong các tập tin .PCX, .RLE. Thành phần thuật toán RLE khác nhau căn bản dựa trên loại dữ liệu được nén. Sơ đồ RLE sử dụng để nén hình ảnh bitmap thường chia ra các lớp dự trên thành phần nguyên tử của phần tử mà nó cần nén. Có 03 lớp được sử dụng nhiều hơn cả trong file định dạng hình ảnh là Bit-, Byte-, Pixel-level RLE. Bit-level RLE nén theo bít, hiệu quả sử dụng trong các hình ảnh đơn sắc. Sơ đồ bit-level RLE điển hình sử dụng 1 bit cho giá trị (run value) và 7 bit cho độ dài hàng loạt (Run Count). Như vậy nếu thành phần hàng loạt nhiều hơn 128 pixel thì nó sẽ được chia thành nhiều gói RLE nén khác nhau. Byte-Level RLE nén theo byte. Sơ đồ điển hình là nén dữ liệu trong 2 byte, byte đầu tiên thể hiện Run Count và byte thứ 2 thể hiện Run Value. Trong byte đầu tiên, bit đầu tiên là bit chỉ thị. Nếu bit đầu tiên là 1, nó thông báo rằng nén được thực hiện, phục vụ cho chương trình giải nén đọc giá trị và giải nén. Nếu bit đầu tiên là 0, nó chỉ ra rằng không có việc nén dữ liệu. Do lấy 1 bit làm việc chỉ thị, giá trị của run count còn lại từ 0-127. Byte-level RLE sử dụng tốt cho dữ liệu ảnh mà mỗi pixel được lưu trữ bởi 1 byte. Sơ đồ Pixel-Level RLE được sử dụng khi mỗi pixel được lưu trữ bởi hai hoặc nhiều byte. Ở mức pixel, bit được bỏ qua, byte được đếm để xác định mỗi giá trị pixel. Kích thước gói tin được nén phụ thuộc vào kích thước giá trị pixel được nén. Số lượng bit hay byte cho mỗi pixel được lưu trong gói tin mào đầu. Các gói tin nén gồm 01 byte Run count và các byte giá trị pixel được nén. 10 [...]...4 Kết luận Nén dữ liệu hàng loạt là thuật toán đơn giản, dễ cài đặt và triển khai, thực thi nhanh, làm cho nó là một sự lựa chọn tốt so với các thuật toán nén phức tạp khác 11 III CHƯƠNG TRÌNH DEMO Chương trình demo phương pháp nén RLE đơn giản đối với dữ liệu Text và không bao gồm ký tự số Phần chính của chương trình viết trên ngôn ngữ... int.Parse(a); a = ""; for (int j = 0; j < count; j++) sb.Append(current); } } 12 return sb.ToString(); } Giao diện chương trình: 13 IV DANH MỤC TÀI LIỆU THAM KHẢO 1 http://rosettacode.org 2 http://en.wikipedia.org/wiki/Data_compression 3 http://en.wikipedia.org/wiki /Run- length_ encoding 14 ... for (int i = 1; i < s .Length; i++) { if (current == s[i]) { count++; } else { sb.AppendFormat("{0}{1}", count, current); count = 1; current = s[i]; } } sb.AppendFormat("{0}{1}", count, current); return sb.ToString(); } public static string Decode(string s) { string a = ""; int count = 0; StringBuilder sb = new StringBuilder(); char current = char.MinValue; for (int i = 0; i < s .Length; i++) { current . đổi Cố định II. NÉN DỮ LIỆU HÀNG LOẠT (RUN- LENGTH ENCODING) 1. Thông tin chung Nén dữ liệu hàng loạt - Run length Encoding (RLE) là phương pháp nén không mất dữ liệu. RLE hoạt động làm việc bằng. mất dữ liệu phổ biến gồm: Nén dữ liệu hàng loạt (RLE - Run length Encoding), Lempel- Ziv(LZ), Huffman, Delta. Nếu phân loại các phương pháp nén theo kích cỡ (size) dữ liệu được lấy ra từ dữ liệu. PHÁP NÉN DỮ LIỆU 4 II.NÉN DỮ LIỆU HÀNG LOẠT (RUN- LENGTH ENCODING) 5 III.CHƯƠNG TRÌNH DEMO 12 IV.DANH MỤC TÀI LIỆU THAM KHẢO 14 2 MỞ ĐẦU Trong xã hội hiện đại, CNTT ngày một phát triển và tác động

Ngày đăng: 21/10/2014, 15:35

Mục lục

  • I. CÁC PHƯƠNG PHÁP NÉN DỮ LIỆU

  • II. NÉN DỮ LIỆU HÀNG LOẠT (RUN-LENGTH ENCODING)

  • IV. DANH MỤC TÀI LIỆU THAM KHẢO

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

Tài liệu liên quan