Luận văn ThS Nguyễn Hữu Hiếu: Thuật toán nén tệp thực thi BDC, ĐH CNTT&TT Thái Nguyên

Khám phá luận văn thạc sĩ về thuật toán nén tệp thực thi BDC. Tìm hiểu nguyên lý, ứng dụng và hiệu quả nén dữ liệu trong khoa học máy tính.

Chuyên ngành

Khoa học máy tính

Người đăng

Ẩn danh

Thể loại

Luận văn thạc sĩ

2016

79
2
0

Phí lưu trữ

30 Point

Mục lục chi tiết

LỜI CAM ĐOAN

LỜI CẢM ƠN

MỤC LỤC

MỞ ĐẦU

1.1. Đối tượng và phạm vi nghiên cứu:

1.2. Ý nghĩa khoa học, thực tiễn của đề tài:

1.3. Phương pháp nghiên cứu:

1.4. Bố cục của luận văn:

1. GIỚI THIỆU CHUNG VỀ MỘT SỐ CÔNG NGHỆ NÉN

2. CÔNG NGHỆ NÉN DELTA

3. CHƯƠNG TRÌNH THỬ NGHIỆM

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

1.1. Hướng phát triển

TÀI LIỆU THAM KHẢO

DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT

DANH MỤC CÁC BẢNG

DANH MỤC CÁC HÌNH VẼ

1. MỞ ĐẦU

1.1. Đặt vấn đề

1.2. Đối tượng và phạm vi nghiên cứu:

1.3. Ý nghĩa khoa học, thực tiễn của đề tài:

1.4. Phương pháp nghiên cứu:

1.5. Bố cục của luận văn:

2. CHƯƠNG I GIỚI THIỆU CHUNG VỀ MỘT SỐ CÔNG NGHỆ NÉN

2.1. Tầm quan trọng của nén dữ liệu trong truyền tin

2.2. Nguyên tắc nén dữ liệu

2.3. Một số phương pháp nén dữ liệu

2.4. Phương pháp mã hóa độ dài loạt (Run - Length Encoding)

2.5. Phương pháp mã hóa Huffman

2.6. Phương pháp nén LZW

2.7. Chọn phương pháp nén

3. CÔNG NGHỆ NÉN DELTA

3.1. Giới thiệu về công nghệ nén Delta

3.2. Khái niệm về nén

3.3. Bộ nén Delta

3.4. Tính hiệu quả. Nền tảng chung

3.5. Bộ nén LZ77- Nền tảng của bộ nén Delta

4. Thuật toán nén Delta

4.1. Nguyên lý của thuật toán nén Delta

4.2. Những nghiên cứu đầu tiên

4.3. Thuật toán cơ bản

4.4. Sự cải tiến và độ phức tạp của thuật toán

4.5. Xây dựng lại xâu đích

4.6. Giải pháp nén Delta dựa trên chữ ký

4.7. Thuật toán nén Delta dựa trên chữ ký

4.8. Đánh giá thuật toán qua thực thi rsync

4.9. Một số ứng dụng của thuật toán nén Delta

5. CHƯƠNG TRÌNH THỬ NGHIỆM

5.1. Bộ công cụ mã nguồn mở cho giải thuật nén Delta

5.2. Thư viện nén Delta: librsync

5.3. Hàm thư viện: rdiff

5.4. Xây dựng chương trình thử nghiệm

5.5. Mô hình thử nghiệm

5.6. Xây dựng chương trình

5.7. Module chương trình trên máy chủ

5.8. Module chương trình trên máy khách

5.9. Kịch bản thử nghiệm và đánh giá

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

TÀI LIỆU THAM KHẢO

Tóm tắt

I. Khám phá thuật toán nén tệp BDC Từ luận văn đến thực tiễn

Trong bối cảnh bùng nổ của công nghệ thông tin, việc truyền tải dữ liệu, đặc biệt là các tệp tin lớn và cập nhật phần mềm, luôn là một thách thức. Luận văn thạc sĩ "Thuật toán nén tệp thực thi BDC và ứng dụng" của tác giả Nguyễn Hữu Hiếu đã đi sâu vào một giải pháp đột phá: Binary Delta Compression (BDC). Đây là một phương pháp nén hiệu quả cao, tập trung vào việc tìm ra sự khác biệt (delta) giữa hai phiên bản của một tệp tin. Thay vì truyền toàn bộ tệp mới, hệ thống chỉ cần gửi đi một bản vá (patch) có kích thước siêu nhỏ, giúp tiết kiệm băng thông và tăng tốc độ truyền tải một cách đáng kể. Bài viết này sẽ phân tích chi tiết các khía cạnh cốt lõi của thuật toán nén tệp thực thi BDC, từ nguyên lý cơ bản, các phương pháp triển khai, kết quả thử nghiệm cho đến tiềm năng ứng dụng rộng rãi trong tương lai.

