Thuật toõn cơ bản

Một phần 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 doc (Trang 28 - 32)

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ạị 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.

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

Trong bước 1, chỷng ta tớm kiếm 1 tiền tố của T[0,…,6] trong S[0,….,7], do 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 theọ 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 đóỵ 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 T = z| u v w x w u S = u v w u v w x y Bước 2:

Khối di chuyển dỏi nhất bắt đầu tại T[1]: (3,1,4)

T = z u v w x | w u S = u v w u v w x y Bước 3:

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ờị 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ớị

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 đóỵ 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 tạ 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 nhaụ

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ủ đụ

thỏnh m sự di chuyển (trong đụ m<k, k lỏ số sự di chuyển được tạo ra bởi thuật toõn của chỷng ta). Điều đụ chứng tỏ, thuật toõn của chỷng ta tạo ra một tập phủ với ợt sự di chuyển nhất.

Giả sử chỷng ta cụ k 1 khối di chuyển liởn tiếp được tạo ra bởi thuật toõn của chỷng tạ Điều nỏy cụ nghĩa rằng chỷng ta sẽ cụ k bộ (pi,qi,li), (1  i  k) thoả mọn cõc điều kiện sau đóy:

Ai: 1  i  k T[qi,….,qi + li –1) = S[pi,…,pi+li –1] (*)

Ai: 1  i  k Ap: 0  p  m - li, T[qi,….,qi + li]  S[p,…,p+li] (**) Ai: 1  i < k T[qi + li] = T[q(i+1)] (***)

Điều kiện đầu tiởn để định nghĩa một khối di chuyển. Điều kiện thứ hai đảm bảo rằng mỗi khối di chuyển bắt đầu tại T[qi] lỏ cực đạị Điều kiện thứ ba đảm bảo khối di chuyển lỏ liởn tục trong T.

Chỷng ta cần chỉ ra rằng với bất kỳ k khối di chuyển nỏo thoả mọn (*) tới (***), bất kỳ tập tương đương nỏo cũng cụ ợt nhất k khối di chuyển. Với bất kỳ tập k khối di chuyển thoả mọn (*) tới (***), bất kỳ tập phủ của k-1 khối di chuyển đầu tiởn vỏ một tiền tố khừng rỗng của khối di chuyển k cụ ợt nhất k khối di chuyển. Đầu tiởn, giả sử k=1. Rử rỏng, chỷng ta khừng thể chia bất kỳ tiền tố khừng rỗng của 1 khối di chuyển đơn thỏnh ợt hơn 1 khối di chuyển bao phủ. Bóy giờ, giả định rằng k>1, tập phủ của tất cả k-2 khối di chuyển vỏ bất kỳ tiền tố khừng rỗng nỏo của khối di chuyển k-1 sẽ chứa ợt nhất k-1 khối di chuyển. Giả sử ngược lại, ta chia tập phủ thỏnh ợt hơn k-1 khối di chuyển. Cụ 2 trường hợp. Trường hợp đầu tiởn ta gom khối di chuyển h (trong đụ, phpk-1) vỏo cõc khối di chuyển khõc. Giả sử, ta gom vỏo khối h-1, điều nỏy móu thuẫn với (**). Nếu ta gom vỏo khối h+1, điều nỏy cũng giống với việc ta gom khối h+1 vỏo đuừi của khối h. Điều nỏy cũng móu thuẫn với (**). Vậy, với bất kỳ khối h nỏo, ta cũng khừng thể gom vỏo khối ngay trước hoặc ngay sau nụ. Do thuộc tợnh liởn tục, ta cũng khừng thể gom vỏo cõc khối khõc, ngoỏi 2 khối trước vỏ sau nụ. Trường hợp thứ 2, ta cụ thể chia khối di chuyển k-1 thỏnh ợt nhất 2 sự di chuyển khừng rỗng (nhớn vỏo hớnh dưới đóy).

Orig.block move no k-2 k-1 k Orig.set …….) ( ... | … ) (… | …)

’S(T) covering k-1 …… …) ( …)

Do những lựa chọn nhằm giảm số lượng khối di chuyển xuống dưới k, ta sẽ thực hiện hợp cõc hậu tố của di chuyển gốc k-1 với một tiền tố khừng rỗng của di chuyển k. Tương tự như vậy, ta sẽ tạo ra (a) một tập phủ của khối di chuyển gốc k-2 vỏ một tiền tố khừng rỗng của khối di chuyển k-1; (b) hợp của một hậu tố của di chuyển k-1 vỏ một tiền tố của k; (c) một khối di chuyển khõc nếu hậu tố của di chuyển k khừng rỗng. Theo giả thuyết, chỷng ta biết rằng, (a) cụ ợt nhất k-1 di chuyển. Thởm vỏo đụ, (b) tạo ra 1 khối di chuyển nữa, (c) cũng cụ thể tạo ra một khối di chuyển nữạVỏ cuối cỳng, chỷng ta sẽ kết thỷc với ợt nhất k di chuyển cho tập phủ của k-1 khối di chuyển đầu tiởn vỏ bất kỳ tiền tố khừng rỗng nỏo của di chuyển k. Vậy, bất kỳ tập tương đương nỏo của cõc khối di chuyển được tạo ra bởi thuật toõn của chỷng ta cũng cụ ợt nhất k thỏnh phần.

Một phần 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 doc (Trang 28 - 32)

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

(84 trang)