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

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) 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 Luận văn ThS. Công nghệ thông tin 60 48 15 (Trang 34 - 37)

Một đoạn script nhằm xây dựng lại xâu đích T từ xâu nguồn S là một chuỗi của các lệnh move và ađ. Mỗi khối di chuyển (p, q, l) trong s(T) được biểu thị bởi một lệnh dạng M p,l, tiến hành copy xâu S[p,…p+l-1] tới phần đuơi của xâu T. Với bất kỳ xâu con T[u,…v] bao gồm tồn bộ các ký tự khơng xuất hiện trong S, đoạn script chứa câu lệnh A T[u,…v], đơn giản nĩ gắn các xâu con khơng phù hợp của T. Sau khi hồn thành tất cả các câu lệnh, T=T.

Thơng thường, T khơng thể được xây dựng qua một bước đơn trên S, bởi vì các khối di chuyển cĩ thể xen kẽ. Nếu S là một file liên tiếp, chúng ta cĩ thể cực tiểu số thao tác tua lại được gây ra bởi sự xuất hiện xen kẽ của các khối di chuyển theo saụ Trong khi tạo ra đoạn script, việc lựa chọn 1 hoặc 2 hay nhiều khối di chuyển tương đương sẽ khơng cĩ ý nghĩạ Ví dụ, giả sử chúng ta cĩ các tập tương đương bắt đầu với T[q]: B1=(p1,q,l) và B2=(p2,q,l), với p1<p2. Nếu khối di chuyển trước cĩ điểm cuối trong S nằm giữa S[p1] và S[p2], thì việc lựa chọn khối di chuyển B2 sẽ tiết kiệm được 1 thao tác tua lại cho S. Thuật tốn của chúng ta thì dễ dàng chỉnh sửa để thực hiện ý tưởng đĩ. Hơn nữa, việc bắt đầu tại phần kết thúc bên trái của S trong khi tìm kiếm sự match dài nhất cĩ thể, chúng ta sẽ phải bắt đầu tại điểm cuối cùng của sự match trước và gĩi gọn tại điểm kết của S.

Hơn nữa, chúng ta đã giới thiệu đoạn script nhằm xây dựng T một cách độc lập từ S. Điều này cũng cĩ nghĩa là biến đổi S “trong khơng gian”. Dưới đây sẽ bàn về chi tiết thuật tốn.

Giả sử, chúng ta cĩ mảng B[0,…Max(m,n)] khởi tạo lên S, chẳng hạn B[i] = S[i] với mọi 0in. Mục đích nhằm biến đổi nội dung của B thành T. Khố của thuật tốn này là một mảng bổ sung A[0,…n], lưu dấu vết về vị trí của ký tự gốc S[i] trong B. Khởi tạo, A[i]=S[i] với mọi 0in. Một biến h dùng để duyệt A từ trái sang phải, nĩ sẽ cho ta chỉ số của ký tự bên phải nhất liên quan tới khối di chuyển. Khi đĩ, nếu ta cĩ câu lệnh di chuyển thành phần thứ k: M pk,lk,thì h = Max(pj+lj, 0jk). Ta cũng dùng một biến t để chỉ ra chỉ số của ký tự cuối cùng được xử lý trong B. Như vậy, A đại diện cho S và B được biến đổi dần để trở thành T.

Bước đầu tiên là loại bỏ tất cả các ký tự từ B mà khơng cĩ trong T. Đoạn script thực hiện tiền xử lý để nhận biết các ký tự được xố, sau đĩ loại bỏ chúng luơn khỏi B. Nĩ cũng cập nhật mảng map A để phản ánh sự nén đối với các ký tự mà bản sao của chúng trong B đã được xố, bằng cách đánh dấu các thực thể này của Ạ Bước thứ hai xử lý các lệnh trong chuỗị Một lệnh ađ được insert vào bên phải của t, và t được đặt lại tới ký tự cuối cùng. Nĩ cũng cập nhật mảng A cho các ký tự được shift sang bên phải do sự insert đĩ. Với mỗi sự di chuyển dạng M p,l, so sánh p và giá trị hiện thời của h. Nếu p>h, khối di chuyển hiện thời là khối bên phải của khối trước. Các ký tự giữa h và p, chẳng hạn B[A[h+1],…A[p-1]], sẽ khơng được chứa trong khối di chuyển hiện thời, nhưng sẽ được loại bỏ sau đĩ. Đánh dấu chúng và đặt h= p+l-1 và t=A[h]. Vậy, các ký tự S[p,…p+l-1] sẽ được chứa trong kết quả. Mặt khác, nếu ph, khối di chuyển hiện thời sẽ nằm bên trái khối di chuyển trước đĩ, và một xâu con định vị phía trước t phải được di chuyển hoặc copy tiến về phía trước. Tất cả các ký tự trong xâu được đánh dấu để di chuyển bởi các lệnh trước đây bây giờ sẽ được di chuyển, các phần khác đơn giản được copy tiến lên. Cũng cĩ thể hiểu rằng, khối di chuyển hiện thời cĩ liên quan tới các ký tự bên trái hoặc bên phải của h. Trong trường hợp đĩ, đầu tiên xử lý xâu bên trái của h bằng cách di chuyển hoặc copy các thành phần của B[A[p],…A[Min(p+l-1,h)]] vào phía sau của B[t]. Phần cịn lại (cĩ thể rỗng), xâu A[h+1, ….p+l-1] sẽ được chứa bằng cách đặt h=Max(p+l-1,h). Cập nhật A để thể hiện sự di chuyển và thay đổi , và đặt t=A[h].

Dưới đây là một ví dụ về thuật tốn, xâu nguồn shanghai và xâu đích là sakhalin bằng cách áp dụng đoạn script M 0,1; M2,1; A‟‟ k‟‟; M 1,2; A”l”; M 7,1; M 3,1. Thuật tốn cũng cĩ thể được áp dụng để cập nhật phần hiển thị một cách hiệu quả, cung cấp phần hiển thị cho ký tự và dịng được insert và delete, cũng như các thao tác copy/movẹ Mảng A được đặt trong bộ nhớ chính.

S h a n g h a i X X X

s h a n i T

Sau khi loại bỏ các ký tự của B

khơng xuất hiện trong A (cĩ sắp xếp lại các ký tự trong B xuất hiện theo trình tự xuất hiện trong A)

S h a n g h a i X X X s h a n i Sau khi áp dụng M 0,1 ; M 2,1

A[1] = ”h” được đánh dấu để di chuyển S h a n g h a i X X X s h a k n i t Sau khi áp dụng I “k” A B A A B h h t B

Sau khi áp dụng M 7,1; M 3,1

Một phần của tài liệu (LUẬN VĂN THẠC SĨ) 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 Luận văn ThS. Công nghệ thông tin 60 48 15 (Trang 34 - 37)

Tải bản đầy đủ (PDF)

(83 trang)