1.1. Bối cảnh ra đời của công nghệ nén Delta

Việc truyền tải tin tức và cập nhật phần mềm là hoạt động diễn ra thường xuyên trong lĩnh vực công nghệ thông tin và viễn thông. Kích thước thông tin ngày càng lớn gây ra nhiều khó khăn, tốn kém tài nguyên mạng và lãng phí năng lực hệ thống. Để giải quyết bài toán này, các thuật toán nén dữ liệu đã ra đời. Tuy nhiên, với nhu cầu đặc thù là cập nhật phiên bản, việc nén toàn bộ tệp tin mới không phải lúc nào cũng hiệu quả. Công nghệ nén Delta, hay Binary Delta Compression (BDC), xuất hiện như một giải pháp chuyên biệt. Phương pháp này không nén một tệp đơn lẻ một cách độc lập mà dựa trên sự sai khác giữa tệp nguồn (phiên bản cũ) và tệp đích (phiên bản mới). Kết quả là một bản vá có kích thước nhỏ hơn rất nhiều so với tệp đích. Luận văn trích dẫn: "Nếu tỷ lệ nén cho các tệp thực thi thường dao động quanh 3:1 thì tỷ lệ nén của bản vá so với tệp đích theo phương pháp nén Delta có thể nằm trong khoảng từ 10:1 tới 1000:1 và thậm chí có thể lớn hơn".

1.2. Đối tượng và phạm vi nghiên cứu của luận văn

Luận văn của tác giả Nguyễn Hữu Hiếu tập trung nghiên cứu sâu vào đối tượng chính là Thuật toán nén tệp thực thi BDC (Binary Delta Compression). Phạm vi nghiên cứu được giới hạn trong việc phân tích, xây dựng và thử nghiệm thuật toán này cho các tệp thực thi dạng nhị phân (Binary). Mục tiêu không chỉ dừng lại ở việc hiểu rõ lý thuyết mà còn hướng tới việc xây dựng một chương trình thử nghiệm để đánh giá hiệu quả thực tế. Ý nghĩa khoa học của đề tài nằm ở việc làm sáng tỏ cơ chế hoạt động và tiềm năng của thuật toán nén Delta. Về mặt thực tiễn, kết quả nghiên cứu mở ra khả năng triển khai và ứng dụng BDC vào các hệ thống cập nhật phần mềm, phân phối bản vá, đồng bộ hóa dữ liệu, giúp tối ưu hóa quá trình truyền tin qua mạng một cách hiệu quả.

II. Thách thức nén tệp cập nhật Hạn chế của các giải pháp cũ

Trước khi công nghệ nén Delta trở nên phổ biến, các nhà phát triển đã dựa vào nhiều phương pháp nén dữ liệu truyền thống. Các phương pháp này, dù hiệu quả trong nhiều trường hợp lưu trữ, lại bộc lộ những hạn chế rõ rệt khi áp dụng vào bài toán cụ thể là tạo và phân phối các bản vá phần mềm. Vấn đề cốt lõi nằm ở chỗ chúng xử lý mỗi tệp tin như một thực thể độc lập, không tận dụng được lượng thông tin trùng lặp khổng lồ giữa phiên bản cũ và phiên bản mới. Điều này dẫn đến kích thước bản vá vẫn còn lớn, gây lãng phí băng thông và kéo dài thời gian chờ đợi của người dùng cuối. Việc tìm kiếm một giải pháp nén thông minh hơn, có khả năng "hiểu" được mối liên hệ giữa các phiên bản, là một yêu cầu cấp thiết.

2.1. So sánh hiệu quả giữa Huffman LZW và Run Length

