1. Trang chủ
  2. » Khoa Học Tự Nhiên

TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu

69 400 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 69
Dung lượng 5,19 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Điều này gây ra sự phức tạp vì tính không mềm dẻo khi có các phát sinh số yêu cầu tìm kiếm v à trong cách xây dựng phát triển chương trình đòi hỏi phải viết lại chương trình.Vì vậy, cần

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

Nguyễn Thị Hà Thu

-TÌM HIỂU ỨNG DỤNG CỦA ÔTÔMÁT NÂNG CAO

TRONG BÀI TOÁN SÁNH MẪU

Chuyên ngành : Toán - tin

LUẬN VĂN THẠC SĨ KỸ THUẬT TOÁN – TIN ỨNG DỤNG

NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS PHAN TRUNG HUY

Trang 2

Hà Nội - 2012

MỤC LỤC

LỜI CAM ĐOAN

Trước khi đi vào nội dung bản luận văn thạc sĩ của mình, em xin cam đoan

luận văn này do chính em viết, dựa trên những kiến thức, kinh nghiệm của bản thân,

sự hướng dẫn của thầy hướng dẫn, và những thông tin mà em tìm hiểu, tham khảo được qua các tài liệu liên quan

Em xin gửi lời cảm ơn chân thành đến các thầy cô Viện Toán ứng dụng và Tin học, trường Đại học Bách Khoa Hà Nội đã tạo điều kiện và truyền đạt cho em những kiến thức vô cùng hữu ích

Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc đến PGS.TS Phan Trung Huy Ngoài việc truyền đạt cho em những kiến thức và giúp em tìm kiếm tài liệu tham khảo, Thầy đã hướng dẫn em rất tận tình Trong quá trình viết luận văn, khi em gặp một số khó khăn, Thầy đã động viên, giúp đỡ em rất nhiều

Do trình độ có hạn, luận văn của em có thể còn nhiều nhược điểm và sơ suất, kính mong được các thầy cô góp ý Em xin chân thành cảm ơn!

Hà Nội, ngày 15 tháng 09 năm 2012 Học viên

Nguyễn Thị Hà Thu

2

Trang 3

DANH MỤC CÁC HÌNH VẼ

Hình 1.1 Tìm kiếm thông dụng theo các box cứng……….……… 8 Hình 1.2 Tìm kiếm nâng cao trong Yahoo!Việt Nam……….……… 9 Hình 1.3 Tìm kiếm nâng cao trong Ask……… ……… 9

Google……… 10

Hình 2.1 Sánh mẫu trong thuật toán cài đặt thô………12 Hình 2.2 Độ mờ trong thuật toán sánh mẫu theo tiếp cận ôtômát mờ……… 15

Hình 2.3 Giá trị của next[i] trong thuật toán sánh mẫu theo tiếp cận ôtômát mờ 17

Hình 2.4 Mô hình cấu trúc cây của ô tô mát nâng cao trong thuật toán

Corasick……… 23

Aho-Hình 2.5 Trạng thái các hàm goto trong thuật toán Aho-Corasick……… 28

Hình 2.6 Goto function trong thuật toán sánh đa mẫu Aho-Corasick………31 Hình 3.1 Cây biểu thức logic……… 34 Hình 4.1 Kết quả minh họa cho modun sánh mẫu theo thuật toán cài đặt thô… 47 Hình 4.2 Kết quả minh họa cho modun sánh mẫu theo tiếp cận ôtômát mờ…… 50 Hình 4.3 Kết quả minh hoạ cho modun tìm kiếm đa mẫu theo thuật toán

Aho-Corasick……… 52

Hình 4.4 Kết quả minh họa cho modun chuyển đổi biểu thức logic dạng

3

Trang 4

trung tố về dạng hậu tố……… 54

Hình 4.5 Kết quả minh họa cho modun tính giá trị biểu thức logic dạng hậu tố…56 Hình 4.6 Kết quả minh họa cho modun tìm kiếm theo biểu thức logic áp dụng

thuật toán sánh mẫu cài đặt thô……… 58 Hình 4.7 Kết quả minh họa cho mudun tìm kiếm theo biểu thức logic áp dụng

ôtômát mờ……… 59 Hình 4.8 Kết quả minh họa cho mudun tìm kiếm theo biểu thức logic áp dụng

thuật toán Aho-Corasick………61

MỞ ĐẦU

1 Lý do chọn đề tài

Trong xu thế phát triển của khoa học công nghệ, máy tính và Internet được

