Luận văn Công nghệ nén delta ứng dụng trong cập nhật phần mềm tại Ngân hàng Công thương Việt Nam

ĐẠI HỌC QUỐC GIA HÀ NỘI  
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ  
Nguyễn Thị Hương  
CÔNG NGHỆ NÉN DELTA  
ỨNG DỤNG TRONG CẬP NHẬT PHẦN MỀM TẠI  
NGÂN HÀNG CÔNG THƯƠNG VIỆT NAM  
Ngành: Công nghệ thông tin  
Chuyên ngành: Truyền dữ liệu và mạng máy tính  
Mã số: 60 48 15  
LUẬN VĂN THẠC SĨ  
NGƯỜI HƯỚNG DẪN KHOA HỌC  
PGS. TS. Nguyễn Văn Tam  
Hà Nội – 2009  
2
LỜI CAM ĐOAN  
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi. Những số liệu trình bày  
trong luận văn là trung thực và có nguồn gốc rõ ràng. Các kết luận khoa học của luận  
văn chưa được công bố trong bất kỳ công trình nghiên cứu khoa học nào.  
Nội, ngày 4/12/2009  
Tác giả  
Nguyễn Thị Hương  
3
LỜI CẢM ƠN  
Em xin gửi lời cảm ơn sâu sắc tới thầy giáo hướng dẫn PGS, TS Nguyễn Văn Tam  
đã tận tình chỉ bảo em những kiến thức quý giá giúp em hoàn thành luận văn này.  
Em cũng xin chân thành cảm ơn các thầy, cô giáo khoa Công nghệ thông tin - bộ môn  
Truyền dữ liệu và mạng máy tính đã nhiệt tình chỉ bảo, góp ý để luận văn của em  
được hoàn thiện.  
Tôi xin cảm ơn các đồng chí đồng nghiệp làm việc tại phòng Nghiên cứu phát triển,  
phòng Ứng dụng triển khai, bảo trì và phát triển phần mềm – Trung tâm công nghệ  
thông tin – Ngân hàng công thương Việt Nam đã cung cấp các tài liệu cần thiết để tôi  
hoàn thành luận văn này.  
Do thời gian nghiên cứu cũng như năng lực có hạn, luận văn ko tránh khỏi những  
thiếu sót, mong nhận được sự đóng góp ý kiến của quý thầy cô và các bạn.  
Nội, ngày 4/12/2009  
Tác giả  
Nguyễn Thị Hương  
4
MỤC LỤC  
TRANG PHỤ BÌA..………………………………………………………………….1  
LỜI CAM ĐOAN........................................................................................................2  
LỜI CẢM ƠN.............................................................................................................3  
MỤC LỤC..................................................................................................................4  
DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT............................................................6  
DANH MỤC CÁC BẢNG BIỂU .................................................................................7  
DANH MỤC CÁC HÌNH V.......................................................................................8  
MỞ ĐẦU....................................................................................................................9  
CHƯƠNG 1 - GIỚI THIỆU CHUNG VỀ MỘT SỐ CÔNG NGHỆ NÉN..................... 10  
1.1  
1.2  
1.3  
Tầm quan trọng của nén dữ liệu trong truyền tin................................................. 10  
Nguyên tắc của nén dữ liệu................................................................................. 10  
Một số phương pháp nén dữ liệu......................................................................... 11  
Phương pháp mã hoá độ dài loạt (Run-Length Encoding)............................ 11  
1.3.1  
1.3.2 Phương pháp mã hoá Huffman........................................................................ 12  
1.3.3 Phương pháp nén LZW................................................................................... 14  
1.3.4 Chọn phương pháp nén ................................................................................... 17  
CHƯƠNG 2 – CÔNG NGHỆ NÉN DELTA................................................................... 19  
2.1  
Tổng quan về công nghệ nén Delta ..................................................................... 19  
2.1.1 Tổng quan....................................................................................................... 19  
2.1.2 Tính hiệu qu.................................................................................................. 20  
2.2 Nền tảng................................................................................................................... 20  
2.1.3 Nền tảng chung............................................................................................... 20  
2.1.4 Bộ nén LZ77 - Nền tảng của bộ nén Delta....................................................... 22  
2.3  
Thuật toán nén Delta.......................................................................................... 24  
2.3.1 Giới thiệu........................................................................................................ 25  
2.3.2 Đặt vấn đề:...................................................................................................... 26  
2.3.3 Những nghiên cứu đầu tiên ............................................................................. 27  
2.3.4 Thuật toán cơ bản ........................................................................................... 28  
2.3.5  
2.3.6  
2.4  
2.5  
Sự cải tiến của thuật toán ............................................................................ 32  
Xây dựng lại xâu đích ................................................................................. 34  
Mt vài kết quả thí nghiệm ................................................................................. 37  
Các vấn đề liên quan........................................................................................... 39  
2.5.1 Khoảng trống miễn cưỡng trong bộ nén delta.................................................. 39  
2.5.2 Chọn file tham chiếu....................................................................................... 40  
2.5.3 Đồng bộ các file từ xa..................................................................................... 41  
2.5.3.1 Thuật toán rsync...................................................................................... 41  
2.5.3.2 Các kết quả thực nghiệm của rsync.......................................................... 43  
2.5.3.3 Các ứng dụng.......................................................................................... 44  
CHƯƠNG 3 - ỨNG DỤNG THUẬT TOÁN NÉN DELTA TRONG VIỆC CẬP NHẬT  
CÁC PHẦN MỀM NGHIỆP VỤ TẠI NGÂN HÀNG CÔNG THƯƠNG VIỆT NAM. 46  
3.1  
Mô hình hệ thống công nghệ thông tin trong ngân hàng Công Thương Việt Nam46  
3.2  
Quy trình cập nhật các phần mềm nghiệp vụ trong ngân hàng Công Thương Việt  
Nam 47  
3.3 Chương trình cập nhật tự động các phần mềm nghiệp vụ .................................... 47  
3.3.1 Thiết kế hệ thống ............................................................................................ 47  
5
3.3.2 Thiết kế chương trình...................................................................................... 48  
3.3.2.1 Chương trình đặt lịch tự động.................................................................. 48  
3.3.2.2 Chương trình quản lý trên Server TW...................................................... 49  
3.3.2.2.1 Quản lý gói cập nhật.......................................................................... 49  
3.3.2.3.2 Quản lý danh sách chi nhánh.............................................................. 55  
3.3.2.3.3 Quản lý danh sách ứng dụng.............................................................. 56  
3.3.2.3.4 Upload thủ công gói cập nhật............................................................. 57  
3.3.2.3.5 Xem nhật ký upload........................................................................... 58  
3.3.3 Thực thi chương trình ..................................................................................... 59  
3.3.3.1 Chương trình đặt lịch tự động.................................................................. 59  
3.3.3.2 Chương trình quản lý trên server TW ..................................................... 63  
3.3.3.2.1 Quản lý gói cập nhật ......................................................................... 63  
3.3.3.2.2 Quản lý danh sách chi nhánh............................................................. 65  
3.3.3.2.3 Quản lý danh sách ứng dụng ............................................................. 67  
3.3.3.2.4 Upload thủ công gói cập nhật............................................................ 68  
3.3.3.2.5 Xem nhật ký upload.......................................................................... 69  
CHƯƠNG 4 - KẾT LUẬN............................................................................................... 71  
4.1 Kết luận.................................................................................................................... 71  
4.2. Ưu nhược điểm của phương pháp ............................................................................ 71  
4.3 Hướng nghiên cứu trong tương lai ............................................................................ 72  
TÀI LIỆU THAM KHẢO................................................................................................ 73  
Bảng đối chiếu encoding các bộ chữ hiện hành với Unicode........................................... 74  
Thuật toán Knuth-Morris-Pratt Pattern Matching............................................................ 83  
6
DANH MỤC CÁC KÝ HIỆU, CHỮ VIẾT TẮT  
Chữ viết tắt  
Nội dung tiếng Anh  
Nội dung tiếng Việt  
Delta compression  
Differential compression  
Phương pháp nén dựa trên  
sự sai khác nhau giữa 2  
file  
LCS  
Longgest common  
subsequence  
Chuỗi chung dài nhất (của  
2 xâu /chuỗi)  
LZW  
Tên một phương pháp nén  
được phát minh bởi  
Lempel - Zip và Welch  
Sự phù hợp (sự khớp  
nhau) giữa 2 xâu  
Bản vá của 1 file cần cập  
nhật  
Điều chế biên độ trực giao  
Match  
Patch file  
QAM  
Quadrature Amplitude  
Modulation  
Script  
Đoạn lệnh (viết bằng một  
ngôn ngữ lập trình nào đó)  
nhằm thực hiện một mục  
đích cho trước.  
String  
UTF  
Xâu các ký tự văn bản  
định dạng unicode  
Unicode Transformation  
Format  
7
DANH MỤC CÁC BẢNG BIỂU  
Bảng 2.1: Các kết quả nén cho bộ dữ liệu gcc và emacs (KB /s)......................................... 24  
Bảng 2.2: Các kết quả nén cho tập dữ liệu gcc và emacs (KB)............................................ 44  
Bảng 2.3: Các kết quả nén cho emacs với các tập dữ liệu khác nhau (KB).......................... 44  
8
DANH MỤC CÁC HÌNH VẼ  
Hình 2.1 Bộ nén dữ liệu thông thường................................................................................ 19  
Hình 2.2 Bộ nén Delta........................................................................................................ 20  
Hình 2.3: Sự đối lập của kích thước nén file và sự giống nhau giữa các file (KB)............... 38  
Hình 2.4: Sự đối lập giữa thời gian thực hiện và sự giống nhau của các file........................ 38  
Hình 3.1: Mô hình hệ thống công nghệ thông tin tại NHCTVN.......................................... 46  
Hình 3.2: Các mô đun chính chương trình quản lý tại Server TW....................................... 49  
Hình 3.3: Các chức năng của mô đun Quản lý gói cập nhật ................................................ 50  
Hình 3.4: Lưu đồ chức năng Tạo mới/chỉnh sửa gói cập nhật ............................................. 50  
Hình 3.5: Các chức năng của mô đun Quản lý danh sách chi nhánh.................................... 55  
Hình 3.6: Mối quan hệ giữa chức năng quản lý danh sách chi nhánh và các chức năng khác  
.......................................................................................................................................... 56  
Hình 3.7: Các mô đun chính của chức năng Quản lý danh sách ứng dụng........................... 57  
Hình 3.8: Mối quan hệ giữa chức năng Quản lý danh sách ứng dụng và chức năng Quản lý  
gói cập nhật........................................................................................................................ 57  
Hình 3.9: Mối quan hệ giữa chức năng Upload thủ công gói cập nhật và các chức năng khác  
.......................................................................................................................................... 58  
Hình 3.10: Mối quan hệ giữa chức năng Xem nhật ký upload và các chức năng khác. ........ 58  
Hình 3.11: Thực thi chương trình đặt lịch tự động (1)......................................................... 59  
Hình 3.12: Thực thi chương trình đặt lịch tự động (2)......................................................... 60  
Hình 3.13: Thực thi chương trình đặt lịch tự động (3)......................................................... 60  
Hình 3.14: Thực thi chương trình đặt lịch tự động (4)......................................................... 61  
Hình 3.15: Thực thi chương trình đặt lịch tự động (5)......................................................... 61  
Hình 3.16: Thực thi chương trình đặt lịch tự động (6)......................................................... 62  
Hình 3.17: Thực thi chương trình đặt lịch tự động (6)......................................................... 62  
Hình 3.18: Giao diện màn hình quản lý trên Server TW ..................................................... 63  
Hình 3.19: Thực thi mô đun Quản lý gói cập nhật (1)......................................................... 63  
Hình 3.20: Thực thi mô đun Quản lý gói cập nhật (2)......................................................... 64  
Hình 3.21: Thực thi mô đun Quản lý gói cập nhật (3)......................................................... 64  
Hình 3.22: Thực thi mô đun Quản lý gói cập nhật (4)......................................................... 65  
Hình 3.23: Thực thi mô đun Quản lý danh sách chi nhánh (1) ............................................ 66  
Hình 3.24: Thực thi mô đun Quản lý danh sách chi nhánh (2) ............................................ 66  
Hình 3.25: Thực thi mô đun Quản lý danh sách chi nhánh (3) ............................................ 67  
Hình 3.26: Thực thi mô đun Quản lý danh sách ứng dụng (1)............................................. 67  
Hình 3.27: Thực thi mô đun Quản lý danh sách ứng dụng (2)............................................. 68  
Hình 3.28: Thực thi mô đun Upload thủ công gói cập nhật (1)............................................ 68  
Hình 3.29: Thc thi mô đun Upload thcông gói cp nht (2).......................................... 69  
Hình 3.30: Thc thi mô đun Upload thcông gói cp nht (3).......................................... 69  
Hình 3.31: Thc thi mô đun Xem nhật ký upload (1) ......................................................... 70  
Hình 3.32: Thc thi mô đun Xem nhật ký upload (2) ......................................................... 70  
9
MỞ ĐẦU  
Trong các lĩnh vực của công nghệ thông tin - viễn thông hiện nay, việc truyền tải tin  
tức đã là một công việc xảy ra thường xuyên. Tuy nhiên, thông tin được truyền tải đi  
thường rất lớn, điều này gây khó khăn cho công việc truyền tải: gây tốn kém tài  
nguyên mạng, tiêu phí khả năng của hệ thống… Để giải quyết vấn đề đó, các thuật  
toán nén đã được ra đời.  
Mỗi phương pháp nén có hiệu quả khác nhau với các loại tệp khác nhau. Luận văn  
này sẽ trình bày một phương pháp nén có hiệu quả cao trong việc truyền tải tệp tin  
trên mạng phục vụ cho việc cập nhật phiên bản của tệp tin. Phương pháp dựa trên sự  
sai khác nhau giữa tệp nguồn và tệp đích (gọi là Differential Compression – hay Delta  
Compression) - trong quá trình cập nhật, tệp nguồn là tệp cũ, tệp đích là tệp mới- và  
tạo ra một bản vá có kích thước nhỏ đáng kể so với tệp đích. Khi đó, thay vì phải  
truyền tệp đích có kích thước lớn trên mạng, ta chỉ cần truyền bản vá có kích thước  
rất nhỏ. Phương pháp đã đạt được tỉ lệ nén cao, rất hiệu quả trong việc tiết kiệm tài  
nguyên mạng. 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 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 – tùy thuộc vào dung lượng tệp đích và  
mức độ khác biệt của nó với tệp nguồn. Luận văn cũng trình bày ứng dụng của  
phương pháp nén trong việc cập nhật phần mềm nghiệp vụ tại Ngân hàng Công  
thương Việt Nam.  
10  
CHƯƠNG 1 - GII THIU CHUNG VMT SCÔNG NGHNÉN  
Tm quan trng ca nén dliu trong truyn tin  
1.1  
Trong kthut truyn tin ni tiếp, do các bit dliệu được truyền đi nối tiếp, li bị  
gii hn vdi thông ca kênh truyn và gii hn vcác chun ghép ni...nên tốc độ  
truyền tin tương đối chm. Ðể tăng tốc độ truyn, ta có thdùng nhiều phương pháp  
như sử dng kthuật điu chế pha nhiu mức, điều chế QAM, TCM ...  
Nén dliệu trưc khi truyền đi cũng là một trong các phương pháp nhằm tăng tốc độ  
truyn dliu. Trong các modem hiện đại, vic thc hin nén dliệu trước khi  
truyền đi có thể được thc hin ngay trong modem theo các giao thc V42bis.  
Phương pháp này đòi hi hai modem phi có cùng mt giao thc nén dliệu, điều  
này nhiu khi khó thomãn.  
Có một phương pháp khác là thc hin nén các tp tin ngay tại các máy vi tính trước  
khi truyền đi, tại các máy tính nhn, các tp tin lại đưc giải nén đphc hi li dng  
ban đầu. Phương pháp này có ưu điểm là bên phát và bên thu chcn có chung phn  
mm nén và gii nén, ngoài ra còn có tháp dụng được để truyn dliu qua các  
modem không htrnén dliu hoc truyn dliu trc tiếp qua cng COM ca  
máy tính. Nhược điểm của phương pháp này là các máy vi tính phải tn thêm thi  
gian nén và giải nén, nhưng do sự phát trin nhanh chóng ca các bvi xlý mà thi  
gian thc hin nén và giải nén được gim nhỏ hơn rất nhiu thời gian để truyn dữ  
liu. Ví d, khi truyn mt tập tin có kích thước là 100Kbyte vi dng thc ca mt  
SDU là: 8 bits dliu, 2 bit STOP và 1 bit START, không dùng bit chn l, tốc độ  
truyn là 9600bits/giây thì mt khong 120 giây, trong khi mt máy vi tính vi bvi  
xlí 80386 có ththc hin nén tp tin trên xung còn 50Kbyte chmất chưa đến 10  
giây.  
1.2  
Nguyên tc ca nén dliu  
Thông thường, hu hết các tp tin trong máy tính có rt nhiều thông tin dư thừa, vic  
thc hin nén tp tin thc cht là mã hoá li các tập tin để loi bỏ các thông tin dư  
tha.  
Nhìn chung không thể có phương phát nén tổng quát nào cho kết qutốt đối vi tt  
ccác loi tp tin vì nếu không ta sáp dng n lần phương pháp nén này để đạt được  
mt tp tin nhtuý! Kthut nén tập tin thường được áp dng cho các tập tin văn  
bản (Trong đó có một skí tự nào đó có xác suất xut hin nhiều hơn các kí tự  
khác), các tp tin nh bitmap (Mà có thcó nhng mng lớn đồng nht), các tp tin  
11  
dùng để biu diễn âm thanh dưi dng shoá và các tín hiệu tương tự (analog signal)  
khác (Các tín hiu này có thcó các mẫu được lp li nhiu ln). Ði vi các tp tin  
nhị phân ntập tin chương trình thì sau khi nén cũng không tiết kiệm được nhiu.  
Ngoài ra, trong mt số trường hợp để nâng cao hsố nén người ta có thbbt mt  
sthông tin ca tp tin (Ví dụ như kỹ tht nén nh JPEG).  
1.3  
Mt số phương pháp nén dữ liu  
1.3.1 Phương pháp mã hoá độ dài lot (Run-Length Encoding)  
Loại dư thừa đơn giản nht trong mt tập tin là các đường chy dài gm các kí tlp  
lại, điều này thường thy trong các tập tin đồ hobitmap, các vùng dliu hng ca  
các tập tin chương trình, mt stp tin văn bản...  
d, xét chui sau:  
AAAABBBAABBBBBCCCCCCCCDABCBAAABBBBCCCD  
Chui này có thể được mã hoá một cách cô đọng hơn bằng cách thay thế chui kí tự  
lp li bng mt thhin duy nht ca kí tlp li cùng vi mt biến đếm sln kí  
tự đó được lp li. Ta mun nói rng chui này gm bn chA theo sau bi ba chữ  
B ri li theo sau bi hai chA, ri li theo sau bởi năm chữ B... Vic nén mt chui  
theo phương pháp này được gi là mã hoá độ dài lot. Khi có nhng lot dài, vic  
tiết kim có thlà đáng kể. Có nhiều cách để thc hin ý tưởng này, tuthuc vào  
các đặc trưng của ng dng (các lot chạy có khuynh hướng tương đối dài hay không  
? Có bao nhiêu bit được dùng để mã hoá các kí tự đang được mã ?).  
Nếu ta biết rng chui ca chúng ta chcha các chcái, thì ta có thmã hoá biến  
đếm một cách đơn giản bng cách xen kcác con svi các chcái. Vì vy chui kí  
tự trên được mã hoá lại như sau:  
4A3BAA5B8CDABCB3A4B3CD  
Ở đây "4A" có nghĩa là "bn chA"... Chú ý là không đáng để mã hoá các lot chy  
có độ dài 1 hoc 2 vì cần đến hai kí tự để mã hoá.  
Ði vi các tp tin nhphân mt phiên bản được tinh chế của phương pháp này đưc  
dùng để thu được stiết kim ÐÁNG K. Ý tưởng ở đây là lưu lại các độ dài lot,  
tn dng skin các lot chy thay đổi giữa 0 và 1 để tránh phải lưu chính các số 0  
và 1 đó. Ðiu này giả định rng có mt vài lot chy ngn (Ta tiết kim các bit trên  
mt lot chy chỉ khi độ dài của đường chy là lớn hơn số bit cần để biu din chính  
12  
nó trong dng nhị phân), nhưng khó có phương pháp mã hoá độ dài lot nào hot  
động tht tt trphi hu hết các lot chạy đu dài.  
Vic mã hoá độ dài lot cần đến các biu din riêng bit cho tp tin và cho bản đã  
được mã hoá ca nó, vì vy nó không thdùng cho mi tập tin, điều này có thhoàn  
toàn bt li. Ví dụ, phương pháp nén tập tin kí tự đã được đề nghị ở trên skhông  
dùng được đối vi các chui kí tcó cha s. Nếu nhng kí tự khác được sdụng để  
mã hoá các số đếm, thì nó skhông làm vic vi các chui cha các kí tự đó. Giả sử  
ta phi mã hoá bt kì kí tnào tmt bng chcái cố định bng cách chdùng các  
kí ttbng chữ cái đó. Ðminh ho, gista phi mã hoá bt kì mt chui nào từ  
mt chữ cái đó, ta sẽ giả định rng ta chcó 26 chcái trong bng chcái (và cả  
khong trống) đlàm vic.  
Ðcó thdùng vài chữ cái để biu din các svà các kí tkhác biu din các phn  
tca chui sẽ được mã hoá, ta phi chn mt kí tự đưc gi là kí t"Escape". Mi  
mt sxut hin ca kí tự đó báo hiệu rng hai chcái tiếp theo sto thành mt  
cp (số đếm, kí t) vi các số đếm được biu din bng cách dùng kí tthi ca  
bng chữ cái để biu din si. Vì vy, chui ví dca chúng ta sẽ được biu din  
như sau với Q được xem là các kí t"Escape"  
QDABBBAABQHCDABCBAAAQDBCCCD  
Thp ca kí t"Escape", số đếm và mt kí tlp lại được gi là mt dãy Escape.  
Chú ý rằng không đáng để mã hoá các đường chy có chiều dài ít hơn bốn kí t, vì ít  
nht là cần đến ba kí tự để mã hoá bt kì mt lot chy nào.  
Trong trường hp bn thân kí t"Escape" xut hin trong dãy kí tcn mã hoá ta sử  
dng mt dãy "Escape" vi số đếm là 0 (kí tự space) để biu din kí t"Escape".  
Như vậy trong trường hp kí t"Escape" xut hin nhiu thì có thlàm cho tp tin  
nén phình to hơn trước.  
Các lot chy dài có thể được cắt ra để mã hoá bng nhiu dãy Escape, ví d, mt  
lot chy gm 51 chA sẽ đưc mã hoá như QZAQYA bằng cách dùng trên.  
Phương pháp mã hoá độ dài loạt thường đưc áp dng cho các tập tin đồ hobitmap  
ở đó thường có các mng ln cùng màu được biu diễn dưới dng bitmap là các  
chuỗi bit có đường chy dài. Trên thc tế, nó được dùng trong các tp tin .PCX,  
.RLE.  
1.3.2 Phương pháp mã hoá Huffman  
13  
Các tp tin của máy tính được lưu dưới dng các kí tcó chiều dài không đổi là 8  
bits. Trong nhiu tp tin, xác sut xut hin các kí tnày là nhiều hơn các kí tự khác,  
từ đó ta thấy ngay rng nếu chdùng một vài bit để biu din cho các kí tcó xác  
sut xut hin ln và dùng nhiều bit hơn để biu din cho các kí tcó xác sut xut  
hin nhthì có thtiết kiệm được độ dài tp tin một cách đáng kể. Ví dụ, để mã hoá  
mt chuỗi như sau:  
"ABRACADABRA"  
Nếu mã hoá chui trên trong dng mã nhphân 5 bit ta scó dãy bit sau:  
0000100010100100000100011000010010000001000101001000001  
Ðgii mã thông điệp này, chỉ đơn giản là đọc ra 5 bits tng thời điểm và chuyn  
đổi nó tương ứng vi vic mã hoá nhị phân đã được định nghĩa ở trên. Trong mã  
chun này, chD xut hin chmt ln scn số lượng bit ging chA xut hin  
nhiu ln.  
Ta có thgán các chui bit ngn nht cho các kí tự được dùng phbiến nht, gisử  
ta gán: A là 0, B là 1, R là 01, C là 10 và D là 11 thì chuỗi trên được biu diễn như  
sau:  
0 1 01 0 10 0 11 0 1 01 0  
Ví dnày chdùng 15 bits so với 55 bits như ở trên, nhưng nó không thc slà mt  
mã vì phi lthuc vào khong trống để phân cách các kí t. Nếu không có du phân  
cách thì ta không thgii mã được thông điệp này. Ta cũng có thể chn các tmã  
sao cho thông điệp có thể đưc gii mã mà không cn du phân cách, ví dụ như: A là  
11, B là 00, C là 010, D là 10 và R là 011, các tmã này gi là các tmã có tính  
prefix (Không có tmã nào là tin tca tmã khác). Vi các tmã này ta có thể  
mã hoá thông điệp trên như sau:  
1100011110101110110001111  
Vi chuỗi đã mã hoá này ta hoàn toàn có thgii mã được mà không cn du phân  
cách. Nhưng bằng cách nào để tìm ra bng mã mt cách tt nhất ? Vào năm 1952,  
D.Huffman đã phát minh ra mt cách tổng quát để tìm ra bng mã này mt cách tt  
nht.  
- Bước đu tiên trong vic xây dng mã Huffman là đếm sln xut hin ca mi kí  
ttrong tp tin sẽ đưc mã hoá.  
14  
- Bước tiếp theo là xây dng mt cây nhphân vi các tn số được cha trong các  
nút. Hai nút có tn sbé nhất được tìm thy và mt nút mới được to ra vi hai nút  
con là các nút đó với giá trtn sca nút mi bng tng tn sut ca hai nút con.  
Tiếp theo hai nút mi vi tn snhnht lại được tìm thy và mt nút mi na li  
được tao ra theo cách trên. Lp lại như vậy cho đến khi tt cả các nút được thp  
thành mt cây duy nht.  
- Sau khi có cây nhphân, bng mã Huffman được phát sinh bng cách thay thế các  
tn số ở nút đáy bằng các kí tự tương ứng.  
Ưu điểm của phương pháp mã hoá Huffman là đạt được hsnén cao (Hsnén  
tuthuc vào cu trúc ca các tp tin). Nhược điểm của phương pháp này là bên  
nhn mun gii mã được thông điệp thì phi có mt bng mã giống như bảng mã ở  
bên gửi, do đó khi nén các tập tin bé hsố nén không được cao.  
1.3.3 Phương pháp nén LZW  
Phương pháp nén LZW được phát minh bi Lempel - Zip và Welch. Nó hoạt động  
đựa trên mt ý tưởng rất đơn giản là người mã hoá và người gii mã cùng xây dng  
bn mã.  
Nguyên tc hoạt đng của nó như sau:  
- Mt xâu kí tlà mt tp hp thai kí ttrlên.  
- Nhtt ccác xâu kí tự đã gp và gán cho nó mt du hiu (token) riêng.  
- Nếu ln sau gp li xâu kí tự đó, xâu kí tự sẽ được thay thế bng du hiu ca  
nó.  
Phn quan trng nht của phương pháp nén này là phải to mt mng rt lớn dùng để  
lưu giữ các xâu kí tự đã gp (Mảng này được gi là "Từ đin"). Khi các byte dliu  
cần nén được đem đến, chúng liền được gili trong mt bộ đệm cha  
(Accumulator) và đem so sánh với các chuỗi đã có trong "từ điển". Nếu chui dữ  
liu trong bộ đệm cha không có trong "từ điển" thì nó được bsung thêm vào "từ  
điển" và chsca chui trong "từ điển" chính là du hiu ca chui. Nếu chui  
trong bộ đm chứa đã có trong "từ đin" thì du hiu ca chuỗi được đem ra thay cho  
chui dòng dliu ra. Có bn qui tắc để thc hiên vic nén dliu theo thut toán  
LZW là:  
Qui tc 1: 256 du hiệu đầu tiên được dành cho các kí tự đơn (0 - 0ffh).  
Qui tc 2: Cgng so sánh vi "từ điển" khi trong bộ đm chứa đã có nhiều hơn hai  
kí t.  
15  
Qui tc 3: Các kí tự ở đầu vào (nhn ttp tin sẽ được nén) được bsung vào bộ  
đệm chứa đến khi chui kí ttrong bộ đệm cha không có trong "từ điển".  
Qui tc 4: Khi bộ đệm cha có mt chui mà trong "từ điển" không có thì chui  
trong bộ đm chứa được đem vào "từ điển". Kí tcui cùng ca chui kí ttrong  
bộ đệm cha phi li trong bộ đệm chứa để tiếp tc to thành chui mi.  
dụ: Các bước để mã hoá chuỗi "!BAN!BA!BAA!BAR!" như sau (Bảng 4. 1):  
- Bước 1: Kí tthnhất ‘!’ được ct vào bộ đm chứa để chun bto nên mt  
chui.  
- Bước 2: Kí tthhai ‘B’ ni thêm vào sau kí t!. Vì trong "từ điển" chưa có  
chui "!B" nên chuỗi này được thêm vào "từ điển" và được gán du hiu là  
100h (Vì từ 000h đến 0ffh được dành riêng cho các kí tự đơn: Qui tắc 1). ‘!’  
được gi ra còn ‘B’ phi li trong bộ đệm cha.  
16  
- Bước 3: Kí tthba ‘A’ thêm vào sau ‘B’. Chui "BA" cũng chưa có trong "từ  
điển" nên nó được thêm vào "từ điển" và gán du hiu là 101h. ‘A’ li trong  
bộ đệm cha còn ‘B’ được gi ra.  
- Bước 4: Kí tthứ tư ‘N’ thêm vào sau ‘A’ tạo thành chui "AN" cũng chưa có  
trong "từ điển" nên được thêm vào "từ điển" và có du hiu là 102h. ‘N’ li  
trong bộ đm cha còn ‘A’ được gi ra.  
- Bước 5: Kí tthứ năm ‘!’ thêm vào sau ‘N’ để to thành chuỗi "N!", "N!" được  
thêm vào "từ đin" vi du hiu là 103h. ‘!’ li còn ‘N’ được gi ra.  
- Bước 6: Kí tthsáu ‘B’ thêm vào sau ‘!’. Ln này thì chuỗi "B!" đã có trong  
"từ đin" nên không có kí tự nào được gi ra. "B!" tiếp tc li trong "từ đin"  
để to ra chui mi.  
- Bước 7: Kí tthby ‘A’ thêm vào sau ‘B’ để to thành chui "B!A", do  
"B!A" không có trong "từ điển" nên nó được thêm vào "từ điển" và gán du  
hiệu là 104h đồng thi du hiệu 100h được gi ra thay cho "B!" (Qui tc 4). A  
tiếp tc li trong bộ đệm chứa để to thành chui mi.  
Các bước trên cthế tiếp tục cho đến khi hết tp tin cn nén. Vic giảm kích thước  
chthc sbắt đầu tại bước 7 khi mà mt du hiệu 12 bits là <100h> được gi ra  
thay cho hai byte "B!".  
Trong thut toán nén này, phn ln thi gian khi bắt đầu nén chyếu mt vào vic  
to "từ đin". Khi "từ điển" đủ ln, xác sut gp chui bộ đệm cha trong "từ đin"  
tăng lên và càng nén được nhiều hơn. Một điều cn chú ý ở đây là mỗi mt du hiu,  
17  
ta phải lưu một chui trong "từ điển" để so sánh. Vì du hiệu được biu din bng  
mt s12 bits nên "từ đin" scó 4096 lối vào, khi tăng số bit dbiu din du hiu  
lên thì hiu qunén stốt hơn nhưng lại bgii hn bi bnhca máy tính. Vì d,  
khi dùng 16 bits để biu din mt du hiu thì "từ điển" phải có đến 65536 li vào,  
nếu mi li vào có khong 20 kí tthì "từ đin" phi ln khong 1,2 MB. Vi mt từ  
điển có dung lượng như vậy rt khó có ththc hin trên các máy tính PC hoạt động  
dưới hệ điều hành DOS vì gii hn ca một đoạn (Segment) là 64KB. Ưu điểm ca  
phương pháp nén LZW là bên nhn có thtxây dng bng mã mà không cn bên  
gi phi gi kèm theo bn tin nén.  
1.3.4 Chọn phương pháp nén  
Mỗi phương pháp nén có các ưu nhược điểm riêng, thuật toán nén độ dài lot  
(Runlength) không tháp dng cho mhiu loi tập tin được, ví dụ như tập tin chương  
trình, tập tin cơ sở dliu... vì ở đó các loạt chy là rt ngắn, do đó nếu áp dng  
thut toán này không nhng không làm bé tp tin mà còn làm phình to chúng.  
Hai thut toán còn lại (Huffman và LZW) đều có tháp dụng được để nén nhiu loi  
tp tin trên các máy vi tính.  
Thuật toán Huffman có ưu điểm là hsố nén tương đối cao, phương pháp thực hin  
tương đối đơn giản, đòi hi ít bnh, có thxây dng da trên các mảng bé hơn  
64KB. Nhược điểm ca nó là phi cha cbng mã vào tp tin nén thì phía nhn mi  
có thgii mã được do đó hiệu sut nén chcao khi ta thc hin nén các tp tin ln.  
Thuật toán nén LZW có các ưu điểm là hsố nén tương đối cao, trong tp tin nén  
không cn phi cha bng mã. Nhược điểm ca thut toán này là tn nhiu bnh,  
khó thc hin da trên các mảng đơn giản (bé hơn 64KB).  
Các thut toán nén kể trên thường được áp dụng để nén các tập tin lưu trên máy tính  
hoặc trước khi truyn thông trên mạng. Trong trường hp tp tin cn truyn trên  
mng chlà mt bn vá cho các tp thc thi mà phiên bn cũ của chúng đã tn ti  
trên máy đích, việc áp dng các thut toán trên skhông thc shiu qu.  
Một công nghệ nén khác được Microsoft phát triển nhằm cập nhật phiên bản mới cho  
các tệp thực thi. Đó là công nghệ Delta Compression. 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 công nghệ  
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 – tùy  
thuộc vào dung lượng tệp đích và mức độ khác biệt của nó với tệp cơ sở. Vì vậy, việc  
áp dụng công nghệ Delta vào thực tiễn sẽ có ý nghĩa lớn trong truyền dữ liệu trên  
18  
mạng máy tính, giúp giảm lưu lượng trên đường truyền, giảm thời gian truyền nhận  
gói tin.  
19  
CHƯƠNG 2 – CÔNG NGHNÉN DELTA  
Công nghệ nén Delta được phát trin bi Microsoft, là mt công nghnén da trên  
ssai khác nhau của các file và được sdng cho vic cp nht phn mm. Quá  
trình nén da trên ssai khác giữa 2 file, do đó mà tạo ra một file có kích thước nhỏ  
đáng kể hơn so với các phương pháp nén khác.  
2.1  
Tng quan vcông nghnén Delta  
2.1.1 Tng quan  
Trong mt hthng nén dliệu thông thường, bnén chp nhn mt file và cung  
cp một đi din nhgọn hơn của file đó. Bộ gii nén thc hin chức năng ngược li,  
chp nhn mt dng file nhgn và xây dng lại file ban đầu.  
mô tquá trình này. Bnén chp nhn dliệu F’ và đưa ra một đại diện đã  
Hình 2.1  
nén C(F’). Sau đó, bộ gii nén chp nhn C(F’) và xây dng li dliệu ban đầu F’.  
Hình 2.1 Bnén dliệu thông thường  
Hthng nén Delta cũng sử dng mt bộ nén, nhưng bộ nén này chp nhn 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, bnén Delta cũng cung cấp một đại din nhgn  
hơn của file ban đầu. Đại din nhgọn hơn này còn được gi là Delta[4], có thể  
tham chiếu ti phn dliệu tương tự được tìm thy trong file cơ sở. Bgii nén  
Delta, hay applier, chp nhn Delta cùng với file cơ sở, và xây dng lại file đích  
(target file).  
20  
Hình 2.2 mô tquá trình nén Delta. Bto Delta chp nhn dliệu đích F’ cùng với  
dliệu cơ sở F, và cung cp một đại diện đã nén ÄF-F’. Sau đó Delta applier chấp  
nhn delta ÄF-F’ cùng vi phn dliệu cơ sở F, để xây dng dliệu đích F’.  
Hình 2.2 Bnén Delta  
2.1.2  
Tính hiu quả  
Delta snhkhi các file F và F’ gn 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 gia 2 phiên bn có thnh(khi cn  
update/fix các yếu tmới được làm gần đó) và khi đó, delta sẽ nh.  
Tuy nhiên, bnén Delta không bgii hạn đối vi vic to ra các bn delta gia các  
phiên bn khác nhau ca cùng 1 file [9]. Quá trình to này cn 2 file là input. Kích  
thước ca file delta tuthuc vào sging nhau gia 2 file này.  
Phn dliu xut hin trong target không ging trong basic sẽ được nén. Trong  
trường hp xu nhất, khi basic và target không có điểm nào chung, delta slà mt  
dng nén ca target.  
Delta Compression API yêu cu các dạng đặc bit ca các file có ththc thi (chng  
hn EXE hoc DLL). Nói riêng, các dng file có ththực thi được thiết kế để chy  
trên dòng Intel 32 bit i386 sẽ có cách đối xriêng. Khi file basis và target là các file  
[4]  
thc thi giống nhau, kích thước ca delta có thgim ti 50-70%  
.
2.2 Nn tng  
2.1.3 Nn tng chung  
21  
Nhắc lại rằng, trong vấn đề về bộ nén delta, chúng ta có 2 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 [4]. Trước đây, đã có nhiều nghiên cứu trong phạm vi sự biến  
đổi từ 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 [8]. Tuy nhiên, vấn  
đề biến đối string – string 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 [6]. Một sự di chuyển khối lại được  
định nghĩa qua một bộ ba (p,q,l) trong đó fold [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ư 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 fnew[i] cũng xuất hiện trong fold sẽ không được chứa  
trong 1 khối di chuyển [6]. 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 [7]. Đ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ố [6]. 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  
22  
tác liên quan đến việc thay thế một tiền tố của string đang được mã hoá bởi một sự  
tham chiếu tới một substring y hệt đã được mã hoá trước đó. Trong sự thi hành mang  
tính thực tế nhất của LZ77, một thuật toán tham lam được sử dụng, nhờ đó, tiền tố  
phù hợp dài nhất được tìm thấy trong text đã mã hoá ngay trước đó sẽ được thay thế  
bởi một thao tác copy.  
Như vậy, 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ã hoá 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.  
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ế.  
2.1.4 Bnén LZ77 - Nn tng ca bné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 của Lempel-Ziv[9]. Một trong các tool đó là vdelta và sự biến thể của nó vcdiff,  
xdelta được dùng trong XDFS, và công cụ zdelta.  
Bây giờ, ta sẽ mô tả chi tiết bộ nén như vậy, sử dụng ví dụ của zdelta. Zdelta (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 được bổ sung  
thêm vào đó. Ai đã quen thuộc với zlib, gzip 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ã hoá 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ã hoá một phần  
trong file hiện thời.  
Để nhận biết sự phù hợp trong khi mã hoá, chúng ta duy trì 2 bảng, một cho file tham  
chiếu, T , và một cho phần đã mã hoá của file hiện thời, T . Bảng T về bản  
new  
old  
new  
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á fnew. Bảng T được xây dựng sớm hơn  
old  
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ó[4]  
23  
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ã hoá như sau (giải mã thì  
có thể suy ra từ việc mã hóa).  
1. Tiền xử lý file tham chiếu  
For i = 0 to len (fold ) -3:  
(a) Tính hi = h ( fold [i, i+2] ), giá trị băm của 3 ký tự đầu tiên bắt đầu vị trí  
thứ i trong fold  
(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 hj = h ( fnew [ j,j+2] ), 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).  
(c) Insert một con trỏ tới vị trí j trong bảng băm hj của Tnew.  
(d) 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 fnew, 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ó.  
(e) 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ự  
fnew[j] và tăng j lên 1.  
24  
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. Động cơ của các con trỏ này, giống như  
trong vdelta, là trong rất nhiều trường hợp, vị trí của sự phù hợp tiếp theo từ fold là  
một khoảng cách ngắn sau vị trí của cái trước, đặc biệt, khi các file giống nhau. Vậy,  
bằng việc update một trong số các con trỏ để trỏ tới vị trí cuối của của sự phù hợp  
trước đó, chúng ta hy vọng rằng sẽ mã hoá một cách ngắn gọn vị trí của sự phù hợp  
tiếp theo. Thông thường, chính sách di chuyển con trỏ một cách thông minh có thể  
dẫn tới việc bổ sung sự cái tiến trên các công cụ đang tồn tại.  
Một chi tiết quan trọng khác liên quan tới phương pháp được sử dụng để mã hoá  
khoảng cách, độ dài phù hợp, thông tin con trỏ và các ký tự. Ở đây, zdelta sử dụng  
phương pháp mã hoá Huffman được cung cấp bởi zlib, trong khi vdelta sử dụng sự  
mã hoá theo byte nhanh hơn rất nhiều nhưng lại ít cô đọng hơn. Ngược lại, xdelta  
không có sự mã hoá thông minh nào, nó để cho người dùng áp dụng một công cụ nén  
để đưa ra output[4].  
gcc size  
27288  
gcc time  
emacs size emacs time  
Uncompressed  
Gzip  
-
27326  
8191  
2131  
1821  
1465  
-
7479  
461  
289  
250  
24/30  
20  
26/35  
29  
Xdelta  
Vcdiff  
33  
36  
Zdelta  
26/32  
35/42  
Bảng 2.1: Các kết quả nén cho bộ dữ liệu gcc và emacs (KB /s)  
Thut toán nén Delta  
2.3  
Như trên đã nói, Delta sử dụng quá trình biến đổi từ string sang một string bằng các  
khối di chuyển. Phần này sẽ mô tả chi tiết về thuật toán.  
Vấn đề biến đổi từ một string sang một string (String – to – string correction [6] ) là  
quá trình tìm ra một chuỗi các thao tác chỉnh sửa tối thiểu nhằm thay đổi từ một  
string cho trước (string nguồn trong thuật toán nén) sang một string cho trước khác  
(string đích trong thuật toán nén)[6]. Có nhiều thuật toán tính một chuỗi chung dài  
nhất của hai string (Longgest common subsequence - LCS) và sau đó quan tâm tới  
các ký tự không được chứa trong LCS xem đó như các ký tự khác nhau giữa hai  
string.  
25  
Dưới đây là một thuật toán cung cấp chuỗi chỉnh sửa ngắn nhất khi biến đổi một  
string thành một string khác. Thuật toán sẽ là tối ưu trong trường hợp nó tạo ra một  
tập tối thiểu của xâu chung của một string đối với một string khác.  
Hai sự cải tiến về thời gian chạy của thuật toán cũng được nói tới. Thời gian chạy và  
không gian bộ nhớ của thuật toán cải tiến có thể so sánh được với thuật toán LCS.  
2.3.1 Gii thiu  
Vấn đề sửa từ string sang string là tìm ra một chuỗi các thao tác chỉnh sửa tối thiểu  
nhằm thay đổi từ một string cho trước sang một string cho trước khác. Độ dài của  
chuỗi chỉnh sửa thể hiện sự khác nhau giữa hai string. Các chương trình xác định sự  
khác nhau theo cách này thường được dùng trong các trường hợp sau:  
(1) Các chương trình khác nhau giúp xác định các phiên bản của text file khác  
nhau như thế nào. Chẳng hạn, việc tính toán sự khác nhau giữa các phần đã  
được xem xét rồi của 1 mô đun phần mềm sẽ giúp các lập trình viên đánh dấu  
sự phát triển (tiến triển) của mô đun trong quá trình sửa chữa, hoặc giúp cho  
việc tạo các test case để thi hành các phần đã thay đổi của mô đun. Một ứng  
dụng khác sẽ tự động tạo ra các vạch thay đổi cho các phiên bản mới.  
(2) Các tài liệu được xem lại một cách thường xuyên như các chương trình hay  
các bức đồ hoạ được lưu một cách kinh tế nhất thành một tập có liên quan tới  
phiên bản cơ sở. Vì các thay đổi thì thường nhỏ và chỉ chiếm khoảng chưa đầy  
10% không gian cần thiết cho 1 bản copy hoàn chỉnh, các kỹ thuật khác có thể  
lưu tương đương khoảng 11 bản đã được xem lại trong 1 không gian nhỏ hơn  
so với việc lưu giữ 2 bản đã được xem lại (1 bản gốc và 1 bản sao lưu) trong  
định dạng clear text.  
(3) Các thay đổi đối với các chương trình và các dữ liệu khác được phân tán một  
cách kinh tế nhất, chúng là một chuỗi các chỉnh sửa nhằm biến đổi phiên bản  
cũ thành một phiên bản mới. Hướng nghiên cứu này thường được dùng trong  
phân tán phần mềm. Một ứng dụng có liên quan có thể được tìm thấy trong các  
phiên bản hiển thị và các gói đồ hoạ. Các chương trình này cập nhật một cách  
hiệu quả bằng cách tính sự khác nhau về nội dung giữa phiên bản cũ và mới,  
sau đó chỉ truyền những thay đổi tới phần hiển thị.  
(4) Trong lĩnh vực di truyền học, các thuật toán khác nhau so sánh các phân tử dài.  
Sự khác nhau cung cấp một mối quan hệ giữa các loại cơ thể sinh vật .  
Hầu hết các chương trình hiện tại tính toán sự khác nhau đều dựa trên các thuật toán  
xác định chuỗi chung dài nhất (LCS). Một LCS của hai string chứa chuỗi các ký tự  
26  
chung của hai string bằng cách xoá đi 0 hoặc nhiều ký tự từ mỗi string đó [8]. Chẳng  
hạn, LCS của hai string shanghai và sakhalin là sahai. Khi một LCS đã được tạo ra,  
tất cả các ký tự không được chứa trong nó được xem như là phần khác nhau giữa hai  
string. Qua quá trình scan đồng thời trên hai string, LCS sẽ tách các ký tự này ra một  
cách nhanh chóng. Chẳng hạn, trong đoạn script dưới đây, dựa trên LCS sahai, chúng  
ta có thể xây dựng chuỗi sakhalin từ chuỗi shanghai:  
M 0,1  
M 2,1  
A “k”  
M 5,2  
A “l”  
M 7,1  
A “n”  
Trong đó, lệnh dạng M p,l là lệnh di chuyển, nó thêm một chuỗi S[p,….p + l - 1] của  
chuỗi S tới chuỗi đích. Lệnh dạng A “w” thêm chuỗi w tới chuỗi đích. Trong ví dụ  
trên, script chiếm nhiều không gian bộ nhớ hơn chuỗi đích. Trong các trường hợp  
thực tế, chuỗi chung không phân mảnh, và một sự di chuyển đơn bao gồm cả một  
chuỗi dài. Thêm vào đó, nếu kỹ thuật này được áp dụng đối với text, người ta thường  
chọn cả một dòng text hơn là các ký tự đơn lẻ. Do đó, không gian nhớ cho 1 hành  
động di chuyển sẽ không đáng kể so với lệnh thêm (Add), do đó cần giảm một cách  
tối đa lệnh Add. Chú ý rằng, trong ví dụ trên, lệnh Add cuối cùng có thể được thay  
thế bằng một lệnh Move, bởi vì ký tự “n” đã xuất hiện trong cả hai chuỗi. Nếu theo  
định nghĩa của LCS, thì “n” không thể được chứa trong LCS. Thuật toán được giới  
thiệu sau đây sẽ không bỏ sót các trường hợp như vậy.  
2.3.2 Đặt vấn đề:  
Cho hai string S = S [0,….n], n 0 và T = T[0,….m], m 0, một khối di chuyển là  
một bộ (p,q,l) với S[p,….p+l-1] = T[q,….q+l-1] ( 0p n-l+1, 0q m-l +1, l>0)  
[6]. Như vậy, một khối di chuyển là một chuỗi chung không rỗng của S và T có độ  
dài l, bắt đầu tại vị trí p trong xâu S và vị trí q trong xâu T. Một tập phủ của T đối với  
S, biểu thị là S(T), là một tập của khối di chuyển, trong đó mỗi ký tự T[i] xuất hiện  
trong S sẽ được chứa chính xác trong một khối di chuyển. Ví dụ, một tập phủ của  
T=abcab đối với S = abda là [(0,0,2),(0,3,2)]. Một tập phủ tầm thường bao gồm các  
khối di chuyển có độ dài 1, thể hiện mỗi ký tự T[i] cũng xuất hiện trong S.  
27  
Vấn đề là tìm ra 1 tập phủ tối thiểu, S(T), trong đó |S(T)| |S(T)| với mọi S(T).  
Thuộc tính bao phủ của S(T) đảm bảo rằng nó chứa tất cả sự phù hợp có thể, thuộc  
tính tối thiểu khiến số lượng khối di chuyển (và do đó, cả đoạn script chỉnh sửa) nhỏ  
nhất có thể.  
Do thuộc tính bao phủ, rõ ràng rằng S(T) chứa LCS của S và T (xem sự móc nối của  
các xâu T[qj, ….qj+lj-1], trong đó (pj,qj,lj) là một khối di chuyển của S(T), và các xâu  
con theo thứ tự tăng của qj). Ép buộc tối thiểu đảm bảo rằng LCS không thể cung cấp  
1 sự tạo ra khối di chuyển tốt hơn.  
2.3.3 Nhng nghiên cứu đu tiên  
Trước khi trình bày về giải pháp, chúng ta sẽ nói về các nghiên ban đầu. Hướng  
nghiên cứu đầu tiên là sử dụng LCS. Như chúng ta đã biết, một LCS có thuộc tính  
không cần thiết tạo ra một tập phủ của các khối di chuyển. Ví dụ, 2 cặp xâu sau đây  
đều chứa LCS abc nhưng không chứa xâu chung (được di chuyển) de hoặc xâu chung  
(được lặp lại) abc. LCS phù hợp được chỉ ra ở bên trái, S(T) ở bên phải.  
S = a b c d e  
S = a b c d e  
T = d e a b c  
S= a b c  
T = d e a b c  
S= a b c  
T= a b c a b c  
T= a b c a b c  
Heckel chỉ ra các vấn đề tương tự như vậy với thuật toán LCS và đề xuất một thuật  
toán (theo thời gian) để dò khối di chuyển [7]. Thuật toán sẽ thực hiện thoả đáng  
trong trường hợp có các ký tự lặp lại trong xâu. Tuy nhiên, trong các trường hợp  
khác, thuật toán cho kết quả không tốt. Ví dụ, với hai xâu aabb bbaa, thuật toán  
của Heckel sẽ thất bại trong việc tìm ra xâu chung.  
Một sự cải tiến của hướng nghiên cứu LCS là áp dụng việc tách LCS một cách lặp đi  
lặp lại. Ví dụ, sau khi tìm ra LCS đầu tiên trong ví dụ trên, ta sẽ loại bỏ nó từ xâu đích  
28  
T và tính lại LCS. Quá trình này được lặp lại cho tới khi chỉ còn lại một LCS có độ  
dài 0. Chiến lược phân tách LCS thành công trong việc tìm ra một tập phủ, nhưng  
không tối thiểu. Ví dụ sau đây minh hoạ:  
S = a b c d e a  
S = a b c d e a  
T = c d a b  
T = c d a b  
Giả sử rằng S là xâu nguồn, T là xâu đích, biểu đồ bên trái chỉ ra sự phù hợp đạt được  
qua một thuật toán phân tách LCS. LCS đầu tiên là cda, LCS thứ hai là b. Vì cda  
không phải là một xâu con của S, chúng ta sẽ đạt được 3 khối di chuyển. Tập phủ tối  
thiểu, được chỉ ra ở bên phải, bao gồm 2 khối di chuyển.  
Một chiến thuật khác là tìm xâu chung dài nhất hơn là chuỗi chung dài nhất (chuỗi  
bao gồm các khoảng trắng, xâu thì không có khoảng trắng). Việc tính xâu chung dài  
nhất một cách lặp lại đã có kết quả trong 1 tập phủ, nhưng không cần thiết tạo tính tối  
thiểu. Hãy xem ví dụ sau:  
S = a b c d e f d e a b  
T = c d e a b c  
S = a b c d e f d e a b  
T = c d e a b c  
Sơ đồ bên trái chỉ ra khối di chuyển đạt được bằng cách tìm kiếm lặp đi lặp lại xâu  
chung dài nhất của S và T. Kết quả là, ta có một tập của 3 khối di chuyển, mặc dù chỉ  
2 khối là tối thiểu. Việc tìm kiếm xâu chung dài nhất là một phương pháp tham lam,  
vì nó có thể che giấu sự phù hợp tốt hơn.  
2.3.4 Thuật toán cơ bản  
Thuật toán bắt đầu từ phía bên trái của xâu đích T, và cố gắng tìm ra tiền tố của T  
trong S. Nếu không có tiền tố nào của T trong S, ta loại bỏ ký tự đầu tiên của T đi và  
bắt đầu lại. Nếu có nhiều tiền tố như vậy trong S, ta chọn tiền tố dài nhất và ghi nó  
như một khối di chuyển. Sau đó, loại bỏ tiền tố tương ứng từ T và sau đó tiếp tục với  
tiền tố dài nhất trong phần đuôi còn lại của T, và bắt đầu với phần đầu của S. Tiến  
trình này tiếp tục cho tới khi T hết các ký tự. Khối di chuyển được ghi lại tạo thành  
S(T), một tập phủ tối thiểu của khối di chuyển của T đối với S, sẽ được hình thành  
sau đó. Ví dụ dưới đây chỉ ra các bước trong sự thi hành của thuật toán.  
Bước 1:  
29  
S = u v w u v w x y  
T = | z u v w x w u  
Khối di chuyển dài nhất bắt đầu tại T[0]: none  
Bước 2:  
S = u v w u v w x y  
T = z| u v w x w u  
Khối di chuyển dài nhất bắt đầu tại T[1]: (3,1,4)  
Bước 3:  
S = u v w u v w x y  
Khối di chuyển dài nhất bắt đầu tại T[5]: (2,5,2)  
T = z u v w x | w u  
Trotìm không có  
sự phù hợp nào, chúng ta tìm kiếm sự phù hợp của tiền tố T[1,…,6] trong bước tiếp  
theo. Lần này, chúng ta tìm thấy 2 sự phù hợp, và sẽ chọn sự phù hợp dài nhất, bắt  
đầu tại S[4]. Trong bước thứ 3, chúng ta tìm kiếm cho tiền tố T[5,..6] trong S[0,…7],  
và tìm thấy sự phù hợp dài nhất tại S[2], có độ dài 2. Bây giờ, T đã được xét hết và  
thuật toán kết thúc. Chú ý rằng, trong mỗi bước, chúng ta sẽ bắt đầu tại phần bên trái  
nhất của S để xem xét tất cả sự phù hợp có thể.  
Thuật toán sẽ được mô tả dưới đây. Chúng ta giả định rằng, xâu nguồn được lưu  
trong mảng S[0…m] và xâu đích được lưu trong T[0,…n]. T[q] là ký tự đầu tiên của  
phần đuôi không tương thích. của T, q được khởi tạo bằng 0.  
Thuật toán như sau:  
q:=0  
While q<= n do  
Begin  
L: tìm p và l trong đó (p;q;l) là 1 khối di chuyển lớn nhất.  
If l>0 then print(p;q;l)  
q:=q+Max(1,l)  
End  
30  
Thực hiện câu lệnh có nhãn L thì rất đơn giản. Tìm S từ trái sang phải cho tiền tố dài  
nhất có thể của T[q…n]. Chú ý rằng, việc tìm kiếm có thể kết thúc ngay khi có ít hơn  
l+1 ký tự còn lại trong S, với l là độ dài lớn nhất của khối di chuyển đã được tìm thấy  
trong sự lặp lại hiện thời. Tương tự như vậy, sẽ không thể tìm thấy một khối di  
chuyển dài hơn nếu ký tự cuối cùng T[n] đã được đạt tới.  
L:  
l:=0; p:=0; pCur:=0  
while pCur +1 <= m and q+1<= n do  
begin {Determine length of match between S[pCur…] and T[q…]}  
lCur :=0;  
while (pCur + lCur <= m) and (q+lCur <= n)  
and then (S[pCur + lCur] = T[q + lCur])  
do lCur := lCur +1;  
if lCur >1 then  
begin {new maximum found}  
l:=lCur; p:=pCur  
end;  
pCur:=pCur +1  
End  
Thời gian chạy của thuật toán được giới hạn bởi mn, không gian bộ nhớ yêu cầu là  
m+n. Bây giờ, chúng ta sẽ chỉ ra rằng thuật toán này sẽ tìm ra một S(T). Rõ ràng, tập  
các khối di chuyển được in ra là một tập phủ, bởi vì mỗi ký tự trong T mà không  
được chứa trong khối di chuyển nào (không thành công) sẽ được match lại mỗi ký tự  
trong S. Để thấy rằng tập phủ là tối thiểu, nghiên cứu T bên dưới, với sự match được  
cung cấp bởi thuật toán của chúng ta biểu thị dưới đây. Các xâu con trong các khối di  
chuyển được gộp lại bởi các dấu “(” và “)”. Các xâu con không được chứa trong các  
khối di chuyển được biểu thị bởi X chẳng hạn.  
…X(….)X(…)(….)X(….)(….)(….)X…  
Giả sử có S(T) có ít khối di chuyển hơn tập được tạo ra bởi thuật toán của chúng ta.  
Rõ ràng là, xâu con được định nghĩa bởi X không thể được chia ra bởi S(T) vì thuật  
toán của chúng ta không cung cấp 1 tập phủ. Chúng ta vì thế có thể không quan tâm  
tới tất cả những xâu con không phù hợp(X), và tập trung vào chuỗi các khối di  
chuyển liền nhau.  
Xem xét các khối di chuyển liên tiếp trong T. Để chứng minh tập phủ được tạo ra bởi  
thuật toán của chúng ta là tối thiểu, ta cần chứng minh rằng không thể chia tập phủ đó  

Tải về để xem bản đầy đủ

pdf 84 trang yennguyen 08/04/2025 130
Bạn đang xem 30 trang mẫu của tài liệu "Luận văn Công nghệ nén delta ứng dụng trong cập nhật phần mềm tại Ngân hàng Công thương Việt Nam", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfluan_van_cong_nghe_nen_delta_ung_dung_trong_cap_nhat_phan_me.pdf