Luận văn đã phân tích các phương pháp nén phổ biến để làm nổi bật sự khác biệt. Run-Length Encoding (RLE) hiệu quả với dữ liệu có nhiều chuỗi ký tự lặp lại liên tiếp (như ảnh bitmap), nhưng gần như vô dụng với các tệp thực thi phức tạp. Mã hóa Huffman hoạt động tốt bằng cách gán mã nhị phân ngắn hơn cho các ký tự xuất hiện thường xuyên, giúp giảm kích thước tệp văn bản. Tuy nhiên, nó yêu cầu phải gửi kèm bảng mã, làm giảm hiệu suất với các tệp nhỏ. Thuật toán LZW (Lempel-Ziv-Welch) cải tiến hơn khi có thể tự xây dựng từ điển ở cả hai phía gửi và nhận. Mặc dù vậy, cả Huffman và LZW đều không được thiết kế để khai thác sự tương đồng giữa hai tệp tin riêng biệt. Chúng chỉ tối ưu hóa dữ liệu bên trong một tệp duy nhất, do đó không phải là lựa chọn lý tưởng cho việc tạo bản vá cập nhật.

2.2. Vấn đề truyền tải bản vá và cập nhật phiên bản

Bài toán cốt lõi mà thuật toán nén tệp thực thi BDC giải quyết là tối ưu hóa việc truyền tải các bản cập nhật. Khi một phần mềm có phiên bản mới, sự khác biệt so với phiên bản cũ thường chỉ chiếm một phần nhỏ trong toàn bộ mã nguồn. Việc yêu cầu người dùng tải về toàn bộ tệp cài đặt mới là một sự lãng phí tài nguyên mạng nghiêm trọng. Các phương pháp nén truyền thống khi áp dụng lên tệp mới vẫn tạo ra một tệp nén có kích thước lớn. Chúng không có cơ chế để tham chiếu đến dữ liệu đã có sẵn trên máy người dùng (phiên bản cũ). Đây chính là "khoảng trống" mà nén Delta lấp vào. Thay vì hỏi "Làm sao để nén tệp này nhỏ nhất?", BDC đặt câu hỏi: "Làm sao để mô tả sự thay đổi từ tệp cũ sang tệp mới một cách ngắn gọn nhất?".

III. Nguyên lý cốt lõi của công nghệ nén Delta và thuật toán BDC

Công nghệ nén Delta hoạt động dựa trên một nguyên tắc đơn giản nhưng cực kỳ mạnh mẽ: thay vì mã hóa toàn bộ dữ liệu mới, nó chỉ mã hóa sự khác biệt. Bộ nén Delta nhận đầu vào là hai tệp: một tệp cơ sở (hay tệp nguồn, phiên bản cũ) và một tệp đích (phiên bản mới). Đầu ra là một tệp delta (bản vá) nhỏ gọn, chứa các chỉ dẫn để tái tạo lại tệp đích từ tệp cơ sở. Quá trình này đặc biệt hiệu quả khi hai tệp có độ tương đồng cao. Nền tảng của nhiều thuật toán nén Delta hiện đại, bao gồm BDC, bắt nguồn từ các kỹ thuật xử lý chuỗi và các thuật toán nén kinh điển như LZ77, nhưng được tùy chỉnh để hoạt động hiệu quả trên hai tệp riêng biệt.

3.1. Khái niệm nén Delta So sánh tệp nguồn và tệp đích

Mô hình nén Delta khác biệt hoàn toàn so với nén thông thường. Trong khi bộ nén chuẩn chỉ cần một tệp đầu vào F' và tạo ra tệp nén C(F'), bộ nén Delta cần cả tệp nguồn F và tệp đích F'. Nó sẽ phân tích và tìm ra những đoạn dữ liệu trong F' đã tồn tại trong F. Thay vì lưu lại những đoạn dữ liệu này, tệp delta sẽ chứa các tham chiếu (con trỏ) chỉ đến vị trí của chúng trong tệp F, cùng với những dữ liệu mới hoàn toàn không có trong F. Ở phía người nhận, bộ giải nén Delta (Delta applier) sẽ sử dụng tệp delta và tệp nguồn F có sẵn để xây dựng lại chính xác tệp đích F'. Quá trình này được mô tả trong luận văn là: "Delta applier chấp nhận F-F' cùng với phần dữ liệu cơ sở F, để xây dựng dữ liệu đích F'". Điều này giúp giảm thiểu tối đa lượng dữ liệu cần truyền qua mạng.

3.2. Nền tảng từ thuật toán LZ77 trong nén Delta