sử dụng trong hầu hết các lĩnh vực và góp phần vào việc thúc đẩy sự phát triển nhiều lĩnh vực trong cuộc sống Hiện nay, ngoài máy tính, còn có rất nhiều sản phẩm công nghệ khác như Ipad, Iphone, hay những chiếc điện thoại cũng có thể thay thế cho một chiếc máy tính trong nhằm phục vụ cho những mục đích nhất định của con người, như học tập, công việc, giải trí và tìm kiếm thông tin Trong thời kì có sự phát triển của Internet rất mạnh mẽ ngày nay, bài toán tìm kiếm có vai trò rất quan trọng Một vấn đề cốt lõi để hệ thống tìm kiếm thông tin hoạt động nhanh và chính xác đó là hệ thống phải được áp dụng những thuật toán hiệu quả để tìm kiếm dữ liệu Dữ liệu trong máy tính được lưu trữ dưới rất nhiều dạng khác nhau như hình ảnh, âm thanh,… nhưng phổ biến nhất vẫn

là lưu trữ sử dụng chuỗi Ta có thể thấy các dạng khác nhau của chuỗi như ở các file

dữ liệu, trên biểu diễn của các gen, hay chính văn bản chúng ta đang đọc

Ba vấn đề chính trong bài toán tìm kiếm: một là tính hiệu quả về kết quả tìm kiếm, hai là tốc độ tìm kiếm nhanh, và thứ ba là giao diện hướng người

4

Trang 5

dùng Hiện nay, trên thị trường đang ứng dụng phổ biến nhất là các modun tìm kiếm cứng nhắc Ví dụ như các box tìm kiếm cứng trong các thư viện, các trang tìm kiếm trên internet Người sử dụng phải nhập từng nội dung cần tìm kiếm vào các box với số lượng hạn chế và nội dung phù hợp với tính năng của các box Bởi với các modun tìm kiếm cứng như vậy, việc tìm kiếm thông tin theo nhiều yêu cầu khác nhau với các liên kết logic cứng nhắc cần nhiều box Điều này gây ra sự phức tạp vì tính không mềm dẻo khi có các phát sinh số yêu cầu tìm kiếm v à trong cách xây dựng phát triển chương trình đòi hỏi phải viết lại chương trình.

Vì vậy, cần phải xây dựng một phương thức tìm kiếm nâng cao, đáp ứng cả

ba vấn đề của bài toán tìm kiếm Một vấn đề cốt lõi để hệ thống tìm kiếm thông tin hoạt động nhanh và chính xác đó là hệ thống phải được áp dụng những thuật toán hiệu quả để tìm kiếm dữ liệu, cụ thể là những thuật toán sánh mẫu có tính mềm dẻo

để có thể kết hợp với tổ chức cấu trúc dữ liệu để xây dựng một phương thức tìm kiếm mềm dẻo Từ đó, cho phép người sử dụng chương trình có thể tìm kiếm thông tin theo một tổ hợp logic tùy ý của các xâu mẫu, nâng cao tính mềm dẻo của dạng thức nhập dữ liệu đầu vào, không cứng nhắc như nhiều ứng dụng sẵn có trên thị trường đang sử dụng Phương pháp này khắc phục hai vấn đề: giao diện đã thân thiện, mềm dẻo hơn với người sử dụng; và không phải xây dựng lại chương trình khi có các yêu cầu mới phát sinh, tiết kiệm được chi phí khi xây dựng chương trình

Trên thế giới, cũng đã có những phần mềm tìm kiếm theo biểu thức logic, tuy nhiên do tính bảo mật và những vẫn đề về bản quyền nên chúng ta không biết được những phần mềm đó được xây dựng như thế nào Nhu cầu tìm hiểu về phương thức tìm kiếm này để chủ động nắm bắt được công nghệ, có thể phát triển nâng cấp thuật toán, sử dụng để tìm kiếm những vùng dữ liệu có tính chất bảo mật và nhạy cảm, được nảy sinh một cách tự nhiên Giải pháp cho vấn đề này nhờ sử dụng phương pháp ôtômát nâng cao là hợp lý

Vì những lý do đó, đề tài được lựa chọn cho luận văn tốt nghiệp này là đi

vào tìm hiểu ứng dụng của ôtômát nâng cao trong bài toán sánh mẫu.

5

Trang 6

2 Mục đích nghiên cứu

Luận văn đi vào nghiên cứu các thuật toán sánh mẫu ứng dụng ôtômát nâng

cao, cách thức liên kết các thuật toán này với các biểu thức logic để giải quyết bài toán tìm kiếm trên cơ sở áp dụng kỹ thuật của ôtômát nâng cao trong những tình huống tìm kiếm chính xác đơn, đa mẫu và tìm kiếm mềm dẻo theo biểu thức logic

3 Nội dung nghiên cứu

- Tìm hiểu về các thuật toán sánh đơn mẫu và đa mẫu sử dụng ôtômát nâng cao,

so sánh các thuật toán để thấy được sức mạnh của ôtômát nâng cao trong bài toán sánh mẫu

- Tìm hiểu cây biểu thức logic, cách tổ chức cấu trúc dữ liệu để tính “giá trị” một câu lệnh tìm kiếm được biểu diễn dưới dạng một biểu thức logic

