Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 11 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
11
Dung lượng
420,44 KB
Nội dung
Một họ thuật toán sánh mẫu Wu-Manber và thực nghiệm Nguyễn Thị Thúy Trường Đại học Công nghệ Luận văn ThS. ngành: Hệ thống thông tin; Mã số: 60 48 05 Người hướng dẫn: PGS.TS. Hà Quang Thụy Năm bảo vệ: 2012 Abstract. Chương 1: Bài toán và thuật toán sánh mẫu: giới thiệu chung về bài toán sánh mẫu, cho thấy một lượng lớn thuật toán sánh mẫu đã được đề xuất. Các thuật toán sánh mẫu được chia ra hai lớp chính là lớp thuật toán chính xác và lớp thuật toán tương tự; giới thiệu một số thuật toán sánh mẫu điển hình nhất [CL00]. Chương 2: Họ thuật toán Wu - Manber: Giới thiệu thuật toán sánh mẫu văn bản chính xác WM được Sun Wu và Udi Manber công bố vào năm 1994 [WM94] với ý tưởng kết hợp cách thức nhảy của thuật toán BM do R. S. Boyer và J. S. Moore [BM77] và hàm băm. Một số phiên bản nâng cấp thuật toán WM được phân tích trong chương này [SWG06, DX08, ZCP09, ZCP09a]. Chương 3: Thực nghiệm: sử dụng công cụ phần mềm Agrep để thi hành thực nghiệm thuật toán sánh mẫu WM; thực nghiệm sánh mẫu cho 60 cặp file (mẫu, văn bản). Thực nghiệm cho thấy công cụ Agrep thi hành thuật toán chính xác với thời gian nhanh. Keywords. Thuật toán; Công nghệ thông tin; Phần mềm Agrep; Thuật toán sánh mẫu Content CHƯƠNG 1: BÀI TOÁN VÀ THUẬT TOÁN SÁNH MẪU 1.1. Giới thiệu về bài toán sánh mẫu Dạng phổ biến nhất của bài toán tìm kiếm văn bản là: Cho trước nguồn tìm kiếm là một tập D các văn bản (hoặc là cơ sở dữ liệu văn bản, hoặc là tập các văn bản trên Internet). Cho một câu hỏi dạng văn bản q (thường là một từ, một xâu văn bản ngắn), hãy tìm tất cả các văn bản thuộc D mà có chứa q. Trong nhiều trường hợp (chẳng hạn, tìm kiếm thông qua máy tìm kiếm) thì q còn được gọi là "truy vấn" và bài toán còn có tên gọi là "tìm kiếm theo truy vấn". Để tìm được các văn bản có chứa văn bản truy vấn q, hệ thống tìm kiếm cần phải kiểm tra văn bản truy vấn q có là một xâu con của các văn bản thuộc tập D hay không (sánh mẫu) và đưa ra các văn bản đáp ứng. Trong nhiều trường hợp, bài toán còn đòi hỏi tìm tất cả các vị trí của các xâu con trong văn bản trùng với q. Đồng thời, điều kiện tìm kiếm có thể được làm "xấp xỉ" theo nghĩa văn bản kết quả có thể không cần chứa q (không cần có một xâu con của văn bản trùng một cách hoàn toàn chính xác với q) mà chỉ cần "liên quan" tới q (có xâu con trong văn bản "xấp xỉ" q). Có thể thấy, các máy tìm kiếm sử dụng cả cơ chế tìm kiếm xấp xỉ khi mà văn bản kết quả tìm kiếm không chứa hoàn toàn chính xác văn bản truy vấn. 1.2. Phát biểu bài toán Như đã giới thiệu, đối sánh mẫu là một bài toán cơ bản trong xử lý văn bản; bài toán yêu cầu tìm ra một hoặc nhiều vị trí xuất hiện của mẫu P trên một văn bản S. Mẫu P và văn bản S là các chuỗi có độ dài M và N (M ≤ N); P và S là các xâu ký trên cùng một bảng chữ cái Σ có δ ký tự. Bài toán sánh mẫu (chính xác) tổng quát được phát biểu như sau [CL00]: "Cho mẫu P độ dài M và văn bản S độ dài N trên cùng bảng chữ A. Tìm một (hoặc tất cả) các lần xuất hiện của mẫu P trong S". Trong bài toán tìm kiếm văn bản trên tập văn bản D, bài toán sánh mẫu được thực hiện đối với mọi cặp gồm mẫu (truy vấn) q và mọi văn bản d D. Trong trường hợp độ dài N của d rất lớn và số lượng văn bản trong D rất nhiều (|D|>>1) thì thời gian tìm kiếm văn bản phù hợp với câu hỏi q sẽ là rất tốn kém. Chính vì lý do đó, nghiên cứu đề xuất các thuật toán sánh mẫu mới, cải tiến các thuật toán sánh mẫu sẵn có luôn là một chủ đề nghiên cứu được hết sức quan tâm. 1.3. Một số thuật toán sánh mẫu cơ bản 1.3.1. Thuật toán Brute Force Thuật toán Brute Force thử kiểm tra tất cả các vị trí trên văn bản từ 0 cho đến n-m. Sau mỗi lần thử thuật toán Brute Force dịch mẫu sang phải một ký tự cho đến khi kiểm tra hết văn bản. Thuật toán Brute Force không cần giai đoạn tiền xử lý cũng như các mảng phụ cho quá trình tìm kiếm. Độ phức tạp tính toán của thuật toán này là O(N*M). 1.3.2. Thuật toán Knuth-Morris-Pratt Thuật toán Knuth-Morris-Pratt là thuật toán có độ phức tạp tuyến tính đầu tiên được phát hiện ra, dựa trên thuật toán Brute Force với ý tưởng lợi dụng lại những thông tin của lần thử trước cho lần sau. Trong thuật toán brute force vì chỉ dịch cửa sổ đi một ký tự lên có đến m-1 ký tự của cửa sổ mới là những ký tự của cửa sổ vừa xét. Trong đó có thể có rất nhiều ký tự đã được so sánh giống với mẫu và bây giờ lại nằm trên cửa sổ mới nhưng được dịch đi về vị trí so sánh với mẫu. Việc xử lý những ký tự này có thể được tính toán trước rồi lưu lại kết quả. Nhờ đó lần thử sau có thể dịch đi được nhiều hơn một ký tự, và giảm số ký tự phải so sánh lại. 1.3.3. Thuật toán automat hữu hạn Trong thuật toán này, quá trình tìm kiếm được đưa về một quá trình biến đổi trạng thái automat. Hệ thống automat trong thuật toán DFA sẽ được xây dựng dựa trên xâu mẫu. Mỗi trạng thái (nút) của automat lúc sẽ đại diện cho số ký tự đang khớp của mẫu với văn bản. Các ký tự của văn bản sẽ làm thay đổi các trạng thái. Và khi đạt được trạng cuối cùng có nghĩa là đã tìm được một vị trí xuất hiện ở mẫu. Việc xây dựng hệ automat khá đơn giản khi được cài đặt trên ma trận kề. Khi đó thuật toán có thời gian xử lý là O(N) và thời gian để tạo ra hệ automat là O(M*N) (tùy cách cài đặt) 1.3.4. Thuật toán Boyer-Moore Thuật toán Boyer Moore là thuật toán tìm kiếm chuỗi rất có hiệu quả trong thực tiễn, các dạng khác nhau của thuật toán này thường được cài đặt trong các chương trình soạn thảo văn bản. Đặc điểm chính của thuật toán là kiểm tra các ký tự của mẫu từ phải sang trái và khi phát hiện sự khác nhau đầu tiên thuật toán sẽ tiến hành dịch cửa sổ đi, độ phức tạp về thời gian ở gian đoạn tiền xử lý là O(M+), ở gian đoạn tìm mẫu là O(M*N), trong trường hợp tốt nhất là O(N/M). Trong thuật toán này có hai cách dịch cửa sổ: Cách thứ 1: gần giống như cách dịch trong thuật toán KMP, dịch sao cho những phần đã so sánh trong lần trước khớp với những phần giống nó trong lần sau. Cách thứ 2: Coi ký tự đầu tiên không khớp trên văn bản là b=y[i+j] ta sẽ dịch sao cho có một ký tự giống b trên xâu mẫu khớp vào vị trí đó (nếu có nhiều vị trí xuất hiện b trên xâu mẫu ta chọn vị trí phải nhất). 1.3.5. Thuật toán Karp-Rabin Thuật toán Karp-Rabin là thuật toán sử dụng hàm băm, độ phức tạp về thời gian trong giai đoạn tiền xử lý là O(M), giai đoạn tìm mẫu là O(M*N). Đây là bài toán tìm kiếm mẫu không khác nhiều so với bài toán tìm kiếm chuẩn. Tại đây một hàm băm được dùng để tránh đi sự so sánh không cần thiết. Thay vì phải so sánh tất cả các vị trí của văn bản, ta chỉ cần so sánh những cửa sổ bao gồm những ký tự ―có vẻ giống‖ mẫu. 1.3.6. Các thuật toán khác Các thuật toán sánh mẫu theo thứ tự đặc biệt * Thuật toán Galil-Seiferas và Crochemore-Perrin chia mẫu thành hai đoạn, đầu tiên kiểm tra đoạn ở bên phải rồi mới kiểm tra đoạn bên trái với chiều từ trái sang phải. * Thuật toán Colussi và Galil-Giancarlo lại chia mẫu thành hai tập và tiến hành tìm kiếm trên mỗi tập với một chiều khác nhau. * Thuật toán Optimal Mismatch và Maximal Shift sắp xếp thứ tự mẫu dựa vào mật độ của ký tự và khoảng dịch được. * Thuật toán Skip Search, KMP Skip Search và Alpha Skip Search dựa sự phân bố các ký tự để quyết đinh vị trí bắt đầu của mẫu trên văn bản. Các thuật toán sánh mẫu theo thứ tự bất kỳ Đó là các thuật toán có thể tiến hành sánh mẫu với cửa sổ theo một thứ tự ngẫu nhiên. Họ thuật toán sánh mẫu văn bản Wu-Manbers (ký hiệu là WM) được Sun Wu và Udi Manber công bố vào năm 1994 [WM94]. Các tác giả sử dụng các ý tưởng nhảy của thuật toán BM do R. S. Boyer và J. S. Moore [BM77] và hàm băm. CHƯƠNG 2: HỌ THUẬT TOÁN WM 2.1. Thuật toán WM 2.1.1. Tổng quan về thuật toán Như giới thiệu ở trên, thuật toán WM được Sun Wu và Udi Manber đề xuất vào năm 1994, sử dụng ý tưởng BM và băm. Thuật toán WM là một trong các thuật toán sánh mẫu thuộc loại nhanh nhất. Cho một tập các mẫu P = {p 1 , p 2 , , p k }, trong đó chuỗi các ký tự được lấy từ một bảng chữ cái cố định V. Cho T = t 1 t 2 t N là một văn bản lớn bao gồm các ký tự t i cũng từ bảng chữ cái V. Vấn đề đặt ra là phải tìm tất cả các lần xuất hiện của tất cả các mẫu P trong T. Ví dụ, trong UNIX, các chương trình (thi hành các lệnh) fgrep và egrep hỗ trợ sánh nhiều xâu mẫu thông qua các tùy chọn -f (xem Chương 3). 2.1.2. Thuật toán 2.1.2.1. Phác thảo của thuật toán Ý tưởng cơ bản của thuật toán sánh mẫu Boyer-Moore [BM77] là thuật toán sẽ kiểm tra các ký tự của mẫu từ phải sang trái và khi phát hiện sự khác nhau đầu tiên thuật toán sẽ tiến hành dịch cửa sổ đi. Thuật toán WM có hai cơ chế cốt lõi, cơ chế bộ lọc dựa trên công nghệ băm và công nghệ dịch chuyển ký tự xấu (ký tự ―không khớp‖) từ thuật toán BM. Quá trình hoạt động của thuật toán WM bao gồm hai giai đoạn, tiền xử lý và tìm kiếm các mẫu. 2.1.2.2. Giai đoạn tiền xử lý Trong quá trình tiền xử lý, kích thước của cửa sổ đối sánh nên được xác định đầu tiên và ba bảng quan trọng nên được thiết lập, một bảng SHIFT, một bảng HASH và một bảng PREFIX. Bảng SHIFT lưu trữ khoảng cách dịch chuyển của các khối ký tự xuất hiện trong văn bản. Bảng HASH lưu trữ các danh sách liên kết các mẫu với hậu tố bên trong cửa sổ đối sánh. Bảng PREFIX lưu trữ các danh sách liên kết các mẫu với tiền tố bên trong cửa sổ đối sánh. 2.1.2.3. Giai đoạn tìm kiếm mẫu Quá trình tìm kiếm mẫu trong WM được mô tả chi tiết như sau: (1) Xác định cửa sổ đối sánh ở đầu văn bản "T". Con trỏ văn bản "T p " trỏ tới hậu tố của cửa sổ đối sánh. (2) Nếu T p > T end , có nghĩa là con trỏ văn bản hiện tại vượt quá kết thúc của văn bản, và kết thúc quá trình tìm kiếm. Hoặc nếu không, tính toán giá trị băm của khối ký tự hậu tố, chẳng hạn như hash(sbc). "sbc" có nghĩa là khối ký tự hậu tố. (3) Sử dụng các giá trị băm để tra cứu các bảng SHIFT cho khoảng cách dịch chuyển của khối ký tự. Đó là SHIFT[hash(sbc)]. Nếu giá trị là "0", có nghĩa là khối ký tự hiện nay bằng với khối ký tự hậu tố của một số mẫu bên trong cửa sổ đối sánh, sau đó chuyển tới bước (4). Hoặc nếu không, T p =T p +SHIFT[hash(sbc)], và chuyển tới bước (2). (4) Sử dụng giá trị băm "hash(sbc)" để tra cứu bảng HASH, và ta tìm thấy sự xuất hiện của các mẫu có cùng một khối ký tự hậu tố như văn bản hiện tại bên trong cửa sổ đối sánh. Mục nhập là một con trỏ trỏ đến đầu của danh sách liên kết và được lưu trữ trong HASH[hash (sbc)]. (5) Tính toán giá trị băm của khối ký tự tiền tố của văn bản "T" bên trong cửa sổ đối sánh hiện tại, chẳng hạn như hash(pbc). “pbc"có nghĩa là khối ký tự tiền tố. (6) Tính toán giá trị băm của khối ký tự tiền tố cho mỗi mẫu trong danh sách liên kết, chỉ khi giá trị bằng hash(pbc) mẫu này cần phải được so sánh. Nếu mẫu là đối sánh với chuỗi văn bản hiện hành, ghi lại kết quả. Cho dù có đối sánh hay không, T p = T p + 1, và chuyển tới bước (2). 2.1.3. Phân tích thuật toán Khi chiều dài của mẫu là ngắn, thời gian tìm kiếm dài. Độ dài của các mẫu ngày càng tăng, thời gian tìm kiếm rút ngắn rõ ràng. Điều đó cho thấy rằng thời gian tìm kiếm các ký tự đôi ít hơn một chút so với ký tự đơn. Đó là bởi vì hai loại mẫu này đều có cùng khoảng cách dịch chuyển là "l". Khi khoảng cách thay đổi, thời gian kết hợp của ký tự đôi dài hơn so với ký tự đơn. Khi độ dài của mẫu là dài, thời gian tìm kiếm ngắn. Khi một mẫu ngắn được thêm vào trong các thiết lập mẫu, thời gian tìm kiếm tăng nhanh chóng. Khi tỷ lệ của mẫu ngắn tăng, thời gian tìm kiếm sẽ giảm dần. 2.2. Một thuật toán WM với bảng băm cô đọng Mục này giới thiệu một phiên bản cải tiến thuật toán WM do Liuling Dai và Yuning Xia đề xuất vào năm 2008 [DX08] giải quyết bài toán sánh mẫu trong trường hợp mẫu ngắn. 2.2.1. Phác thảo của thuật toán Tương tự như các thuật toán WM, thuật toán cơ sở duy trì ba bảng, tức là, bảng HASH, SHIFT và PREFIX. Bảng HASH dùng để xác định xem có những đối sánh nào có thể xảy ra và so khớp ký tự với ký tự nếu cần thiết. Sử dụng bảng SHIFT để xác định khoảng cách dịch chuyển thích hợp cho các cửa sổ kiểm tra. Cuối cùng, các bảng PREFIX được sử dụng để loại trừ các chuỗi mẫu có cùng giá trị băm nhưng có tiền tố khác nhau. Thuật toán bao gồm giai đoạn tiền xử lý và giai đoạn so sánh (tìm mẫu). Giai đoạn tiền xử lý phân tích các chuỗi mẫu cho trước và tạo ra ba bảng. Giai đoạn sánh mẫu chọn ra các chuỗi mẫu từ một văn bản T dựa trên các bảng. 2.2.2. Cải tiến của thuật toán Kỹ thuật băm nguyên thủy được sử dụng trong các thuật toán cơ bản. Điều này sẽ gây ra va chạm nghiêm trọng trong một số mục trong HASH và SHIFT. Những va chạm sẽ lần lượt được kiểm tra nhiều hơn, khoảng cách dịch chuyển ít hơn và hiệu quả như vậy thấp. Để thực hiện các thuật toán hiệu quả hơn, người ta đề xuất kỹ thuật khối ký tự vào các thuật toán cơ sở. Trong mỗi lần kiểm tra, thuật toán cải tiến sử dụng giá trị băm của khối ký tự, nhìn lên bảng HASH để kiểm tra các khả năng đối sánh có thể. Khối ký tự này bao gồm hai ký tự cuối cùng của cửa sổ kiểm tra. Nó sử dụng một giá trị băm của khối ký tự bao gồm các ký tự cuối cùng của cửa sổ kiểm tra và ngay lập tức (khối ký tự này được gọi là khối tiếp theo) tìm kiếm SHIFT để có được khoảng cách dịch chuyển. Theo Liuling Dai, Yuning Xia, thuật toán WM sử dụng bảng băm là một thuật toán nhẹ và hiệu quả, phù hợp với nhiều mẫu. Thuật toán này mở rộng các thuật toán QS với đa mẫu và đơn giản hóa thuật toán WM. Kết quả thử nghiệm cho thấy rằng thuật toán này rất nhanh với các mẫu có kích thước nhỏ (dưới 25). 2.3. Thuật toán WM đồng thời cao Thuật toán WM đồng thời cao (High Concurrence WM: HCWM) là phiên bản cải tiến WM do Baojun Zhang và cộng sự đề xuất năm 2009 [ZCP09, ZCP09a]. 2.3.1. Cải tiến của thuật toán Trong HCWM, những cải tiến sau đây được thực hiện. (1) Chia tất cả các mẫu thành bộ bốn mẫu "PS1-PS4" theo chiều dài của chúng, mẫu có duy nhất 1 ký tự, mẫu có hai ký tự, mẫu ba ký tự, và các mẫu ký tự dài có chiều dài bằng hoặc cao hơn bốn ký tự. (2) Với "PS1" và "PS2", khoảng cách dịch chuyển luôn là "1", bảng SHIFT là không cần thiết. Đối với "PS3" và "PS4", "SHIFT3" và "SHIFT4" được thành lập. (3) Bốn bảng HASH "HASH1-HASH4" được thành lập cho "PS1-PS4". Ngoại trừ "HASH4", các bảng HASH khác được thành lập bởi giá trị băm của toàn bộ mẫu. Đối với "HASH4", phương pháp này tương tự như WM, sử dụng khối ký tự hậu tố để tính giá trị băm. (4) Khi thực hiện sánh mẫu, các bộ mẫu khác nhau được thực hiện đối sánh khác nhau. Đối với "PS1", khoảng cách dịch chuyển luôn là "1". Quá trình so sánh để tính toán giá trị băm của các ký tự văn bản trong cửa sổ đối sánh hiện tại và tra bảng "HASH1". Đối với "PS2", thực hiện tương tự như "PS1", sự khác biệt duy nhất là kích thước của cửa sổ đối sánh và khối ký tự là "2". Đối với "PS3", tra bảng "SHIFT3‖ để có được khoảng cách dịch chuyển. Quá trình đối sánh giống như "PS1" và "PS2", đó là, tra bảng "HASH3" với các giá trị băm của các ký tự văn bản bên trong cửa sổ đối sánh. Đối với "PS4", sự dịch chuyển và quá trình tìm kiếm tương tự như WM. (5) Thực hiện đồng thời. Khi mẫu có cấu trúc dữ liệu độc lập, và các tập tin văn bản thông thường là chỉ đọc, các hoạt động tìm kiếm có thể thực hiện đồng thời. 2.3.2.2. Giai đoạn tiền xử lý và tìm mẫu của HCWM HCWM có hai giai đoạn, tiền xử lý và tìm kiếm các mẫu. 1) Giai đoạn tiền xử lý bao gồm các công đoạn sau đây. (1) Chia tất cả các mẫu thành bộ bốn mẫu "PS1-PS4". (2) Xác định kích thước của cửa sổ đối sánh cho "PS4". (3) Thiết lập bảng HASH "HASH1-HASH4" cho mỗi mẫu. (4) Thiết lập bảng SHIFT "SHIFT3", "SHIFT4" cho "PS3", "PS4". (5) Thiết lập bảng PREFIX "PREFIX4" cho "PS4". 2) Tìm mẫu HCWM có thể tìm kiếm các mẫu như bộ mẫu "PS1-PS4" đồng thời. Đối với mỗi bộ mẫu, quá trình tìm kiếm khác nhau. a) Tìm kiếm "PS4", quá trình tìm kiếm của "PS4" giống như WM. b) Tìm kiếm "PS3", kích thước của cửa sổ đối sánh là ―m = 3",độ dài của khối ký tự " B = 2 ". c) Tìm kiếm "PS2", kích thước của cửa sổ đối sánh là "m = 2", độ dài của khối ký tự "B = 2". d) Tìm kiếm "PS1", Tìm kiếm "PS1", kích thước của cửa sổ đối sánh là "m=1", độ dài của ký tự khối "B=1". Quá trình này giống như "PS2". Thuật toán WM đồng thời cao HCWM tiến hành chia tất cả các mẫu thành nhiều bộ mẫu khác nhau theo chiều dài của chúng và xử lý các bộ mẫu tương ứng, có tác động tích cực đến hiệu suất mẫu ngắn. Ngoài ra, cấu trúc dữ liệu độc lập được sử dụng cho các bộ mẫu khác nhau tạo ra sự tương tranh cao, tăng cường tốc độ sánh mẫu của HCWM rất nhiều. Baojun Zhang và cộng sự đã chứng tỏ bằng thử nghiệm rằng HCWM cho hiệu suất cao hơn nhiều so với WM [ZCP09b]. 2.4. Thuật toán WM sử dụng bảng tiền tố Đồng thời với thuật toán HCWM, Baojun Zhang và cộng sự, 2009 [ZCP09] đã đề xuất thêm một phiên bản cải tiến thuật toán WM dựa trên cơ chế sử dụng bảng lọc mẫu tiền tố để tăng tốc độ hoạt động của thuật toán; phiên bản này được gọi là thuật toán WM sử dụng bảng tiền tố (Address Filtering Based WM: AFWM). 2.4.1. Cải tiến của thuật toán Cải tiến trong thuật toán AFWM là ở chỗ sử dụng giá trị hash của tiền tố và một danh sách liên kết tiền tố để tra tìm trong bảng PREFIX của WM. Trong danh sách liên kết tiền tố, tất cả các mẫu có cùng tiền tố sẽ được sắp xếp tăng dần theo con trỏ địa chỉ của mẫu. Vì vậy, chỉ cần so sánh những mẫu có con trỏ địa chỉ xác định trong phạm vi [HASH[hash(sbc), HASH[hash(sbc)+1]. Khi các mẫu trong danh sách liên kết tiền tố được sắp xếp tăng dần theo địa chỉ con trỏ, thì địa chỉ con trỏ ≥ HASH[hash(sbc) +1], quá trình tìm kiếm được hoàn thành ngay lập tức. Cải tiến này có hai lợi thế. Đầu tiên, không cần phải tính toán giá trị băm của các tiền tố cho các mẫu trong danh sách liên kết hậu tố. Thứ hai, không cần phải xem xét danh sách liên kết tiền tố. 2.4.2. Giai đoạn tiền xử lý và tìm mẫu trong AFWM AFWM có hai giai đoạn, tiền xử lý và tìm kiếm mẫu. a) Quá trình tiền xử lý Giai đoạn tiền xử lý bao gồm các công đoạn sau. (1) Thiết lập bảng HASH. (2) Thiết lập bảng SHIFT. (3) Thiết lập bảng PREFIX. Các mẫu trong danh sách liên kết được sắp xếp tăng dần theo con trỏ địa chỉ . b) Quá trình tìm mẫu Giả sử kích thước của cửa sổ đối sánh là "m", độ dài của khối ký tự là "B = 2". (1) Xác định vị trí cửa sổ so sánh ở đầu văn bản "T". Trỏ con trỏ "T p " vào hậu tố của cửa sổ đối sánh. (2) Nếu T p > T end , kết thúc tìm kiếm. Nếu không, chuyển tới bước (3). (3) Tính toán giá trị hash "sh" của các hậu tố của ký tự văn bản bên trong cửa sổ đối sánh và tra bảng "SHIFT", nếu "SHIFT[sh]>0", T p = T p + SHIFT[sh], quay trở lại bước (2). Nếu không, chuyển tới bước (4) . (4) Tra bảng ―HASH‖ với giá trị băm ―sh‖, tìm danh sách mà nó liên kết các mẫu với cùng một hậu tố lại với nhau. Các con trỏ địa chỉ của những mẫu này thỏa mãn điều kiện HASH[sh] ≤ p< HASH[sh+1]. (5) Tính toán giá trị băm―ph‖ của tiền tố các ký tự văn bản bên trong cửa sổ so sánh và tra bảng ―PREFIX‖, tìm danh sách liên kết tiền tố, bắt đầu xem xét từ đầu danh sách, nếu con trỏ địa chỉ của mẫu đặt trong phạm vi ([HASH[sh],HASH[sh+1]), thì dừng lại, hoặc nếu không, chuyển đến con trỏ kế tiếp, tiếp tục như vậycho đến khi con trỏ ≥ HASH[sh +1]. Trong quá trình tìm kiếm mẫu, nếu quá trình đối sánh xảy ra, ghi lại các mẫu phù hợp. T p =T p +1, chuyển tới bước (2). Theo Baojun Zhang và cộng sự, AFWM khắc phục một số hạn chế còn tồn tại trong WM, chẳng hạn như thông tin dư thừa và nhiều phép tính toán, tránh việc xuyên qua danh sách, đề xuất lọc địa chỉ dựa trên thuật toán WM. Bằng phân tích hiệu suất thông qua kết quả thử nghiệm, các tác giả đã minh chứng rằng AFWM tốt hơn so với WM. CHƯƠNG 3: THỰC NGHIỆM 3.1. Giới thiệu về agrep AGREP là một công cụ mạnh để nhanh chóng tìm kiếm một tập tin hoặc nhiều tập tin cho một chuỗi hoặc biểu thức chính quy, với khả năng kết hợp gần đúng và có thể xác định hồ sơ người dùng. Agrep được Udi Manber và Sun Wu phát triển trong giai đoạn 1989-1991 [WM92] và sau đó được nhiều người khác cùng tham gia nâng cấp. 3.2. Các thuật toán sử dụng trong agrep 3.2.1. Thuật toán WM trong AGREP Trong phần mềm Agrep, ưu điểm chính của chương trình này là các thuật toán sánh mẫu chính xác có thể được điều chỉnh để hỗ trợ nó. Ta minh họa cho ý tưởng này với một ví dụ như sau. Giả sử rằng mẫu là ABCDEFGHIJKL (m = 12) và k = 3. Ta phân chia mẫu thành k +1 = 4 khối: ABC, DEF, GHI, và JKL. Ta cần tìm xem liệu có một khối nào đó xuất hiện trong văn bản. Ta tạo ra một mẫu kết hợp bằng cách đan xen 4 khối : ADGJBEHKCFIL. Sau đó xây dựng mặt nạ vector R như bình thường cho mẫu này. Sự khác biệt duy nhất là, thay vì dịch chuyển trong mỗi bước, ta dịch chuyển bốn. Có một đối sánh nếu bất kỳ một trong bốn bit cuối cùng là 1 (khi chúng ta dịch chuyển chúng ta cần phải điền vào bốn vị trí đầu tiên với l, hoặc tốt hơn, sử dụng shift–OR). Như vậy, so sánh cho tất cả các khối được thực hiện chính xác theo cùng một cách như đối sánh thường xuyên và cơ bản sẽ đưa về cùng một thời gian chạy. 3.2.2. Thuật toán sánh mẫu xấp xỉ Sánh mẫu xấp xỉ được sử dụng khi một chuỗi truy vấn là gần đúng chứ không phải giống hệt nhau với mong muốn có nhiều khả năng đối sánh. Sánh mẫu xấp xỉ là quá trình tìm kiếm tối ưu cho sự liên kết hai chiều dài - chuỗi hữu hạn trong đó các mẫu so sánh có thể không rõ ràng, chuỗi dài với các biến thể tự nhiên hoặc ngẫu nhiên, ví dụ như đặc trưng, mô hình cơ bản của các biểu tượng. Sử dụng sánh mẫu xấp xỉ chỉ đơn thuần nhấn mạnh thực tế rằng một so sánh có thể không đạt được hoàn hảo và các thiếu sót như biểu tượng bị mất và những biểu tượng ngoại lai cần phải được xem xét. Trong nhiều ứng dụng, một trong hai chuỗi là một chuỗi nguyên mẫu đại diện cho một mô hình lớp và là một chuỗi thử nghiệm mà ta muốn phân tích, phân loại. 3.3. Cách sử dụng Agrep 3.4. Kết quả thực nghiệm Thực hiện đối sánh văn bản với chương trình agrep trên các cặp <mẫu, văn bản>, tệp tin có dung lượng kích thước khác nhau. TT Cặp (mẫu, văn bản) Dung lượng (KB) Thời gian so sánh 1 Scr1 1 0.09 Dst-scr1 1 2 Mbom.cpp 35 0.11 Dst_mbom.cpp 37 3 Tailieu.pdf 223 0.12 Dst_tailieu.pdf 237 4 Luanvan.pdf 1,076 0.28 Dst_luanvan 1,511 5 Diem.xls 109 0.09 Dst_diem.xls 144 Thực nghiệm cho thấy công cụ Agrep thi hành thuật toán chính xác với thời gian nhanh. KẾT LUẬN Luận văn đã tìm hiểu một số thuật toán sánh mẫu văn bản và đã giới thiệu họ thuật toán Wu - Manber (WM). Các kết quả đạt được của luận văn: Trình bày được khái quát về bài toán sánh mẫu văn bản, giới thiệu chung về một số thuật toán sánh mẫu cổ điển điển hình như Brute Force, Knuth-Morris-Pratt, Boyer- Moore, Karp-Rabins Trình bày, phân tích hoạt động của WM và một số phiên bản gần đây của WM như SWG06, ZCP09, ZCP09a Một số hạn chế của luận văn: Thực nghiệm thuật toán mới dừng ở sơ bộ, chưa có hệ thống ví dụ mẫu để thực nghiệm và đánh giá. Hướng nghiên cứu tiếp theo: Tìm hiểu và nghiên cứu thêm một số thuật toán sánh mẫu tối ưu hơn nữa, cài đặt chương trình tìm kiếm mẫu trong các loại văn bản khác và ứng dụng trong các chương trình tìm kiếm thông tin. Do thời gian và khả năng có hạn, luận văn còn thiếu sót nhiều, em rất mong nhận được sự góp ý, chỉ dẫn thêm của các Thầy Cô, bạn bè để em có thể xây dựng được ứng dụng hoàn thiện hơn. Một lần nữa em xin chân thành cảm ơn Thầy hướng dẫn PGS.TS. Hà Quang Thụy, các Thầy Cô, bạn bè cùng các đồng nghiệp đã tạo mọi điều kiện thuận lợi để em có thể hoàn thành luận văn đúng thời hạn. References [AC75] A. V. Aho, M. J. Corasick (1975). Efficient string matching: an aid to bibliographic search, Communications of the ACM, 18: 333-340. [Ba89] Baeza-Yates R. A. (1989). Improved string searching, Software — Practice and Experience 19 (1989): 257-271. [BM77] R. S. Boyer, J. S. Moore (1977). A fast string searching algorithm, Communication of the ACM, 20(10): 262–272. [CFM01] C. Jason Coit, Stuart Staniford, Joseph McAlemey (2001). Towards Faster String Matching for Intrusion Detection or Exceeding the Speed of Snort, DARPA Information Survivability Conference and Exposition (DISCEX II'01), 1: 367-373. [CL00] Christian Charras, Thierry Lecroq (2000). Handbook of Exact String Matching Algorithms,http://citeseerx.ist.psu.edu/viewdoc/download? doi=10.1.1.133.4896&rep =rep1&type=pdf. [DX08] Liuling Dai, Yuning Xia (2008). A Lightweight Multiple String Matching Algorithm, 2008 International Conference Computer Science and Information Technology : 611-615. [Ha93] Haertel, M. (1993), Gnugrep-2.0, Usenet archive Comp. Sources. Reviewed, 3 (July, 1993). [Hu91] Hume A. (1991) personal communication (1991). [...]... 20(2): 47-52 [WM92] Wu S., and U Manber (1992) Agrep — A Fast Approximate Pattern-Matching Tool,’ Usenix Winter 1992 Technical Conference: 153-162, San Francisco (January 1992) [WM94] S Wu, U Manber (1994) A fast algorithm for multi-pattern searching, Technical Report TR 94-17, University of Arizona at Tuscon, USA, May 1994 [ZCP09] Baojun Zhang, Xiaoping Chen, Lingdi Ping, Zhaohui Wu (2009) Address Filtering... Address Filtering Based WM Multiple Patterns Matching Algorithm, 2009 Second International Workshop on Computer Science and Engineering: 408-412 [ZCP09a] Baojun Zhang, Xiaoping Chen, Xuezeng Pan, Zhaohui Wu (2009) High Concurrence WM Multiple Patterns Matching Algorithm, The 2009 International Symposium on Information Processing (ISIP’09): 404-409, Huangshan, P R China, August 21-23, 2009 [Agrep] http://www.tgries.de/agrep/: . Bài toán và thuật toán sánh mẫu: giới thiệu chung về bài toán sánh mẫu, cho thấy một lượng lớn thuật toán sánh mẫu đã được đề xuất. Các thuật toán sánh mẫu được chia ra hai lớp chính là lớp thuật. lớp thuật toán chính xác và lớp thuật toán tương tự; giới thiệu một số thuật toán sánh mẫu điển hình nhất [CL00]. Chương 2: Họ thuật toán Wu - Manber: Giới thiệu thuật toán sánh mẫu văn bản. Xia, thuật toán WM sử dụng bảng băm là một thuật toán nhẹ và hiệu quả, phù hợp với nhiều mẫu. Thuật toán này mở rộng các thuật toán QS với đa mẫu và đơn giản hóa thuật toán WM. Kết quả thử nghiệm