Nhiều thuật toán nén Delta hiện đại được xem là một biến thể của thuật toán LZ77. Thuật toán LZ77 nén dữ liệu bằng cách thay thế các chuỗi ký tự lặp lại bằng một tham chiếu đến lần xuất hiện trước đó của chúng trong cùng một luồng dữ liệu. Nén Delta mở rộng ý tưởng này. Nó coi tệp nguồn (fold) như một "từ điển" khổng lồ đã được mã hóa trước. Khi xử lý tệp đích (fnew), thuật toán không chỉ tìm kiếm sự lặp lại trong chính phần đã mã hóa của fnew, mà còn tìm kiếm trong toàn bộ fold. Theo luận văn, "nén Delta có thể được xem một cách đơn giản như sự thi hành của LZ77 với fold đại diện cho text đã mã hóa trước đó". Bằng cách này, nó có thể tìm thấy các khối dữ liệu chung lớn nhất và biểu diễn chúng bằng các con trỏ ngắn gọn, đạt hiệu quả nén vượt trội.

IV. Phương pháp nén Delta dựa trên chữ ký và ứng dụng Rsync

Một trong những triển khai thực tế và nổi tiếng nhất của công nghệ nén Deltathuật toán Rsync. Thay vì so sánh toàn bộ nội dung hai tệp một cách tuần tự, Rsync sử dụng một phương pháp thông minh hơn dựa trên "chữ ký" (signature) hay checksum. Ý tưởng là chia tệp thành các khối dữ liệu có kích thước cố định, sau đó tính toán giá trị băm (checksum) cho mỗi khối. Bằng cách so sánh các giá trị checksum này, hệ thống có thể nhanh chóng xác định những khối nào đã tồntại ở cả hai phiên bản mà không cần truyền toàn bộ dữ liệu của khối qua mạng. Cách tiếp cận này giúp giảm đáng kể lượng dữ liệu trao đổi giữa máy khách và máy chủ, đặc biệt hiệu quả trong việc đồng bộ hóa tệp tin qua các kết nối mạng chậm.

4.1. Cách hoạt động của thuật toán Rsync trong thực tế

Quy trình hoạt động của Rsync được luận văn mô tả chi tiết. Đầu tiên, ở phía máy khách (client), tệp nguồn (phiên bản cũ) được chia thành các khối (block). Với mỗi khối, client tính toán hai loại checksum: một checksum nhanh nhưng có thể không đáng tin cậy (dùng để sàng lọc) và một checksum chậm hơn nhưng đáng tin cậy (như MD5, dùng để xác nhận). Các cặp checksum này được gửi đến máy chủ (server). Server sẽ quét qua tệp đích (phiên bản mới) và tính checksum nhanh cho từng khối dữ liệu khả dĩ. Khi tìm thấy một checksum nhanh trùng khớp, nó sẽ tính tiếp checksum đáng tin cậy để xác nhận. Nếu cả hai đều khớp, server chỉ gửi một con trỏ tham chiếu đến khối đó. Nếu không khớp, nó sẽ gửi dữ liệu thô của ký tự đó. Bằng cách này, chỉ có những phần dữ liệu thực sự mới được truyền đi.

4.2. Vai trò của checksum nhanh và checksum đáng tin cậy

Việc sử dụng hai loại checksum là một sự tối ưu hóa quan trọng trong thuật toán Rsync. Checksum nhanh (rolling checksum) có đặc tính đặc biệt: khi cửa sổ dữ liệu trượt đi một ký tự, giá trị checksum mới có thể được tính toán rất nhanh từ giá trị cũ mà không cần phải đọc lại toàn bộ khối. Điều này cho phép server tìm kiếm các khối phù hợp một cách cực kỳ hiệu quả. Tuy nhiên, vì là hàm băm đơn giản (ví dụ, 32-bit), nó có thể tạo ra va chạm (hai khối khác nhau có cùng checksum). Do đó, sau khi tìm thấy một ứng viên tiềm năng bằng checksum nhanh, checksum đáng tin cậy (thường là MD4 hoặc MD5, 128-bit) được sử dụng để xác thực một cách chắc chắn rằng hai khối dữ liệu thực sự giống hệt nhau. Sự kết hợp này cân bằng giữa tốc độ và độ chính xác.

V. Đánh giá hiệu quả thuật toán BDC qua chương trình thử nghiệm