- Tìm cách liên kết các thuật toán sánh mẫu và cây biểu thức logic để xây dựng một phương thức tìm kiếm mềm dẻo

4 Các kết quả đã làm được

- Trình bày các thuật toán tìm kiếm đơn mẫu và đa mẫu, so sánh các thuật toán

để thấy được sức mạnh của ôtômát nâng cao trong bài toán sánh mẫu

- Trình bày về cách tổ chức cấu trúc dữ liệu, cây biểu thức logic, tính toán giá trị biểu thức logic

- Đóng góp mới của tác giả: Xây dựng được phương thức tìm kiếm mềm dẻo theo biểu thức logic dựa trên sự kết hợp giữa các thuật toán sánh mẫu ứng dụng ôtômát nâng cao và cây biểu thức logic cho đơn mẫu và đa mẫu

• Chương 2: Các thuật toán sánh mẫu

Chương này phân tích quá trình tiền xử lý thông tin đầu vào, trình bày các thuật toán tìm kiếm đơn mẫu theo phương thức cài đặt thô, theo tiếp cận ôtômát mờ,

6

Trang 7

tìm kiếm đa mẫu theo thuật toán Aho-Corasick.

• Chương 3: Tổ chức cấu trúc dữ liệu

Chương này đưa ra cách xây dựng cây biểu thức logic, và trình bày cách thức tính giá trị của một biểu thức logic theo phương pháp hậu tố

• Chương 4: Xây dựng phương thức tìm kiếm mềm dẻo theo biểu thức logic

Nội dung chương 4 là kết hợp các thuật toán sánh mẫu đã trình bày ở chương

2 và cây biểu thức logic ở chương 3 để xây dựng phương thức tìm kiếm mềm dẻo Chương này cũng giới thiệu công cụ và môi trường lập trình để xây dựng chương trình tìm kiếm mềm dẻo thử nghiệm dựa trên các modun cài đặt các thuật toán sánh mẫu

• Kết luận

• Tài liệu tham khảo

7

Trang 8

CHƯƠNG 1 TỔNG QUAN

1.1 Khảo sát thực trạng tìm kiếm thông tin hiện nay

Trong thời kì có sự phát triển của Internet rất mạnh mẽ ngày nay, bài toán tìm kiếm có vai trò rất quan trọng

Dữ liệu trong máy tính được lưu trữ dưới rất nhiều dạng khác nhau như hình ảnh, âm thanh,… nhưng phổ biến nhất vẫn là lưu trữ sử dụng chuỗi Ta có thể thấy các dạng khác nhau của chuỗi như ở các file dữ liệu, trên biểu diễn của các gen, hay chính văn bản chúng ta đang đọc

Ba vấn đề chính trong bài toán tìm kiếm: một là tính hiệu quả về kết quả tìm kiếm, hai là tốc độ tìm kiếm nhanh, và thứ ba là giao diện hướng người dùng Hiện nay, trên thị trường đang ứng dụng phổ biến nhất là các modun tìm kiếm cứng nhắc dựa trên các box tìm kiếm Người sử dụng phải nhập từng nội dung cần tìm kiếm vào các box với số lượng hạn chế và nội dung phù hợp với tính năng của các box Bởi với các modun tìm kiếm cứng như vậy, việc tìm kiếm thông tin theo nhiều yêu cầu khác nhau với các liên kết logic cứng nhắc cần nhiều box Điều này gây ra sự phức tạp đối với người sử dụng và trong cách xây dựng phát triển chương trình cũng như ảnh hưởng đến tốc độc tìm kiếm

Hình 1.1 Tìm kiếm thông dụng theo các box cứng

8

Trang 9

Hình 1.2 Tìm kiếm nâng cao trong Yahoo! Việt Nam http://vn.search.yahoo.com/web/advanced

Hình 1.3 Tìm kiếm nâng cao trong Ask

http://www.ask.com/advancedsearch?o=0&l=dir

9

Trang 10

Hình 1.4 Tìm kiếm nâng cao trong Google

http://www.google.com.vn/advanced_search

Trên thế giới, cũng đã có những chương trình tìm kiếm xây dựng dựa trên các modun tìm kiếm mềm dẻo, ví dụ điển hình nhất là Tìm kiếm nâng cao trong Google Tuy nhiên, đó là phạm trù quốc tế, và do những vấn đề về công nghệ, sự cạnh tranh, tính bảo mật nên chúng ta không biết những modun tìm kiếm mềm dẻo ấy được xây dựng như thế nào

Vì vậy, cần phải xây dựng một phương thức tìm kiếm nâng cao, đáp ứng cả

