Sự cải tiến của thuật toõ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 32 - 34)

Cón nhắc trường hợp khi xóu nguồn S cụ một vỏi cõc ký tự giống nhaụ Giả sử  lỏ kợch thước của phần ký tự giống nhau trong S (khừng tợnh cõc khoảng trắng), xấp xỉ bằng m. Trong trường hợp nỏy, một sự cải thiện đõng kể của thuật toõn cụ thể được thực hiện. Trong khi scan 1 lần S, chỷng ta sẽ chuẩn bị một index, với mỗi ký tự s trong S, chỷng ta liệt kở ra tất cả cõc vị trợ cụ s trong S. Trong thuật toõn, chỷng ta thay thế cóu lệnh cụ nhọn F với cóu lệnh sau đóỵ Giả sử T[q]=s lỏ ký tự đầu tiởn của phần đuừi khừng phỳ hợp của T. Tớm kiếm trong danh sõch L sự xuất hiện của s trong S bằng cõch sử dụng index trởn. Nếu danh sõch rỗng, khừng cụ sự phỳ hợp nỏo tớm thấỵ Mặt khõc, ta sẽ tớm kiếm khối di chuyển lớn nhất trong số nỏy bắt đầu với cõc thỏnh phần của L trong S.

Sự thi hỏnh của thuật toõn nỏy sẽ như saụ Giả sử độ dỏi trung bớnh của một khối di chuyển lỏ l. Vậy, khối di chuyển lớn nhất phải được chọn trong số m/ lựa chọn, mỗi lựa chọn sẽ tốn khừng nhiều hơn l+1 phờp so sõnh. Vậy, thời gian chạy của thuật toõn lỏ O(l*(m/alpha)*(n/l))=O(mn/). Nếu m  , chỷng ta đạt được một thuật toõn tương đối tốt.

Cõc đoạn text hoặc cõc bỏi văn thớ thường cụ cõc dúng lặp lạị Trong trường hợp đụ, chỉ cõc dúng lặp lại nởn được đặt rỗng hoặc bao gồm cõc dấu ngoặc đơn giống như begin vỏ end; trong cõc trường hợp cụ sự lặp lại khõc, chỷng ta sẽ viết một chương trớnh con. Trong trường hợp văn xuừi, chỉ cõc dúng lặp lại nởn được đặt rỗng hoặc chứa cõc lệnh khuừn mẫụ Để õp dụng thuật toõn của chỷng ta đối với đoạn text hoặc văn xuừi, cần phải chọn cõc dúng thợch hợp giống như cõc ký tự nguyởn tử. Để tăng

tốc sự so sõnh, chương trớnh nởn sử dụng cõc mọ băm cho cõc dúng text hơn lỏ thực hiện cõc phờp so sõnh từng ký tự.

Chỷng ta thực hiện một chương trớnh kết hợp chặt chẽ với cõc ý tưởng nỏy, được gọi lỏ bdiff, vỏ so sõnh nụ với diff (diff sử dụng thuật toõn LCS). Chỷng ta thực hiện cả hai chương trớnh trởn 1400 cặp filẹ Mỗi cặp bao gồm 2 sự xem lại text một cõch liởn tiếp. Hệ thống nỏy lưu rất nhiều cõc file dữ liệu khõc nhaụ Hầu hết tất cả cõc file mẫu chứa cõc chương trớnh text. Chỷng ta theo dửi diff vỏ bdiff thi hỏnh với tốc độ giống nhau, nhưng bdiff sẽ cung cấp delta chỉ nhỏ hơn khoảng 7% (trung bớnh). Nhớn bề ngoỏi, cõc khối di chuyển vỏ cõc dúng trỳng nhau trong cõc chương trớnh text thớ thường khừng đủ để duy trớ khừng gian cần thiết trởn thuật toõn LCS. Chỷng ta mong muốn những tớnh huống cụ lợi hơn cho cõc khối di chuyển cõc ứng dụng khõc đọ được nụi tới trong phần giới thiệụ

Một sự cải tiến khõc giỷp tăng tốc thuật toõn thậm chợ nếu xóu nguồn chứa rất nhiều ký tự trỳng nhaụ Sự cải tiến liởn quan tới sự thợch nghi của thuật toõn Knuth-Moris- Pratt [8], nụ cho phờp một khuừn mẫu cụ độ dỏi l được tớm thấy trong 1 xóu cụ độ dỏi m trong O(m+1) bước. Vậy, nếu S cụ độ dỏi m, T cụ độ dỏi n, vỏ khối di chuyển trung bớnh cụ độ dỏi l, thuật toõn của chỷng ta nởn thao tõc O((m+1)*(n/l))=O(mn/l) bước. Chỷ ý rằng tỉ số m/l biểu thị sự khõc nhau của S vỏ T, vỏ thời gian chạy của thuật toõn sẽ tương ứng với tỉ số đụ. Cũng chỷ ý rằng tỉ số đụ độc lập với cõc xóu chung trong T vỏ S.

Một thỏnh phần quan trọng trong thuật toõn Knuth-Moris-Pratt lỏ một mảng phụ N, nụ chỉ ra sau 1 mismatch, một phần của mẫu match hay khối di chuyển phải dịch đi bao xạ Mảng N sẽ được tợnh trước khi cụ 1 match. Việc tợnh lại N sẽ đưa ra một vấn đề cho thuật toõn. Vớ chỷng ta khừng biết được một khối di chuyển sẽ dỏi bao nhiởu, nởn chỷng ta sẽ phải tợnh trước N cho toỏn bộ phần đuừi khừng xử lý của T, mặc dỳ bớnh thường chỷng ta chỉ sử dụng một phần nhỏ của nụ. Khừng may, N chỉ cụ thể được tợnh tăng dần. Những nờt chợnh của thuật toõn được chỉ ra trong phần saụ

Giả sử, ký tự khừng phỳ hợp tiếp theo lỏ T[q]. Bắt đầu khởi tạo N[q] vỏ õp dụng thuật toõn Knuth-Moris-Pratt để tớm ra sự xuất hiện đầu tiởn của T[q]. (Chỷ ý rằng đóy lỏ một mẫu cụ độ dỏi 1). Nếu mẫu nỏy khừng thể tớm thấy, sẽ khừng cụ khối di chuyển nỏo trong T[q]. Mặt khõc, khi mở rộng mẫu thởm 1, ta sẽ tợnh phần tử tiếp theo trong N, vỏ õp dụng lại thuật toõn Knuth-Moris-Pratt để tớm ra sự xuất hiện đầu tiởn của mẫu mở rộng. Bắt đầu tớm kiếm với match trước. Tiếp tục quõ trớnh nỏy, cho tới khi

mẫu đạt tới một độ dỏi mỏ tại đụ khừng cụ sự match nỏọ Lỷc đụ, sự match trước lỏ khối di chuyển cực đạị

Cho rằng khối di chuyển lớn nhất bắt đầu tại T[q] lỏ l. Như vậy, sự phỳ hợp cuối cỳng cụ độ dỏi l+1, vỏ lỗị Việc tợnh tăng dần của N[q,…q+l+1] tại một giõ trị tổng sẽ tương ứng với l đảm bảo rằng giõ của match trung bớnh cún lại O(m+l).

Chương trớnh chi tiết được cho trong phần mục lục. Ý tưởng của việc tợnh tăng dần cấu trỷc dữ liệu bổ sung cũng cụ thể được dõp dụng với thuật toõn Boyer-Moore matching [8], kết quả trung bớnh sẽ nhanh hơ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 32 - 34)

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

(84 trang)