Lý thuyết là nền tảng, nhưng hiệu quả thực tế mới là thước đo chính xác nhất giá trị của một thuật toán. Trong chương 3 của luận văn, tác giả đã tiến hành xây dựng một chương trình thử nghiệm để đánh giá khả năng của thuật toán nén tệp thực thi BDC. Chương trình được xây dựng dựa trên bộ công cụ mã nguồn mở librsync, một thư viện phổ biến triển khai thuật toán nén Delta dựa trên chữ ký. Mô hình thử nghiệm bao gồm hai module, một chạy trên máy chủ (server) và một trên máy khách (client), mô phỏng quá trình cập nhật tệp tin qua mạng. Các kết quả thu được đã chứng minh một cách thuyết phục hiệu quả vượt trội của phương pháp này so với các kỹ thuật nén truyền thống.

5.1. Mô hình và kịch bản thử nghiệm nén tệp thực thi

Mô hình thử nghiệm được thiết kế theo kiến trúc client-server. Trên server, chương trình thực hiện các bước: tạo tệp chữ ký từ tệp nguồn (phiên bản cũ), sau đó tạo ra tệp delta bằng cách so sánh tệp chữ ký này với tệp đích (phiên bản mới). Ở phía client, chương trình sẽ nhận tệp delta từ server và sử dụng nó cùng với tệp nguồn đang có để tái tạo lại tệp đích một cách hoàn chỉnh. Kịch bản thử nghiệm sử dụng các cặp tệp có mức độ tương đồng khác nhau để quan sát sự thay đổi về tỷ lệ nén và thời gian thực thi. Luận văn sử dụng các bộ dữ liệu thực tế như gcc và emacs để đảm bảo tính khách quan và gần gũi với các ứng dụng trong thế giới thực, giúp đánh giá chính xác hiệu suất của công nghệ nén Delta.

5.2. Kết quả nén ấn tượng với tỷ lệ cao

Kết quả thực nghiệm là điểm sáng giá nhất của luận văn. Đúng như dự đoán lý thuyết, thuật toán nén tệp thực thi BDC đã cho thấy tỷ lệ nén cực kỳ ấn tượng. Các bảng số liệu cho thấy khi độ tương đồng giữa hai tệp càng cao, kích thước của tệp delta (bản vá) càng nhỏ. Luận văn nêu rõ: "Sự đối lập của kích thước nén tập tin và sự giống nhau giữa tập tin" là một mối quan hệ tỷ lệ nghịch rõ ràng. Trong nhiều trường hợp, kích thước tệp delta chỉ bằng một phần rất nhỏ so với tệp đích, đạt tỷ lệ nén từ 10:1 đến 1000:1. Con số này là một minh chứng không thể chối cãi cho tính hiệu quả của BDC trong việc tiết kiệm tài nguyên mạng và cải thiện trải nghiệm người dùng khi thực hiện cập nhật phần mềm.

VI. Tương lai và hướng phát triển của thuật toán nén tệp BDC

Thuật toán nén tệp thực thi BDCcông nghệ nén Delta nói chung đã chứng tỏ được giá trị to lớn trong các ứng dụng thực tiễn, đặc biệt là trong lĩnh vực phân phối và cập nhật phần mềm. Tuy nhiên, tiềm năng của nó không chỉ dừng lại ở đó. Với sự phát triển của Internet of Things (IoT), điện toán đám mây và nhu cầu đồng bộ hóa dữ liệu trên nhiều thiết bị, các thuật toán nén thông minh dựa trên sự sai khác sẽ ngày càng trở nên quan trọng. Việc tiếp tục nghiên cứu và cải tiến thuật toán sẽ mở ra nhiều ứng dụng mới, giúp tối ưu hóa hơn nữa việc sử dụng tài nguyên mạng và bộ nhớ, góp phần xây dựng một thế giới số hiệu quả và bền vững hơn.

6.1. Hướng nghiên cứu và cải tiến độ phức tạp thuật toán

Mặc dù hiệu quả, các thuật toán nén Delta vẫn còn không gian để cải tiến. Một trong những thách thức là độ phức tạp về thời gian và không gian bộ nhớ, đặc biệt khi xử lý các tệp tin cực lớn. Hướng phát triển trong tương lai có thể tập trung vào việc tối ưu hóa cấu trúc dữ liệu (như cây tiền tố hoặc bảng băm) để tăng tốc độ tìm kiếm các khối dữ liệu trùng lặp. Một hướng khác là phát triển các thuật toán có khả năng thích ứng, tự động điều chỉnh kích thước khối (block size) một cách linh hoạt dựa trên đặc tính của dữ liệu, thay vì sử dụng một kích thước cố định. Việc nghiên cứu các hàm checksum nhanh hơn và kháng va chạm tốt hơn cũng là một lĩnh vực đầy hứa hẹn để cải thiện hiệu suất của các hệ thống như Rsync.