ba vấn đề của bài toán tìm kiếm Từ đó, cho phép người sử dụng chương trình có thể tìm kiếm thông tin theo một tổ hợp logic tùy ý của các xâu mẫu, nâng cao tính mềm dẻo của dạng thức nhập dữ liệu đầu vào, không cứng nhắc như nhiều ứng dụng sẵn có trên thị trường đang sử dụng Phương pháp này khắc phục hai vấn đề: giao diện đã thân thiện, mềm dẻo hơn; và tốc độ tìm kiếm cũng sẽ được cải thiện rất nhiều so với những modun tìm kiếm cứng nhắc, không phải xây dựng lại chương trình khi có nhiều yêu cầu mới phát sinh

Một vấn đề cốt lõi để hệ thống tìm kiếm thông tin hoạt động nhanh và chính xác đó là hệ thống phải được áp dụng những thuật toán hiệu quả để tìm kiếm dữ liệu,

cụ thể là những thuật toán sánh mẫu có tính mềm dẻo để có thể kết hợp với tổ chức cấu trúc dữ liệu để xây dựng một phương thức tìm kiếm thông minh Các thuật toán sánh mẫu ứng dụng ôtômát nâng cao là những thuật toán đáp ứng được tính chất mềm dẻo đó

10

Trang 11

1.2 Giới thiệu bài toán sánh mẫu.

Sánh mẫu hay còn gọi là so mẫu (pattern – matching), là một trong những bài toán cơ bản và quan trọng trong các thuật toán xử lý về xâu ký tự hay xử lý văn bản (text processing) Bài toán đặt ra là tìm ra sự xuất hiện của một hoặc nhiều xâu mẫu (pattern) trong chuỗi các ký tự cho trước được gọi là xâu đích Đây là một bài toán kinh điển và phổ biến trong khoa học kỹ thuật bởi hầu hết mọi ứng dụng tìm kiếm đều có sự so khớp dữ liệu ở một dạng nào đó Ứng dụng của sánh mẫu được áp dụng phổ biến trong các trình soạn thảo văn bản hay các chương trình tìm kiếm văn bản trên internet dựa vào các từ khóa, tất nhiên để thực thi các bài toán phức tạp này cần rất nhiều kỹ thuật và cách xử lý khác đi kèm

Ta đã có rất nhiều thuật toán sánh mẫu, phương pháp tìm kiếm đơn mẫu cổ điển và đơn giản nhất là thuật toán Brute-Force còn gọi là thuật toán duyệt lần lượt hay thuật toán cài đặt thô Tiếp đến là các thuật toán Karp-Rapin, Knuth-Morris-Pratt (viết tắt là thuật toán KMP), Boyer-Moore…

Trong luận văn này, tác giả tập trung trình bày ứng dụng của ôtômát nâng cao trong hai thuật toán sánh mẫu sau: thuật toán tìm kiếm đơn mẫu theo tiếp cận ôtômát mờ và thuật toán tìm kiếm đa mẫu Aho-Corasick Sau đó là sự kết hợp của hai thuật toán này với cây biểu thức logic để xây dựng phương thức tìm kiếm mềm dẻo

11

Trang 12

CHƯƠNG 2 CÁC THUẬT TOÁN SÁNH MẪU

2.1 Thuật toán cài đặt thô Brute-Force

Sánh mẫu (đơn mẫu) là bài toán tìm sự xuất hiện của một xâu mẫu w

trong một xâu đích S ( một dòng text hoặc một văn bản) Xâu mẫu và xâu đích là tất cả những xâu gồm các kí tự trong bảng chữ cái

Xâu mẫu w được kí hiệu là w = w[1 m] ; độ dài là m

Xâu đích S được kí hiệu là s = s [1 n] ; độ dài là n

• Thuật toán sánh mẫu được thực hiện như sau :

- Đầu tiên chúng sắp thẳng hàng các vị trí biên trái của xâu mẫu và xâu đích, sau

đó so sánh các ký tự đã được sắp thẳng hàng của xâu mẫu và xâu đích – bước này gọi là một phép thử hoặc một phép lấy mẫu

- Sau khi so khớp được toàn bộ xâu mẫu hoặc sau một lần không khớp, chúng dịch chuyển xâu mẫu về bên phải

- Gán mỗi lần thử với vị trí thứ j trong xâu đích, khi xâu mẫu được sắp thẳng với đoạn s[ j j+m-1]

- Các thủ tục duyệt được lặp đi lặp lại cho đến khi các vị trí biên phải của xâu mẫu vượt quá vị trí biên phải của xâu đích Đây gọi là phép duyệt và bước dịch chuyển

Hình 2.1 Sánh mẫu trong thuật toán cài đặt thô

Thuật toán duyệt lần lượt bao gồm các bước duyệt, tại tất cả các vị trí từ 1

đến vị trí thứ n – m + 1 trong xâu đích, duyệt xem có một sự xuất hiện nào của xâu mẫu hay không Sau đó, qua mỗi lần thử, nó dịch xâu mẫu sang vị trí kế tiếp

bên tay phải Độ phức tạp của thuật toán duyệt lần lượt này là O(mn) trong trường

hợp xấu nhất nhưng tiến trình của nó trong thực hành thường được thực hiện rất

12

Trang 13

nhanh trên kiểu dữ liệu đặc thù.

Đây là thuật toán đơn giản nhất, được mô tả như sau : BF( w, m, s, n )

Ở mục sau, chúng ta sẽ tìm hiểu một thuật toán sánh mẫu (đơn mẫu) áp dụng ôtômát mờ, khắc phục được nhược điểm về tốc độ của thuật toán duyệt lần lượt này

13

Trang 14

2.2 Thuật toán áp dụng ôtômát mờ.

Thuật toán này cùng một mục đích với thuật toán duyệt lần lượt ở mục trước

là giải quyết bài toán sánh mẫu (đơn mẫu)

2.2.1 Phát biểu bài toán.

Có một dòng S gồm các kí tự trên bảng chữ cái mà ta cần phải tìm kiếm sự xuất hiện của mẫu w với độ dài m Bản chất của vấn đề tìm kiếm là duyệt từ trái sang phải và xét từng kí tự xuất hiện trên S

2.2.2 Mô hình của ôtômát mờ.

Giả sử : xâu mẫu w được kí hiệu là w = w[1 m] ; độ dài là m

xâu đích S được kí hiệu là s = s [1 n] ; độ dài là n

A là bảng chữ cái biểu diễn w và S

AW là tập các kí tự xuất hiện trong w

Các kí tự không xuất hiện trong w để đơn giản kí hiệu là #

Ta xét ôtômát mờ A = ( Q, A, δ , q0 , F ), trong đó:

- Q : tập hữu hạn các trạng thái mờ Mỗi trạng thái mờ là một tập mờ với các giá

trị mờ nguyên thuộc đoạn [0,…, m], ta biểu diễn:

Trang 15

q f = ( v1 , , v k ) mà

i : vi = độ dài mẫu i

15

Trang 16

2.2.3 Thuật toán sánh mẫu theo tiếp cận ôtômát mờ.

Khi duyệt S từ trái sang phải, bắt đầu từ kí tự thứ t = 1,…, n ta sẽ kí hiệu là s[1], s[2], , s[n] Ta gọi fuz[t] là độ mờ xuất hiện của mẫu cho tới thời điểm thứ t trên S tức là tại kí tự được đọc là s[t] Ở đây, độ mờ được hiểu là độ

dài của khúc đầu ( prefix ) dài nhất trên w khớp với S sau khi đọc đến kí tự s[t]

Hình 2.2 Độ mờ trong thuật toán sánh mẫu theo tiếp cận ôtômát mờ

(Độ mờ là độ dài khúc đầu dài nhất trên w khớp với S tại thời điểm t)

Khi nhận được giá trị của độ mờ fuz[t] = m thì chứng tỏ có thêm một lần xuất hiện mẫu tại vị trí t – m + 1 ứng với kí tự s[t – m+1]

Ban đầu, ôtômát ở trạng thái q0 Mỗi khi gặp được một kí tự s[t] và ôtômát đang

ở trạng thái q thì ta nhận được trạng thái mới q’ = δ (q, s[t])

Nếu q’ F thì báo có một lần xuất hiện mẫu Do đó, hàm TFuzz sẽ phải được xây dựng một cách thích hợp để phản ánh được bản chất của thuật toán trên

Xét một ví dụ minh họa để dễ dàng hiểu được cách xây dựng bảng TFuzz:

Nếu q’ F thì báo có một lần xuất hiện mẫu Do đó, hàm TFuzz sẽ phải được xây dựng một cách thích hợp để phản ánh được bản chất của thuật toán trên

Xét một ví dụ minh họa để dễ dàng hiểu được cách xây dựng bảng TFuzz:

Trang 17

Ví dụ 1:

Xâu w = acaac có độ dài m = 5

Xâu S = abcdcdefaa c a a c gh có độ dài n = 13

Bảng TFuzz:

i # a c 0

1 2 3 4 5

0 1 0

0 1 2

0 3 0

0 4 2

0 1 5

0 3 0

Từ trạng thái 0, khi đọc được s[t] =a thì nhận được q’ = 1, có nghĩa là fuz[t]=1, Chẳng hạn với q = 2, nếu đọc được s[t] =a thì q’ = 3, còn nếu đọc được s[t] = c thì q’ = 0 Như vậy, bản chất của q tại từng thời điểm là phản ánh độ mờ của mẫu trên S tại thời điểm tương ứng Có thể thấy fuz[t] = δ ( fuz[t – 1], s[t] ) Trường hợp k = 1 thì fuz[t] = TFuzz( fuz[t – 1], s[t] ) Với ví dụ trên, từ bảng TFuzz, ta có cách tìm mẫu như sau : S = a b a c b a a c a a c g h t = 1 2 3 4 5 6 7 8 9 10 11 12 13 fuz[t]=0 0 1

0 1 2 0 1 1 2 3 4 5 0 0