6.2. Tiềm năng ứng dụng trong sao lưu và đồng bộ hóa đám mây

Ngoài việc cập nhật phần mềm, công nghệ nén Delta có tiềm năng ứng dụng rộng rãi trong các dịch vụ sao lưu (backup) và đồng bộ hóa dữ liệu trên nền tảng đám mây. Khi người dùng thay đổi một tệp tin nhỏ trong một tài liệu lớn, các dịch vụ như Google Drive hay Dropbox có thể chỉ cần tải lên phần dữ liệu bị thay đổi (delta) thay vì toàn bộ tệp. Điều này giúp quá trình đồng bộ diễn ra gần như tức thì và tiết kiệm đáng kể băng thông cho cả người dùng và nhà cung cấp dịch vụ. Trong lĩnh vực IoT, nơi các thiết bị thường có tài nguyên hạn chế và kết nối mạng không ổn định, việc gửi các bản cập nhật firmware dưới dạng các bản vá delta siêu nhỏ là một giải pháp tối ưu, đảm bảo hệ thống luôn được cập nhật an toàn và hiệu quả.

02/10/2025

Trích đoạn nội dung tài liệu

Chương 1 đã cho ta thấy được tổng quan về các phương pháp nén. Mỗi phương pháp nén đề có ưu nhược điểm riêng. Chương 2 sẽ trình bày chi tiết về phương pháp nén theo Delta. Là một trong những phương pháp nén tốt nhất hiện nay được sử dụng.

Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn download by : skknchat@gmail.com 17 CHƯƠNG 2 CÔNG NGHỆ NÉN DELTA Công nghệ nén Delta được tập đoàn Microsoft phát triển, nó là một công nghệ nén khác biệt. Chủ yếu sử dụng cho các chương trình ứng dụng của Microsoft như Windows Update hay cho lập trình giao diện API. Quá trình nén dựa trên sự sai khác giữa 2 file, do đó tạo ra một file có kích thước nhỏ hơn đáng kể trước khi truyền qua mạng so với các phương pháp nén khác. Giới thiệu về công nghệ nén Delta 2.

Khái niệm về nén Trong một hệ thống nén dữ liệu thông thường, bộ nén chấp nhận một file và cung cấp một đại diện nhỏ gọn hơn của file đó. Bộ giải nén thực hiện chức năng ngược lại, chấp nhận một dạng file nhỏ gọn và xây dựng lại file ban đầu[9]. Mô tả quá trình này. Bộ nén chấp nhận dữ liệu F' và đưa ra một đại diện đã nén C(F').