Tại vị trí thứ 11 trên S, ứng với s[11] ta có độ mờ fuz[11] = 5, từ đó ghi nhận mẫu xuất hiện ở vị trí thứ 11 – 5 + 1 = 7 ứng với kí tự s[7]

Tư tưởng của phương pháp là mảng hai chiều TFuzz (một chiều i = 0 m,

một chiều là chỉ số các ký tự trong AW ) sẽ được tính thông qua một mảng 1

Trang 18

chiều ( i = 0 m) được đặt tên là next Chúng ta sẽ tìm hiểu hàm next, TFuzz là gì?

Và chúng được tính như thế nào?

Khi đoạn đầu của mẫu w đã được khớp với một đoạn trên S, giả sử kí tự cuối của đoạn khớp đó là w[i] cũng chính bằng s[t], khi đó ta có độ mờ là i Vậy thì sau khi đọc kí tự tiếp theo là s[t+1], độ mờ fuz[t+1] sẽ là bao nhiêu? Nếu i là độ mờ trước khi đọc kí tự x thì TFuzz(i,x) chính là độ mờ sau khi đọc kí

tự x Để tính được TFuzz(i,x), cần tính thông qua mảng next[i] với i = 0 m Ở đây, next[i] chính là độ dài đoạn dài nhất của khúc đầu w khớp với khúc cuối của đoạn w’ = w[1] w[i] ( đoạn chung này phải khác w’ tức là next[i] < i )

Hình 2.3 Giá trị của next[i] trong thuật toán sánh mẫu theo tiếp cận ôtômát mờ

(Độ dài đoạn khớp nhau in đậm được gọi là next[i])

Như trên hình 2.3, đoạn w[i-h+1] w[i] khớp với đoạn w[1] w[h] thì next[i] = h Khi có được bảng next[i], ta sẽ tính được bảng TFuzz, và từ bảng TFuzz, sẽ cho thấy độ mờ tại cái vị trí trên xâu S Khi độ mờ bằng m thì ghi nhận thêm một sự xuất hiện của w trên S

Phương pháp sánh mẫu dựa trên mô hình ôtômát mờ được thực hiện thông qua 3 bước sau đây :

•Bước 1: Xây dựng bảng next[i] với i = 0 m

• Bước 2: Xây dựng bảng TFuzz(i, x) trong đó i = 0 m và x là ký tự được đọc

•Bước 3: Duyệt từng kí tự trên S từ trái qua phải, tính độ mờ tại mỗi vị trí trên S Khi độ mờ bằng m thì ghi nhận một lần xuất hiện mẫu trên S

Trang 19

Sau đây là giải thuật chi tiết các bước:

Trang 20

Bước 1 : Xây dựng bảng next.

Trang 22

21

Trang 23

n h g i á v ề t ốc đ ộ tì m k i ế m .

Các bước tính mảng next[i] và TFuzz(i,x) là các bước tiền xử lý, bản chất thuật toán này chỉ là duyệt lần lượt từng kí tự trên xâu đích S từ trái qua phải, tính toán độ mờ tại mỗi kí tự đọc được Vì thế độ phức tạp của thuật toán này chỉ

là O(n) Như vậy, so với thời gian chạy của thuật toán cài đặt thô là O(mn) thì thuật toán tìm kiếm xâu theo tiếp cận ôtômát mờ cải thiện về tốc độ hơn hẳn

Tuy nhiên thuật toán cải thiện về tốc độ thì kèm theo là sự chiếm dụng bộ nhớ nhiều hơn do sử dụng mảng 2 chiều TFuzz

22

Trang 24

2.3 Thuật toán Aho-Corasick

Không như hai thuật toán sánh đơn mẫu đã trình bày ở trên, Aho-Corasick là

thuật toán sánh đa mẫu

2.3.1 Phát biểu bài toán.

Có một dòng S gồm các kí tự trên bảng chữ cái mà ta cần phải tìm kiếm sự xuất hiện của n mẫu x1 , x2 , , xn Kết quả bài toán là đưa ra những xâu mẫu có xuất hiện trong S

2.3.2 Mô hình ôtômát của thuật toán

Tập hợp các xâu mẫu x1 , x2 , , xn sẽ được xây dựng thành cấu trúc cây

Ví dụ hình dưới đây là cây được tạo cho tập hợp các xâu mẫu: {he, she, hers, his}

Hình 2.4 Cấu trúc cây của ôtômát nâng cao trong thuật toán Aho-Corasick

Cấu trúc cây như sau: Mỗi nhánh đi sẽ tạo ra 1 xâu mẫu

Mỗi cạnh là 1 kí tự của xâu mẫu

Mỗi node được gọi là 1 trạng thái

Trong thuật toán này ta định nghĩa 3 hàm xử lý quan trọng

23

Trang 25

1 Hàm goto g(q, a): từ trạng thái q, nếu gặp kí tự a thì sẽ đi đến trạng thái nào Hàm này sẽ cho biết trạng thái đó.

2 Hàm failure link: hàm failure f() được định nghĩa như sau: giả sử node hiện tại là

q, f (q) = u trong đó u là hậu tố dài nhất của q mà u cũng là tiền tố của các xâu mẫu xi trong cây T(X) Như vậy, failure link sẽ không được tìm thấy trong cây

3 Output funtion: out(q) sẽ trả về tất cả các xâu được xác định với node q

2.3.3 Thuật toán sánh mẫu

Thuật toán này gồm 2 phase:

Phase tiền xử lý (Preprocessing): xây dựng cây và xử lý dữ liệu

Phase tìm kiếm (Searching): tìm sự tồn tại các xâu mẫu x1 , x2 , , xn trong chuỗi text (xâu đích)

Phase tiền xử lý: Dùng để tạo cây với các thông tin sau

Phase tiền xử lý sẽ gọi 2 function con là ENTER() và COMPLETE() để tạo 3 bộ dữ liệu ở trên

Phase tiền xử lý được định nghĩa như sau:

Tên hàm: PREAC

Input: X là tập hợp các xâu mẫu, k là số lượng xâu mẫu

Ký hiệu: X[i] = xi và x[j] là ký tự thứ j trong một xâu mẫu x

Ouput: cây tìm kiếm với các bộ dữ liệu cần thiết để tìm kiếm

Funtion PREAC(X, k)

Tạo node gốc

24

Trang 26

//Tạo vòng lặp, xây dựng hàm goto cho node gốc

Trong đó, hàm ENTER được định nghĩa như sau:

Input: x là xâu mẫu, root là node gốc

Output: bộ dữ liệu goto function và 1 phần của bộ dữ liệu ouput function

ENTER(x, root)

Gán node r = root

i = 0

//Duyệt theo các cạnh đã được xây dựng

While i < |x| and g(r, x[i]) ≠ FAIL and g(r, x[i]) ≠ root

Trang 27

Hàm COMPLETE được định nghĩa như sau:

Input: root là node gốc

Ouput: xây dựng bộ dữ liệu failure link và phần còn lại của dữ liệu ouput function

While queue ≠ empty

Lấy node r ra từ queue

For: với mỗi kí tự a mà g(r, a) = s ≠ 0

State = f(r)While g(state, a) = fail do state = f(state)F(s) = g(state, a)

Output(s) = output(s)  output(f(s))

Phase tìm kiếm

Bắt đầu từ trạng thái state = 0

Duyệt các kí tự a của chuỗi text tìm kiếm

While g(state, ai) = fail do state = f(state)

State = g(state, ai)

Nếu output(state) != empty return True

Return False

26

Trang 28

Sau đó sẽ gọi hàm COMPLETE(root)

Chi tiết hàm ENTER(he, root) sẽ chạy như sau:

Node r = root

Int i = 0

While i < |x| and g(r, h) ≠ FAIL and g(r, h) ≠ root

// Vòng while đầu tiên không thỏa mãn

//Tạo node mới

While i = 0 < |he| = 2: thỏa mãn nên

Trang 29

node1 = node2

i = i+1 = 2

While i = 2 < |he| = 2: không thỏa mãn nên thoát ra ngoài

Như vậy, sau khi thực thi hàm này ta sẽ có hàm goto và ouput như sau:G(0,h) = node1

Trang 30

Hình 2.5 Trạng thái các hàm goto trong thuật toán Aho-Corasick

Các ouput như sau:

Trang 31

F(node3) = 0

While queue ≠ empty

Node r = node3 // lấy ra từ queue, khi đó queue = {node1}G(node3, h) = node4 ≠ fail

State = f(node3) = 0G(0, h) = node1 ≠ fail nên không thực thi doF(node4) = g(0, h) = node1

Node r = node4// lấy ra từ queue, khi đó queue = {node1}G(node4, e) = node5 ≠ fail

State = f(node4) =node1

G(node1, e) = node2 ≠ fail nên không thực thi do

F(node5) = g(node1, e) = node2

Node r = node5// lấy ra từ queue, khi đó queue = {node1}G(node5, a) = fail nên lặp bước kế tiếp

Node r = node1// lấy ra từ queue, khi đó queue = { }

G(node1, e) = node2 ≠ fail

State = f(node1) =node0

G(node0, h) = node1 ≠ fail nên không thực thi do

F(node2) = g(node0, e) = 0

G(node1, i) = node6 ≠ fail

State = f(node1) =node0

30

Trang 32

G(node0, i) = node1 ≠ fail nên không thực thi do

F(node2) = g(node0, e) = 0

Node r = node2// lấy ra từ queue, khi đó queue = {node6}G(node2, r) = node8 ≠ fail

State = f(node2) =node0

G(node0, r) = fail nên state = f(state) = 0

F(node8) = g(node0, r) = 0

Node r = node6// lấy ra từ queue, khi đó queue = {node8}