Sau đó, bộ giải nén chấp nhận C(F') và xây dựng lại dữ liệu ban đầu F'. Bộ nén dữ liệu thông thường Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn download by : skknchat@gmail. Bộ nén Delta Bộ nén Delta chấp nhận 2 input: một file đích (target file) và một file tham chiếu hay file cơ sở (basic file). Giống như các bộ nén thông thường khác, bộ nén Delta cũng cung cấp một đại diện nhỏ gọn hơn của file ban đầu.

Đại diện nhỏ gọn hơn này còn được gọi là Delta[8], có thể tham chiếu tới phần dữ liệu tương tự được tìm thấy trong file cơ sở. Bộ giải nén Delta, chấp nhận Delta cùng với file cơ sở, và xây dựng lại file đích (target file). Mô tả quá trình nén Delta. Bộ tạo Delta chấp nhận dữ liệu đích F' cùng với dữ liệu cơ sở F, và cung cấp một đại diện đã nén F-F'.

Sau đó Delta applier chấp nhận F-F' cùng với phần dữ liệu cơ sở F, để xây dựng dữ liệu đích F' như hình vẽ. Bộ nén Delta 2. Tính hiệu quả Delta sẽ nhỏ khi các file F và F' gần giống nhau, điều này giống như sự khác nhau giữa file cơ sở và file đích. Sự khác nhau giữa 2 phiên bản có thể Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn download by : skknchat@gmail.

khi cần update hoặc fix các yếu tố mới được làm gần đó và khi đó Delta sẽ nhỏ. Tuy nhiên, bộ nén Delta không bị giới hạn đối với việc tạo ra các bản Delta giữa các phiên bản khác nhau cùng một file[6]. Quá trình tạo này cần 2 file là input. Kích thước của file Delta tùy thuộc vào sự giống nhau giữa hai file này.

Delta Compression API yêu cầu các dạng đặc biệt của các file có thể thực thi chảng hạn như file EXE hoặc DLL. Nói riêng, các dạng file có thể thực thi được kế để chạy trên dòng Intel 32 bit I386 sẽ có cách đối xử riêng. Khi file basic và target là các file thực thi giống nhau, kích thước của Delta có thể giảm tới 50 -70%. Nền tảng chung Trong vấn đề bộ nén Delta chúng ta có hai file, và mục đích là ước lượng 1 file fδ có kích thước nhỏ nhất có thể và chúng ta có thể xây dựng lại 1 file fnew từ fδ và file fold [8].

Trước đây, ta có nhiều nghiên cứu trong phạm vi sự biến đổi String sang String, thực hiện các thao tác insert, update và delete nhằm biến đổi từ String này sang String khác. Các nghiên cứu để giải quyết vấn đề này dựa trên việc tìm kiếm chuỗi ký tự chung lớn nhất của 2 string bằng cách sử dụng chương trình động và bổ sung tất cả các kí tự còn lại vào fnew một cách rõ ràng [5]. Tuy nhiên, vấn đề đó vẫn không phải là trường hợp tổng quát đối với bộ nén Delta. Để giải quyết các giới hạn trên, Tichy (một nhà nghiên cứu Ấn Độ) đã định nghĩa sự biến đổi string – string bằng việc di chuyển khối [2].

Một sự di chuyển khối lại được định nghĩa qua một bộ ba (p,q,l) trong đó f old [p,…,p+l- 1]= fnew [q,…,q+l-1].Nó thể hiện một chuỗi có độ dài l và không có ký tự trống của fold và fnew. Cho trước fold và fnew, file fδ có thể được xây dựng như Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn download by : skknchat@gmail.com 20 một tập chuyển đổi cực tiểu của khối di chuyển, vậy mỗi thành phần f new[i] cũng xuất hiện trong fold sẽ không được chứa trong 1 khối di chuyển [3]. Cũng có một cách khác để xây dựng fδ là từ chuỗi chung dài nhất như đã được nghiên cứu trước đây [4]. Điều kiện tối thiểu đảm bảo sự so sánh tốt nhất theo hướng nghiên cứu di chuyển khối là chuỗi chung dài nhất.

Như vậy, khi nào thì fδ là tối ưu với 1 cặp fold và fnew? Tichy cũng chỉ ra rằng thuật toán tham lam sẽ cho ra kết quả trong 1 tập chuyển đổi tối thiểu và fδ dựa trên một tập tối thiểu đó có thể được xây dựng trong tuyến không gian và thời gian sử dụng cây tiền tố [3]. Tuy nhiên, các hệ số trong không gian phức tạp làm cho hướng nghiên cứu trở thành không thực tế. Một hướng nghiên cứu thực tế hơn là sử dụng bảng băm với không gian một chiều nhưng thời gian 2 chiều lại vô cùng phức tạp. Hướng nghiên cứu di chuyển theo khối đã nói ở trên đã mô tả một nền tảng cơ bản trong sự phát triển của thuật toán nén Delta.

Trong khi các nghiên cứu trước đây tập trung vào sửa đổi – xây dựng một chuỗi tối ưu của thao tác chỉnh sửa nhằm truyền fold vào fnew, thuật toán di chuyển khối dựa trên thuật toán copy, trong đó fnew như một chuỗi tối thiểu của thao tác copy từ fold. Thuật toán nén Lempel-Ziv từ những năm 1980 đã thực hiện kỹ thuật nén delta theo hướng copy. Một cách đặc biệt, thuật toán LZ77 cũng được xem như một chuỗi thao tác liên quan đến việc thay thế một tiền tố của string đang được mã hóa bởi một sự tham chiếu tới một substring y hệt đã được mã hóa trước đó. Như vậy, nén Delta có thể được xem một cahcs đơn giản như sự thi hành của LZ77 với fold đại diện cho text đã mã hóa trước đó.

Trên thực tế, không có gì ngăn chúng ta chứa một phần của fnew đã mã hoá trong việc tìm kiếm một tiền tố phù hợp dài nhất. Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn download by : skknchat@gmail.com 21 Một vài thay đổi bổ sung được yêu cầu để nhận một sự thi hành của LZ77 trên cơ sở kỹ thuật nén delta. Có rất nhiều sự thi hành như vậy đã được thiết kế nhưng khung cơ bản thì vẫn tương tự như vậy. Chúng chỉ khác nhau ở sự mã hoá và cơ chế update.

Trong phần tiếp theo, chúng ta sẽ mô tả chi tiết một kỹ thuật như thế. Bộ nén LZ77- Nền tảng của bộ nén Delta Các bộ nén Delta phổ biến nhất hiện nay dựa trên thuật toán copy theo hướng nghiên cứu Lempel - Ziv[1]. Một trong các tool đó và vdelta và sự biến thể của nó vcdiff, xdelta được dùng trong XDFS, và công cụ zdelta Zdeta (tool) dựa trên thư viện nén zlib có thay đổi một chút, có một vài ý tưởng bổ sung thêm vào đó. Ai đã quen thuộc với zlib, gzib và các thuật toán dựa trên Lempel- Ziv sẽ dễ dàng hiểu được sự mô tả này.

Ý tưởng cơ bản là, để mã hóa file hiện thời ta sẽ chỉ ra substring trong file tham chiếu, cách làm này cũng tốt như mã hóa một phần file hiện thời. Để nhận biết sự phù hợp trong khi mã hóa, chúng ta duy trì 2 bảng, một file tham chiếu, Told, và một cho phần đã mã hoá của file hiện thời, Tnew. Bảng Tnew về bản chất được xử lý theo cách của bảng băm trong gzip, trong đó, chúng ta insert các thực thể mới khi chúng ta xem xét và mã hoá f new. Bảng Told được xây dựng sớm hơn bằng cách quét fold , giả sử fold không quá lớn.

Khi tìm kiếm sự phù hợp, chúng ta tìm trong cả 2 bảng để tìm ra sự phù hợp lớn nhất. Quá trình băm của 1 substring được làm trên 3 ký tự đầu tiên của nó[7]. Giả sử rằng cả 2 file tham chiếu và file hiện thời đều vừa trong bộ nhớ chính. Cả 2 bảng băm được khởi tạo rỗng.

Các bước cơ bản trong khi mã hóa như sau ( giải mã thì có thể suy ra từ việc mã hóa). Tiền xử lý file tham chiếu Số hóa bởi Trung tâm Học liệu – ĐHTN http://www.vn download by : skknchat@gmail. Tính , giá trị băm của 3 ký tự đầu tiên bắt đầu vị trí thứ i trong b. Insert 1 con trỏ vào vị trí i trong bảng băm hi của Told 2.

Mã hoá file hiện thời Khởi tạo các con trỏ p1,…pk bằng 0, với k=2 Set j=0 While j<= len(fnew): a. Tính , giá trị băm của 3 ký tự đầu tiên bắt đầu từ vị trí j trong fnew b. Tìm hj trong cả Told và Tnew để tìm ra một sự phù hợp tốt nhất, chẳng hạn, 1 substring trong fold hoặc một phần đã mã hoá rồi của fnew (phần có 1 tiền tố chung với độ dài lớn nhất bắt đầu tại vị trí j của fnew). + Insert một con trỏ tới vị trí j trong bảng băm hj của Tnew.

+Nếu sự phù hợp có độ dài ít nhất là 3, mã hoá vị trí của sự phù hợp liên quan tới (tương ứng với) j nếu sự phù hợp trong f new, và tương ứng với một trong các con trỏ pi nếu sự phù hợp trong fold. Nếu có rất nhiều sự phù hợp như vậy với cùng độ dài được tìm thấy trong (b), chọn cái có khoảng cách tương đối nhỏ nhất tới vị trí j trong fnew hoặc tới một trong các con trỏ trong fold. Cũng phải mã hoá độ dài của phần phù hợp và con trỏ được sử dụng trong tham chiếu. Tăng j thêm một phần bằng độ dài của sự phù hợp, và cập nhật con trỏ pi nếu có.

+ Nếu không có sự phù hợp nào tại độ dài tối thiểu 3, viết ra ký tự f new- [j] và tăng j lên 1. Có một số chi tiết bổ sung trong sự thi hành. Đầu tiên, chúng ta có thể chọn một loạt các chính sách để cập nhật các con trỏ pi.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