G(node6, s) = node7 ≠ fail

State = f(node6) = node0

G(node0, s) = node3 ≠ fail nên không thực thi do

F(node7) = g(node0, s) = node3

Node r = node8// lấy ra từ queue, khi đó queue = {node7}

G(node8, s) = node9 ≠ fail

State = f(node8) =node0

G(node0, s) = node3 ≠ fail nên không thực thi do

F(node9) = g(node0, s) = node3

Node r = node7// lấy ra từ queue, khi đó queue = {node9}

G(node7, a) = fail

Node r = node9// lấy ra từ queue, khi đó queue = { }

G(node9, a) = fail

31

Trang 33

queue = { } Dừng thuật toán.

Vậy, sau khi thực thi xong hàm COMPLETE(), ta sẽ đầy đủ bộ dữ liệu goto, out, failure như sau:

Goto function được mô tả như hình bên dưới:

Trang 34

Out(node3) = {} qua vòng lặp tiếp theo

G(node3, h) = node4 ≠ fail

State = g(node3,h)=node4

Out(node4) = {} qua vòng lặp tiếp theo

G(node4, e) = node5 ≠ fail

State = g(node4,e)=node5

Out(node5) = {he, she} ≠ {}

//Đã tìm thấy được 2 từ, đưa 2 từ này vào danh sách kết quả trả về

Result = {he, she}

G(node5, e) = fail

state = f(state) = f(node5) = node2

State = g(node2, r) = node8

G(node8, s) = node9 ≠ fail

Out(node9) = {hers}

33

Ngày đăng: 21/04/2017, 23:23

HÌNH ẢNH LIÊN QUAN

Hình 1.1  Tìm kiếm thông dụng theo các box cứng - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 1.1 Tìm kiếm thông dụng theo các box cứng (Trang 8)
Hình 2.2  Độ mờ trong thuật toán sánh mẫu theo tiếp cận ôtômát mờ - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 2.2 Độ mờ trong thuật toán sánh mẫu theo tiếp cận ôtômát mờ (Trang 16)
Hình 2.3  Giá trị của next[i] trong thuật toán sánh mẫu theo tiếp cận ôtômát mờ - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 2.3 Giá trị của next[i] trong thuật toán sánh mẫu theo tiếp cận ôtômát mờ (Trang 18)
Hình 2.4   Cấu trúc cây của ôtômát nâng cao trong thuật toán Aho-Corasick - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 2.4 Cấu trúc cây của ôtômát nâng cao trong thuật toán Aho-Corasick (Trang 24)
Hình 2.5   Trạng thái các hàm goto trong thuật toán Aho-Corasick - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 2.5 Trạng thái các hàm goto trong thuật toán Aho-Corasick (Trang 30)
Hình 2.6  Goto function trong thuật toán sánh đa mẫu Aho-Corasick - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 2.6 Goto function trong thuật toán sánh đa mẫu Aho-Corasick (Trang 33)
Hình 3.1   Cây biểu thức logic. - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 3.1 Cây biểu thức logic (Trang 36)
Hình 4.1  Kết quả minh họa cho modun sánh mẫu theo thuật toán cài đặt thô - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 4.1 Kết quả minh họa cho modun sánh mẫu theo thuật toán cài đặt thô (Trang 51)
Hình 4.2  Kết quả minh họa cho modun sánh mẫu theo tiếp cận ôtômát mờ - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 4.2 Kết quả minh họa cho modun sánh mẫu theo tiếp cận ôtômát mờ (Trang 54)
Hình 4.3  Kết quả minh hoạ cho modun tìm kiếm đa mẫu - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 4.3 Kết quả minh hoạ cho modun tìm kiếm đa mẫu (Trang 57)
Hình 4.4  Kết quả minh họa cho modun chuyển đổi biểu thức logic - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 4.4 Kết quả minh họa cho modun chuyển đổi biểu thức logic (Trang 59)
Hình 4.5 Kết quả minh họa cho modun tính giá trị biểu thức logic dạng hậu tố - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 4.5 Kết quả minh họa cho modun tính giá trị biểu thức logic dạng hậu tố (Trang 61)
Hình 4.6  Kết quả minh họa cho modun tìm kiếm theo biểu thức logic - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 4.6 Kết quả minh họa cho modun tìm kiếm theo biểu thức logic (Trang 63)
Hình 4.7  Kết quả minh họa cho mudun tìm kiếm theo biểu thức logic - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 4.7 Kết quả minh họa cho mudun tìm kiếm theo biểu thức logic (Trang 64)
Hình 4.8  Kết quả minh họa cho mudun tìm kiếm theo biểu thức logic - TÌM HIỂU ỨNG DỤNG của ôtômát NÂNG CAO TRONG bài TOÁN SÁNH mẫu
Hình 4.8 Kết quả minh họa cho mudun tìm kiếm theo biểu thức logic (Trang 66)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w