Luận văn được chia làm ba chương vớinội dung cơ bản như sau: Chương 1: Trình bày khái niệm về so khớp chuỗi, các hướng tiếp cận, các dạng so khớp và một số thuật toán so mẫu.. Hơn nữa k
Trang 1ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH
NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS: ĐỖ TRUNG TUẤN
Thái Nguyên – 2014
Trang 2MỤC LỤC
MỤC LỤC 1
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT 5
DANH MỤC CÁC HÌNH VẼ VÀ CÁC BẢNG 6
MỞ ĐẦU 7
CHƯƠNG 1 SO KHỚP CHUỖI 10
1.1 Khái niệm so khớp chuỗi 10
1.2 Lịch sử phát triển 11
1.3 Các cách tiếp cận 12
1.4 Ứng dụng của so khớp chuỗi 12
1.5 Các dạng so khớp chuỗi 13
1.5.1 So khớp đơn mẫu 13
1.5.2 So khớp đa mẫu 14
1.5.3 So mẫu mở rộng 15
1.5.4 So khớp chính xác 16
1.5.5 So khớp xấp xỉ 17
1.5.5.1 Phát biểu bài toán 17
1.5.5.2 Các tiếp cận so khớp xấp xỉ 18
1.5.5.3 Độ tương tự giữa hai xâu 19
1.5 Một số thuật toán so mẫu 20
1.5.1 Thuật toán Brute Force 20
1.5.2 Thuật toán Karp-Rabin 21
1.5.3 Thuật toán BM ( Boyer- Moor) 24
1.5.4 Các thuật toán khác 27
1.6 Khớp chuỗi với otomat hữu hạn 28
1.6.1 Otomat hữu hạn 28
1.6.1.1 Ôtômát hữu hạn đơn định DFA 29
1.6.1.2 Ôtômát hữu hạn không đơn định NFA 33
1.6.2 Otomat khớp chuỗi 36
1.6.2.1 Giới thiệu 36
1.6.2.2 Thuật toán xây dựng Otomat so khớp chuỗi 38
1.7 Kết luận chương 40
CHƯƠNG 2 THUẬT TOÁN SO KHỚP CHUỖI KNUTH-MORRIS-PRATT 41
2.1 Thuật toán KMP 41
Trang 32.1.1 Giới thiệu thuật toán 41
2.1.2 Bảng so sánh một phần 45
2.1.3 Độ phức tạp của thuật toán KMP 47
2.2 Thuật toán KMP mờ 48
2.2.1 Otomat so mẫu 48
2.2.2 Thuật toán 49
2.2.2.1 Thuật toán tạo lập TFuzz 49
2.2.2.2 Thuật toán tìm kiếm mẫu dựa vào bảng TFuzz 51
2.2.3 So sánh KMP và thuật toán KMP mờ 52
2.3 Thuật toán KMP - BM mờ 53
2.3.1 Ý tưởng của thuật toán 53
2.4.2 Otomat mờ so mẫu 55
2.3.2.1 Giới thiệu 55
2.3.2.2 Hoạt động của otomat mờ so mẫu 55
2.3.3 Thuật toán tìm kiếm 56
2.4 Kết luận chương 57
CHƯƠNG 3 ỨNG DỤNG THUẬT TOÁN KMP TRONG TÌM KIẾM THÔNG TIN TRÊN VĂN BẢN 58
3.1 Bài toán tìm kiếm mẫu trên văn bản 58
3.1.1 Tìm kiếm mẫu 58
3.1.2 Tìm kiếm thông tin 59
3.1.2.1 Giới thiệu 59
3.1.2.2 Các mô hình tìm kiếm thông tin thường sử dụng 61
3.2 Mã nguồn mở Lucene 64
3.2.1 Giới thiệu 64
3.2.2 Các bước sử dụng Lucene 66
3.3 Ứng dụng tìm kiếm thông tin trên văn bản 67
3.4 Cài đặt chương trình thử nghiệm 68
3.4.1 Giải pháp, công nghệ sử dụng 68
3.4.2 Nội dung chương trình 68
3.4.3 Kết quả thực nghiệm 71
3.4.3.1 Giao diện chính của chương trình 72
3.4.3.2 Kết quả thử nghiệm của chương trình khi tìm kiếm với từ khóa “Văn bản” 72
3.5 Kết luận chương 3 73
Trang 4KẾT LUẬN 74 TÀI LIỆU THAM KHẢO 76
Trang 5DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT
BM Thuật toán Boyer - Moore
DFA Deterministic Finite Automata - Ôtômát hữu hạn đơn định
DOC Document
FA Finite Automata - Ôtômát hữu hạn
HTML HyperText Markup Language
IDF Inverse document frequency - Tần suất tài liệu ngược
KMP KNUTH-MORRIS-PRATT
LAN Local area network
NFA Nondeterministic Finite Automata - Ôtômát hữu hạn không đơn định
TF Term frequency - Tần suất từ
Trang 6DANH MỤC CÁC HÌNH VẼ VÀ CÁC BẢNG
Hình 1.1 Sơ đồ chuyển của một DFA 30
Hình 1.2 Mô tả một DFA 31
Bảng 1.1 Ví dụ hàm chuyển δ của DFA 32
Hình 1.3 Sơ đồ của một NFA 34
Hình 1.4 Di chuyển chuỗi 35
Bảng 1.2 Ví dụ hàm chuyển trạng thái δ của NFA 35
Hình1.5 Ví dụ so khớp chuỗi 37
Hình 1.6 Ví dụ otomat so khớp chuỗi 38
Bảng 2.1 Bảng so sánh một phần 46
Bảng 2.2 Thí dụ khác 46
Bảng 2.3 Trường hợp mẫu xấu nhất với thuật toán KMP 47
Bảng 2.4 Bảng next 51
Bảng 2.5 Bảng TFuzz 51
Bảng 2.6 Minh họa thí dụ 52
Hình 2.1 Dịch chuyển con trỏ trên mẫu 52
Bảng 2.7 Kết quả tìm sự xuất hiện mẫu P trong tệp S theo KMP và tiếp cận mờ 53
Hình 2.2 Ý tưởng chung của thuật toán KMP-BM mờ 55
Hình 3.1 Mô hình biểu diễn và so sánh thông tin 60
Hình 3.2 Mô hình không gian vec tơ 62
Bảng 3.1 Tính điểm số 64
Hình 3.3 Mô hình đánh chỉ mục của Lucene 65
Hình 3.4 Mô hình ứng dụng tìm kiếm thông tin văn bản 68
Hình 3.5 Giao diện chính của chương trình 72
Hình 3.6 Kết quả tìm kiếm của chương trình 73
Trang 7MỞ ĐẦU
1 Lý do chọn đề tài
Máy tính ngày nay đã được sử dụng trong hầu hết các lĩnh vực và đã gópphần quan trọng vào việc thúc đẩy sự phát triển kinh tế, xã hội, khoa học kỹthuật, … Máy tính ra đời nhằm phục vụ cho những mục đích nhất định của conngười Với tất cả sự xử lý của máy tính để lấy thông tin hữu ích và trong quátrình xử lí đó một vấn đề đặc biệt quan trọng là tìm kiếm thông tin với khốilượng lớn, độ chính xác cao, thời gian nhanh nhất
Cùng với sự phổ biến của công nghệ thông tin, số lượng các tài liệu điện
tử cũng gia tăng từng ngày Đến nay, số lượng các tài liệu được lưu trữ lên đếnhàng tỷ trang Trong khi đó, nhu cầu khai thác trong kho tài liệu khổng lồ này đểtìm kiếm những thông tin cần thiết đang là nhu cầu thường ngày và thiết thựccủa người sử dụng Tuy nhiên, một trong những khó khăn con người gặp phảitrong việc khai thác thông tin là khả năng tìm chính xác thông tin họ cần trongkho tài liệu Để trợ giúp công việc này, các hệ thống tìm kiếm đã lần lượt đượcphát triển nhằm phục vụ cho nhu cầu tìm kiếm của người sử dụng
Những hệ thống tìm kiếm bắt đầu phát triển và đưa vào ứng dụng, phổbiến là các hệ thống tìm kiếm theo từ khóa Nhiều hệ thống hoạt động hiệu quảtrên Internet như Google, Bing, Yahoo!… Tuy nhiên, phần lớn các công cụ tìmkiếm này là những sản phẩm thương mại và mã nguồn được giữ bí mật Hoặccác hệ thống tìm kiếm trên máy cá nhân như Windows Search, GoogleDesktop… đã đáp ứng phần nào nhu cầu của người sử dụng, miễn phí cho cánhân, tuy nhiên cũng chỉ đáp ứng được trên phạm vi nhỏ và mới chỉ dừng lại ởmức độ tìm kiếm từ khóa theo tiêu đề và phần tóm tắt
Có một cách tiếp cận hiệu quả để giải quyết vấn đề này là thực hiện việc
Trang 8so khớp và tìm kiếm toàn văn Một trong những thuật toán so khớp chuỗi kinhđiển là thuật toán KMP Có thể nói, KPM là một thuật toán mới mẻ ít được sửdụng tại Việt Nam trong việc quản lý, lưu trữ và xử lý lượng dữ liệu lớn nhưngrất hiệu quả và chính xác Dựa trên hướng tiếp cận đó và sự hướng dẫn của giáoviên, tôi mạnh dạn nhận đề tài “So khớp chuỗi và thuật toán Knuth-Morris-Pratt”.
2 Đối tượng và phạm vi nghiên cứu
Các khái niệm so khớp chuỗi
Các khái niệm thuật toán so khớp chuỗi KMP
Một số ứng dụng trong thuật toán KMP
3 Hướng nghiên cứu của đề tài
Nghiên cứu tìm kiếm Knuth–Morris–Pratt và ứng dụng trong việctìm kiếm thông tin trên văn bản
Nghiên cứu giải pháp công nghệ cài đặt chương trình thử nghiệm
4 Những nội dung chính
Luận văn được trình bày trong 3 chương, có phần mở đầu, phần kết luận,phần mục lục, phần tài liệu tham khảo Luận văn được chia làm ba chương vớinội dung cơ bản như sau:
Chương 1: Trình bày khái niệm về so khớp chuỗi, các hướng tiếp cận, các dạng so khớp và một số thuật toán so mẫu
Chương 2: Trình bày về thuật toán KMP, thuật toán KMP mờ và thuật toán KMP-BM mờ
Chương 3: Trình bày về bài toán tìm kiếm thông tin trên văn bản và tiến hành cài đặt thử nghiệm chương trình
5 Phương pháp nghiên cứu
Tổng hợp các tài liệu đã được công bố về thuật toán tìm kiếm thông tin,
Trang 9h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
khai phá dữ liệu, đặc biệt các kết quả nghiên cứu liên quan đến thuật toán tìm kiếm thông tin
Thực nghiệm thuật toán tìm kiếm KMP với dữ liệu mẫu Nhận xét, đánhgiá kết quả thử nghiệm
6 Ý nghĩa khoa học của đề tài
Luận văn nghiên cứu kỹ thuật, thuật toán tìm kiếm thông tin là cơ sở hỗtrợ cho công tác dự báo, lập kế hoạch, quy hoạch, phân tích dữ liệu quản lý,chuyên môn, nghiệp vụ
Trang 10h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
CHƯƠNG 1 SO KHỚP CHUỖI1.1 Khái niệm so khớp chuỗi
So khớp chuỗi là một kỹ thuật đóng vai trò nền tảng trong lĩnh vực xử lývăn bản Hầu như tất cả các trình soạn thoải và xử lý văn bản đều cần phải cómột cơ chế để so khớp các chuỗi trong tài liệu hiện tại Việc tích hợp các thuậttoán so khớp chuỗi là một trong những khâu cơ bản được sử dụng trong việctriển khai phần mềm và được thực hiện trên hầu hết các hệ điều hành
Mặc dù hiện nay dữ liệu được lưu trữ dưới nhiều hình thức khác nhau,nhưng văn bản vẫn là hình thức chủ yếu để lưu trữ và trao đổi thông tin Trongnhiều lĩnh vực như so khớp, trích chọn thông tin, tin sinh học…, một lượng lớn
dữ liệu thường được lưu trữ trong các tập tin tuyến tính Hơn nữa khối lượng dữliệu thu thập được tăng lên rất nhanh nên đòi hỏi phải có các thuật toán xử lý và
so khớp dữ liệu văn bản hiệu quả
So khớp chuỗi là việc so sánh một hoặc nhiều chuỗi (thường được gọi làmẫu hoặc Pattern) với văn bản để tìm vị trí và số lần xuất hiện của chuỗi đótrong văn bản
Ta hình thức hoá bài toán so khớp chuỗi như sau: coi văn bản là mộtmảng T[1 n] có chiều dài n và khuôn mẫu là một mảng P[1 m] có chiều dài m;các thành phần của T và P là các ký tự được rút từ một bảng chữ cái hữu hạn ∑
Ví dụ, ta có thể có ∑ = {0,1} hoặc ∑ ={a,b, ,z} Các mảng ký tự P và T thườngđược gọi là các chuỗi ký tự Ta nói rằng một chuỗi w là tiền tố (hậu tố) của mộtchuỗi x, ký hiệu là w ⊂ x (w ⊃ x), nếu x = wy (x = yw), với y là một chuỗinào
đó Để ngắn gọn, ta kí hiệu Pk để thể hiện tiền tố k - ký tự P[1 k] của khuôn mẫuP[1 m] Ta nói rằng khuôn mẫu P xảy ra với khoá chuyển s trong văn bản T(hoặc, theo tương đương, nói rằng khuôn mẫu P xảy ra bắt đầu tại vị trí s + i
Trang 11h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
trong văn bản T) nếu 0 ≤ s ≤ n-m và T[s + 1 s + m] = P[1 m] (nghĩa là, nếuT[s+j] = P[j], với 1 ≤ j ≤ m) Bài toán so khớp chuỗi là bài toán tìm tất cả các
Trang 12h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
khoá chuyển hợp lệ với nó một khuôn mẫu P đã cho xảy ra trong một văn bản T
đã cho
Ví dụ: khuôn mẫu P = abaa xuất hiện một lần trong văn bản T =abcabaabcabac, tại khoá chuyển s = 3 Với bài toán này, rõ ràng ta có một cáchlàm đơn giản là tìm tất cả các khoá chuyển hợp lệ dùng một vòng lặp kiểm trađiều kiện P[1 m] = T[s+1 s+m] với n - m + 1 giá trị có thể của s
1.2 Lịch sử phát triển
Trong năm 1970, S.A Cook đã chứng minh một kết quả lý thuyết giúpsuy ra sự tồn tại của một thuật toán để giải bài toán so khớp mẫu có thời gian tỷ
lệ với (M+N) trong trường hợp xấu nhất
D.E.Knuth và V.R.Pratt đã kiên trì theo đuổi kiến trúc mà Cook đã dùng
để chứng minh cho định lý của ông và nhận được một thuật toán tương đối đơngiản Đồng thời J.H.Morris cũng khám phá ra thuật toán này
Knuth, Morris, Pratt đã không giới thiệu thuật này của họ cho đến năm
1976, và trong thời gian này R.S.Boyer và J.S.Moore đã khám phá ra một thuật toán
nhanh hơn nhiều
Tháng 6 – 1975, Alfred V Aho và Margret J Corasick đã giới thiệu thuậttoán so khớp chuỗi đa mẫu Aho Corasick trong tài liệu “Communications of theACM 18”
Năm 1980, Nigel Horspool đã giới thiệu thuật toán so khớp chuỗi tương
tự thuật toán KMP, nhưng đảo ngược thứ tự so sánh trong tài liệu Software Practice & Experience, 10(6):501-506
-Tháng 3 - 1987, R.M.Karp và M.O.Rabin đã giới thiệu thuật toán đơngiản gần như thuật toán Brute Force có thời gian thực thi tỉ lệ với m+n trong tàiliệu IBM J Res develop – vol 31 no.2
Trang 13h t t p : / / www l r c - tn u e d u v n /
Số hĩa bởi Trung tâm Học liệu
1.3 Các cách tiếp cận
Cĩ 4 cách tiếp cận chính của các thuật tốn so khớp chuỗi:
Thuật tốn cổ điển: là các thuật tốn chủ yếu dựa vào sự so sánhgiữa các ký tự Các thuật tốn điển hình bao gồm Brute Force,Nạve,…
Thuật tốn máy tự động hậu tố: là các thuật tốn sử dụng cấu trúc
dữ liệu hậu tố tự động để nhận ra tất cả các hậu tố của mẫu Cácthuật tốn điển hình bao gồm Knuth – Morris – Pratt, Boyer –Moore, Horspool,…
Thuật tốn bit song song: là các thuật tốn khai thác bản chất songsong của các dữ liệu bit để thực hiện các thao tác cùng lúc Cácthuật tốn điển hình bao gồm Shift – Or, …
Thuật tốn băm: là các thuật tốn sử dụng kỹ thuật băm, tránh việc
so sánh các ký tự cĩ độ phức tạp bậc 2 Các thuật tốn điển hìnhbao gồm Karp – Rabin
Độ phức tạp tính tốn: Trên thực tế cĩ nhiều loại ký tự khác nhau như:binary, DNA, Alphabet, numeric… và mỗi loại ký tự cĩ độ phức tạp khác nhau
Độ phức tạp tính tốn tỉ lệ thuận với chiều dài của mẫu, chiều dài của vănbản và
độ lớn của tập các ký tự
Các thuật tốn so khớp chuỗi thường được thực hiện theo 2 bước xử lý
sau: Bước tiền xử lý: bao gồm xử lý mẫu và Khởi tạo cấu trúc dữ
liệu Bước so khớp: thực hiện việc so khớp mẫu trong văn bản
1.4 Ứng dụng của so khớp chuỗi
Trang 14h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
Trang 15h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
khớp chuỗi được sử dụng rộng rãi trong nhiều ứng dụng và lĩnh vực khác nhaunhư:
Chức năng search trong các trình soạn thảo văn bản và webbrowser
Các công cụ so khớp như: Google Search, Yahoo Search,…
Sinh học phân tử như trong so khớp các mẫu trong DNA,protein,…
So khớp cơ sở dữ liệu
Trong nhiễu kênh với cho phép chấp nhận được
Trong so khớp mẫu hoặc vết của tấn công, đột nhập và các phầnmềm độc hại
Trong lĩnh vực an toàn mạng và an toàn thông tin…
1.5 Các dạng so khớp chuỗi
Phân loại các thuật toán so khớp dựa trên các đặc tính của mẫu ta có cácdạng: so khớp đơn mẫu, so khớp đa mẫu (mẫu là tập các xâu), so khớp mẫu mởrộng, so khớp biểu thức chính qui với hai hướng tiếp cận là so khớp chính xác
và xấp xỉ
1.5.1 So khớp đơn mẫu
Cho xâu mẫu P dộ dài m, P = P1 P2… Pm , và xâu độ dài n, S = S1 S 2… Sn(S thường dài, là một văn bản) trên cùng một bảng chữ A Tìm tất cả các xuấthiện của xâu P trong S
Trong các thuật toán so mẫu thường sử dụng các khái niệm: Khúc đầu,khúc cuối, khúc con hay xâu con của một xâu, được định nghĩa như sau: Cho 3xâu x, y, z Ta nói x là khúc đầu (prefix) của xâu xy, là khúc cuối (suffix) củaxâu yx và là khúc con hay xâu con (factor) của xâu yxz
Trang 16h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
Thuật toán “thô” nhất và đã được sử dụng rộng rãi là Brute- Force.Phương pháp này đơn giản chỉ là lần lượt bắt đầu từ vị trí trong S để đối sánhvới mẫu P Mặc dù có tốc độ chậm, thời gian xấu nhất tỉ lệ với tích m.n, songtrong nhiều ứng dụng thực tế các chuỗi phát sinh ra thường có thời gian xử lýthực sự luôn tỷ lệ với m + n Ngoài ra, một ưu điểm khác là nó thích hợp với cấutrúc của hầu hết các hệ máy tính
Cho đến nay, rất nhiều thuật toán so đơn mẫu được đưa, trong đó kinhđiển nhất là KMP
Có thể xem như có ba tiếp cận chung cho các thuật toán so mẫu, phụthuộc vào cách duyệt tìm mẫu trong văn bản Việc đánh giá tốc độ của các thuậttoán dựa trên kích cỡ của mẫu P và bảng chữ A
Tiếp cận thứ nhất, lần lượt từng ký tự của văn bản S được đọc và tại mỗi
vị trí, sau khi đối sánh với một ký tự của mẫu sẽ cập nhật sự thay đổi để nhận ramột khả năng xuất hiện mẫu Hai thuật toán điển hình theo tiếp cận này là KMP
Tiếp cận thứ ba mới xuất hiện gần đây cho ra đời các thuật toán hiệu quả
về thực hành đối với mẫu P đủ dài Cũng tương tự như tiếp cận thứ hai, song tạimỗi thời điểm sẽ tìm khúc cuối dài nhất của cửa sổ mà là khúc con của mẫu.Thuật toán đầu tiên theo tiếp cận này là BDM và khi P đủ ngắn, một phiên bảnđơn giản hơn, hiệu quả hơn là BNDM Với những mẫu dài, thuật toán BOMđược đánh giá là nhanh nhất
1.5.2 So khớp đa mẫu
Cho một mẫu P gồm tập các từ khoá w1, w2,….,w k và xâu vào S =
Trang 17h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
S1S2…Sn trên cùng bảng chữ A Tìm sự xuất hiện của các từ khoá wi trong S
Một cách đơn giản để tìm nhiều từ khoá trong một xâu đích là sử dụngthuật toán so đơn mẫu nhanh nhất đối với mỗi từ khoá Rõ ràng phương phápnày không hiệu quả khi số lượng từ khoá lớn
Cả ba tiếp cận tìm đơn mẫu ở trên đều được mở rộng cho tìm đa mẫu Haiđiển hình theo tiếp cận thứ nhất là thuật toán nổi tiếng Aho- Corasisk, có tốc độcải thiện đáng kể khi số từ khoá nhiều và thuật toán Multiple Shift- And, được
sử dụng hiệu quả khi tổng độ dài của mẫu P rất nhỏ 2
Theo tiếp cận thứ hai có thuật toán nổi tiếng Commentz - Walter, trong đókết hợp ý tưởng của Boyer - Moore và Aho- Corasisk , nhanh về lý thuyết, songlại không hiệu quả trong thực hành Một mở rộng của thuật toán Horspool là SetHorspool Cuối cùng là thuật toán Wu-Manber, một phương pháp pha trộn giữatiếp cận so khớp hậu tố (suffix search approach) và một kiểu hàm băm, đượcđánh giá là nhanh trong thực hành
Trong tiếp cận thứ ba đã có những mở rộng từ thuật toán BOM vàSBOM; tương tự với Shift- Or BNDM là Multiple BNDM
1.5.3 So mẫu mở rộng
Trong nhiều ứng dụng, so khớp mẫu không chỉ đơn giản là dãy các ký tự.Sau đây là một số mở rộng thường thấy trong các ứng dụng:
Mở rộng đơn giản nhất cho phép mẫu là một dãy các lớp hay các tập ký
tự, giả sử được đánh số thứ tự là 1,2,…,m Bất kỳ ký tự nào trong lớp thứ i cũng
có thể được xem là ký tự thứ i của mẫu
Mở rộng thứ hai là giới hạn khoảng trên độ dài: Một số vị trí trên mẫuđược ấn định để khớp với một dãy văn bản nào đó có độ dài nằm trong mộtkhoảng xác định trước Điều này thường được sử dụng trong các ứng dụngsinh- tin học, chẳng hạn tìm mẫu PROSITE
Trang 18h t t p : / / www l r c - tn u e d u v n /
Số hĩa bởi Trung tâm Học liệu
Mở rộng thứ ba sử dụng các ký tự tùy chọn và ký tự lặp Trong xuất hiệncủa mẫu trên văn bản, các ký tự tuỳ chọn cĩ thể cĩ hoặc khơng cĩ, cịn các ký tựlặp cĩ thể cĩ một hoặc lặp nhiều lần
Các vấn đề nảy sinh từ ba hướng mở rộng trên và những kết hợp từ bahướng này được giải quyết bằng cách điều chỉnh lại thuật tốn Shift - Or vàBNDM, trong đĩ cĩ sử dụng cơ chế song song bit để mơ phỏng otomat đa định,cho phép tìm tất cả các xuất hiện của mẫu
1.5.4 So khớp chính xác
Tìm một (hoặc nhiều) vị trí xuất hiện chính xác cuả một xâu ký tự P[1 m](mẫu so khớp - pattern) ở trong một xâu ký tự lớn hơn hay trong một đoạn vănbản nào đĩ T[1 n], m<=n Ví dụ: ta cĩ thể tìm thấy vị trí của xâu “abc” trongxâu “abcababc” là 1 và 6
Phát biểu hình thức bài tốn như sau: gọi Σ là một tập hữu hạn (finite set)các ký tự Thơng thường, các ký tự của cả mẫu so khớp và đoạn văn bản gốc đềunằm trong Σ Tập Σ tùy từng ứng dụng cụ thể cĩ thể là bảng chữ cái tiếng Anh từ
A đến Z thơng thường, cũng cĩ thể là một tập nhị phân chỉ gồm hai phần tử 0 và
1 (Σ = {0,1}) hay cĩ thể là tập các ký tự DNA trong sinh học (Σ = {A,C,G,T})
Phương pháp đơn giản nhất là lần lượt xét từng vị trí i trong xâu ký tự gốc
từ 1 đến n-m+1, so sánh T[i…(i+m-1)] với P[1 m] bằng cách xét từng cặp ký tựmột và đưa ra kết quả so khớp Người ta cịn gọi phương pháp này là cách tiếpcận ngây thơ (Nạve string search) Dưới đây là thủ tục đặc tả của phương pháp này:
Trang 19h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
7 If j > m then
8 return s // s là vị trí tìm được
9 return false // không có vị trí nào thỏa mãn
Độ phức tạp trung bình của thuật toán là O(n+m), nhưng trong trường hợpxấu nhất độ phức tạp là O(n.m), ví dụ như so khớp mẫu “”aaaab” trong xâu
“aaaaaaaaab”
1.5.5 So khớp xấp xỉ
1.5.5.1 Phát biểu bài toán
So mẫu xấp xỉ là bài toán tìm sự xuất hiện của một mẫu trong văn bản,trong đó sự “khớp” giữa mẫu và xuất hiện của nó có thể chấp nhận k “lỗi” (k làmột giới hạn cho trước) Có thể kể ra một vài kiểu “lỗi”, như những lỗi đánhmáy hay lỗi chính tả trong hệ thống trích rút thông tin, những sự biến đổi chuỗigen hay các lỗi đo đạc trong sinh- tin học và những lỗi truyền dữ liệu trong các
hệ thống xử lý tín hiệu,… Vì trong các hệ thống tin học khó có thể tránh đượccác “lỗi” nên vấn đề so khớp xấp xỉ càng trở nên quan trọng
Đặc biệt, khi sử dụng các hệ thống trích rút thông tin, người dùng ngày naycòn đòi hỏi cả những kết quả gần giống hoặc có được kết quả phù hợp trả về nếu
có sự sai sót trong mẫu hay văn bản Trong trường hợp này “lỗi” có thể do nhiềunguyên nhân khác nhau, có thể kể ra như sau:
- Câu truy vấn sai chính tả, xâu so khớp không đúng cú pháp so với văn bản
- Lỗi in ấn, sai lỗi chính tả, sử dụng dấu chấm sai,…
- Do sự biến đổi hình thái từ trong một số ngôn ngữ
- Dữ liệu đưa vào cơ sở dữ liệu không chính xác, thường xảy ra với tênngười, địa chỉ…
- Thông tin người tìm đưa vào không chính xác, chỉ “đại loại”
Trang 20h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
Vì vậy, một vấn đề đặt ra cho các hệ thống trích rút thông tin ngày nay làđáp ứng được nhu cầu so khớp “mềm dẻo” này của người sử dụng
Bài toán so mẫu xấp xỉ tổng quát được phát biểu như sau: Cho văn bản T
độ dài n và xâu mẫu P độ dài m trên cùng một bảng chữ A Tìm các vị trí trongvăn bản khớp với mẫu, cho phép nhiều nhất k lỗi
1.5.5.2 Các tiếp cận so khớp xấp xỉ
Thuật toán so khớp xấp xỉ hiện nay chia thành 4 loại:
1) Các thuật toán dựa trên quy hoạch động: Đây là tiếp cận xuất hiện đầutiên và đã được dùng để tính khoảng cách soạn thảo
2) Các thuật toán sử dụng otomat so khớp: Trước tiên xây dựng một hàmcủa mẫu P và số lỗi k, sau đó tạo otomat đa định hữu hạn Đây là hướng tiếp cậnđược quan tâm nhiều vì có độ phức tạp thời gian trong trường hợp xấu nhất làO(n) (tuy nhiên đòi hỏi độ phức tạp không gian lớn hơn)
3) Các thuật toán sử dụng cơ chế song song bit: cách tiếp cận này cho rarất nhiều thuật toán hiệu quả nhờ khai thác bản chất song song của các phép toánbit trên một từ máy trong bộ vi xử lý Nói chung song song bit được dùng đểsong song hoá các kỹ thuật khác, như tạo otomat đa định, lập ma trận quy hoạchđộng Nói chung kỹ thuật này làm việc khá tốt với mẫu ngắn và tăng tốc đáng kể
so với những cài đặt không tận dụng khả năng song song của thanh ghi Một sốthuật toán dùng cơ chế song song bit là BPR và BPD để tái tạo một otomat đađịnh hữu hạn và BDM để tái tạo các thuật toán quy hoạch động
4) Các thuật toán sử dụng cơ chế lọc: Cố gắng thu hẹp không gian sokhớp của bài toán bằng cách loại đi các văn bản mà chắc chắn không chứa mộtđoạn nào “khớp” với mẫu Nói chung, phương pháp này đạt được bằng cách áp
Trang 21h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
dụng kỹ thuật so mẫu chính xác cho các mẫu nhỏ của mẫu Hai thuật toán hiệuquả nhất theo tiếp cận này là PEX và ABNDM Trong PEX, mẫu được chiathành k + 1 đoạn và sắp xếp để so khớp đa mẫu trên các đoạn này, vì ít nhất mộtđoạn phải có mặt trong một xuất hiện bất kỳ Thuật toán ABNDM là một mởrộng của thuật toán BNDM, trong đó tái tạo otomat đa định hữu hạn cho so khớpxấp xỉ Nói chung, các thuật toán sử dụng cơ chế lọc làm việc tốt hơn tỷ lệ k/mnhỏ Đối với trường hợp tỷ lệ k/m lớn, các thuật toán sử dụng cơ chế song songbit được đánh giá tốt hơn
Đối với bài toán so khớp đa mẫu cũng đã có một số phát triển theo hướngxấp xỉ Thuật toán MultiHash chỉ làm việc với k = 1 song rất hiệu quả khi sốlượng mẫu lớn; MultiPEX là thuật toán hiệu quả nhất khi tỷ lệ k/m nhỏ; Multi
BP xây dựng các NFA của tất cả các mẫu và sử dụng kết quả này làm bộ lọc,đây là lựa chọn tốt nhất cho tỷ lệ k/m cỡ trung bình
Một vài tiếp cận xấp xỉ cho bài toán tìm mẫu mở rộng và tìm biểu thứcchính qui có thể kể ra như: thuật toán dựa trên quy hoạch động cho biểu thứcchính qui; thuật toán sử dụng một otomat đa định hữu hạn cho phép có
“lỗi”, thuật toán song song bit dựa trên phương pháp của BPR, …
1.5.5.3 Độ tương tự giữa hai xâu
Để so khớp xấp xỉ, cần sử dụng một hàm khoảng cách đo độ tương tựgiữa hai xâu Tương tự ở đây được hiểu là giữa hai xâu ký tự có một vài sai khác
ở những lỗi có thể nhận ra bằng mắt thường, không xét về khía cạnh ngữ nghĩa(OCR- optical character recognition errors), chẳng hạn “Việt Nam” và “ViệtNan” hay “Việtt Nan”,… Có thể kể ra một số kỹ thuật phổ biến đo độ tương tựgiữa hai xâu: Xâu con chung dài nhất, dãy con chung dài nhất, khoảng cách soạnthảo Nhiều ứng dụng sử dụng các biến thể của các hàm khoảng cách này
1) Khoảng cách soạn thảo: Đối với hai xâu x, y khoảng cách soạn thảoEdit distance(x,y) là số nhỏ nhất các phép sửa đổi về mặt soạn thảo để biến đổi
Trang 22xâu x thành xâu y (việc tính toán khá phức tạp) Khoảng cách soạn thảo càng lớnthì sự khác nhau giữa hai xâu càng nhiều (hay độ tương tự càng nhỏ) và ngượclại Khoảng cách soạn thảo thường để kiểm tra chính tả hay tiếng nói Tuỳ thuộcvào quy ước về các phép sửa đổi mà ta nhận được các loại khoảng cách soạnthảo khác nhau, chẳng hạn như:
Khoảng cách Hamming: Phép sửa đổi chỉ là phép thay thế ký tự
Khoảng cách Levenshtein: Phép sửa đổi bao gồm: Chèn, xoá, và thay thế ký tự
Khoảng cách Damerau: Phép sửa đổi bao gồm: Chèn, xoá, thay thế
và hoán vị liền kề của các ký tự
2) Xâu con chung dài nhất (hay khúc con chung dài nhất): Một xâu w làxâu con hay khúc con (substring or factor) của xâu x nếu x = uwv (u, v có thêrỗng) Xâu w là khúc con chung của hai xâu x, y nếu w đồng thời là khúc concủa x và y Khúc con chung dài nhất của hai xâu x và y, ký hiệu LCF (x,y), làmột khúc con có độ dài lớn nhất
3) Dãy con chung dài nhất: Một dãy con của xâu x là một dãy các ký tự cóđược bằng cách xoá đi không, một hoặc nhiều ký tự từ x Dãy con chung củahai xâu x, y là một dãy con của cả hai xâu x và y Dãy con chung của x và y có
độ dài lớn nhất được gọi là dãy con chung dài nhất LCS (x,y) Có thể dùng độdài dãy con chung của hai xâu x, y để tính khoảng cách Levenstein giữa x và ytheo công thức:
LevDistance (x,y) = m + n - 2 length(LCS( x,y))
1.5 Một số thuật toán so mẫu
1.5.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ừ 1 chođến n-m+1 Sau mỗi lần thử thuật toán brute force dịch mẫu sang phải một ký tự
Số hóa bởi Trung tâm Học liệu h t t p : / / www l r c - tn u e d u v n /
Trang 23cho đến khi kiểm tra hết văn bản Thuật toán không cần công việc chuẩn bị cũngnhư 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ánnày là O(n*m).
function IsMatch(const X: string; m: integer;
const Y: string; p: integer): boolean;
1.5.2 Thuật toán Karp-Rabin
Karp-Rabin bài toán tìm kiếm chuỗi không khác nhiều so với bài toán tìmkiế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ầnthiết Thay vì phải so sánh tất các vị trí của văn bản, ta chỉ cần so sánh nhữngcửa sổ bao gồm những ký tự “có vẻ giống” mẫu
Trong thuật toán này hàm băm phải thỏa mãn một số tính chất như phải
dễ dàng tính được trên chuỗi, và đặc biệt công việc tính lại phải đơn giản để ítảnh hưởng đến thời gian thực hiện của thuật toán Và hàm băm được chọn ở đâylà:
hash(w[i…i+m-1]) = h
Trang 24= (w*dm-1 + w[i+1]*dm-2 + … w[i+m-1]*d0) mod q
Việc tính lại hàm băm sau khi dịch cửa sổ đi một ký tự chỉ đơn gian như sau:
procedure KR(const X: string; m: integer;
const Y: string; n: integer);
Trang 25j := 1;
while j <= n - m do
begin
if hx = hy then
if IsMatch(X, m, Y, j) then Output(j);
{hàm IsMatch trong phần BruteForce}
hy := ((hy - Ord(Y[j])*dM) shl 1) + Ord(Y[j + m]); {Rehash} Inc(j);
end;
if hx = hy then
if IsMatch(X, m, Y, j) then Output(j);
end;
Trang 261.5.3 Thuật toán BM ( Boyer- Moor)
Một tiếp cận phổ biến trong các thuật toán so đơn mẫu là duyệt tuần tựqua tất cả các ký tự trên xâu vào S, mỗi lần một ký tự Nhưng trong thuật toán
BM, có thể có những bước nhẩy xa trên S được thực hiện, nhờ vậy BM đượcđánh giá là thuật toán nhanh nhất về thực hành, đây là lựa chọn hiệu quả chonhững ứng dụng thông thường như các trình soạn thảo văn bản
Ý tưởng cơ bản của thuật toán là sử dụng một “Cửa sổ trượt” như sau:
“Cửa sổ” thực ra là một khúc độ dài m trên xâu vào S (m là độ dài của mẫu P)được đối sánh với mẫu tại một thời điểm nào đó Mỗi lần đối sánh mẫu P vớimột cửa sổ trên S bằng cách so sánh từng ký tự từ phải sang trái Khi gặp ký tựkhông khớp, cửa sổ trượt sang phải qua một đoạn trên S (tương ứng với việcdịch mẫu P sang phải) Trường hợp tốt nhất khi sự không khớp xảy ra tại vị trí
Pm và ký tự không khớp là Sk lại không phải là một ký tự trong mẫu P, lúc đó cóthể an toàn trượt cửa sổ sang phải qua m vị trí trên S và bắt đầu quá trình tìmkiếm mới bởi việc so sánh Pm và Sk+ m
Giả sử tại một thời điểm đang xét cửa sổ Sk - m+ 1Sk - m + 2 Sk và bắt đầu
so sánh Pmvới Sk
(1) Giả sử Pm Sk có hai khả năng:
Nếu vị trí xuất hiện phải nhất của ký tự Sk trong P là m - g, ta có thểdịch mẫu P sang phải g vị trí sao cho Pm-g dóng thẳng với Sk rồi bắtđầu lại quá trình đối sánh bởi phép so sánh Pm và S k+ g
Nếu ký tự Sk không có mặt trong P, ta có thể dịch mẫu P sang phải
m vị trí Đây là bước dịch chuyển xa nhất có thể mà vẫn không bỏsót sự xuất hiện nào của mẫu
(2) Giả sử m - i ký tự cuối của mẫu P đã khớp với m - i ký tự cuối củaS(k) Nếu i = 0, ta đã tìm được một xuất hiện của mẫu P Ngược lại, nếu i > 0 và
Pi Sk -m+i, xét hai khả năng:
Trang 27Nếu vị trí xuất hiện trái nhất của ký tự Sk -m+i trong P là i - g, khi đómẫu P được dịch sang phải g vị trí sao cho Pi-g dóng thẳng với Sk-m+i
và sẽ bắt đầu quá trình đối sánh mới, bắt đầu từ Pm so với Sk+g Nếu
Pi-g nằm bên phải của Pi (khi g < 0) thì mẫu P chỉ dịch sang phải 1
vị trí
Giả sử sufi(P) là một xâu con của Pi+1-gPi+2-g Pm-gvà Pi-g Pi (nếu
có nhiều xuất hiện như vậy của sufi(P) thì chọn vị trí phải nhất).Khi đó sẽ dịch mẫu P sang phải một đoạn dài hơn so với trườnghợp (2a) sao cho khúc Pi+1-gPi+2-g Pm-g dóng thẳng với khúc Sk-
m+i+1Sk-m+i+2 Sk và bắt đầu quá trình đối sánh mới từ Pm so với Sk+g.Như vậy, khi Pi Sj, mẫu P sẽ dịch sang phải đi một số vị trí Thuật toán
sử dụng hai bảng d1và d2 để tính toán bước địch chuyển này
Bảng d1 bao hàm trường hợp (1) và (2a): Với mỗi ký tự c, d1 c là số i lớnnhất sao cho c = Pi hoặc d c = m nếu c không xuất hiện trong mẫu P
Bảng d2 bao hàm trường hợp (2b): Với mỗi i, 1 i m, d2 i được xácđịnh là: d2 i = min g + m - i| g 1 và (g i hoặc Pi-g Pi) và ((g k hoặc Pk-g
= Pk) với i k m)
Có nhiều cách tính toán bảng d2 được đưa ra Thuật toán dưới đây tínhbảng dịch chuyển d2 là của Knuth, có sự sửa đổi của Mehlhorn Thuật toán sửdụng hàm f có tính chất f[m] = m+1 và với 1 j < m, f j = min i j < i < m và
Pi+1Pi+2 Pm = Pj+1Pj+2 Pm+j-i
Trang 29Các thuật toán so sánh mẫu lần lượt từ trái sang phải thường là các dạngcải tiến (và cải lùi) của thuật toán Knuth-Morris-Pratt và thuật toán sử dụngAutomat như: Forward Dawg Matching, Apostolico-Crochemore, Not So Naive,
Trang 30h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
Các thuật toán so sánh mẫu theo thứ tự đặc biệt:
* Thuật toán Galil-Seiferas và Crochemore-Perrin chúng chia mẫu thànhhai đ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ớichiề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ếnhà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ựavà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 so sánh mẫu theo thứ tự bất kỳ: những thuật toán này
có thể tiến hành so sánh mẫu với cửa sổ theo một thứ thự ngẫu nhiên Nhữngthuật toán này đều có cài đặt rất đơn giản và thường sử dụng ý tưởng ký tựkhông khớp của thuật toán Boyer-Moore
1.6 Khớp chuỗi với otomat hữu hạn
1.6.1 Otomat hữu hạn
Ôtômát hữu hạn FA là một mô hình tính toán của hệ thống với sự mô tảbởi các input và output Tại mỗi thời điểm, hệ thống có thể được xác định ở mộttrong số hữu hạn các cấu hình nội bộ gọi là các trạng thái Mỗi trạng thái của hệthống thể hiện sự tóm tắt các thông tin liên quan đến những input đã chuyển qua
và xác định các phép chuyển kế tiếp trên dãy input tiếp theo [5]
Trong khoa học máy tính, có nhiều hệ thống trạng thái hữu hạn, và lýthuyết về ôtômát hữu hạn là một công cụ thiết kế hữu ích cho các hệ thống này.Chẳng hạn, một hệ chuyển mạch như bộ điều khiển trong máy tính Một chuyểnmạch thì bao gồm một số hữu hạn các cổng input, mỗi cổng có 2 giá trị 0 hoặc 1.Các giá trị đầu vào này sẽ xác định 2 mức điện thế khác nhau ở cổng output
Trang 31h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
Mỗi trạng thái của một mạng chuyển mạch với n cổng bất kỳ sẽ là một trườnghợp trong 2n phép gán của 0 và 1 đối với các cổng khác nhau Các chuyển mạchthì được thiết kế theo cách này, vì thế chúng có thể được xem như hệ thốngtrạng thái hữu hạn Các chương trình sử dụng thông thường, chẳng hạn trìnhsọan thảo văn bản hay bộ phân tích từ vựng trong trình biên dịch máy tính cũngđược thiết kế như các hệ thống trạng thái hữu hạn Ví dụ bộ phân tích từ vựng sẽquét qua tất cả các dòng ký tự của chương trình máy tính để tìm nhóm các chuỗi
ký tự tương ứng với một tên biến, hằng số, từ khóa, …Trong quá trình xử lýnày, bộ phân tích từ vựng cần phải nhớ một số hữu hạn thông tin như các ký tựbắt đầu hình thành những chuỗi từ khóa Lý thuyết về ôtômát hữu hạn thườngđược dùng đến nhiều cho việc thiết kế các công cụ xử lý chuỗi hiệu quả
Máy tính cũng có thể được xem như một hệ thống trạng thái hữu hạn.Trạng thái hiện thời của bộ xử lý trung tâm, bộ nhớ trong và các thiết bị lưu trữphụ ở mỗi thời điểm bất kỳ là một trong những số rất lớn và hữu hạn của sốtrạng thái Bộ não con người cũng là một hệ thống trạng thái hữu hạn, vì số các
tế bào thần kinh hay gọi là neurons là số có giới hạn, nhiều nhất có thể là 235
Lý do quan trọng nhất cho việc nghiên cứu các hệ thống trạng thái hữuhạn là tính tự nhiên của khái niệm và khả năng ứng dụng đa dạng trong nhiềulĩnh vực thực tế Ôtômát hữu hạn được chia thành 2 loại: đơn định (DFA) vàkhông đơn định (NFA) Cả hai loại ôtômát hữu hạn đều có khả năng nhận dạngchính xác tập chính quy Ôtômát hữu hạn đơn định có khả năng nhận dạng ngônngữ dễ dàng hơn ôtômát hữu hạn không đơn định, nhưng thay vào đó thôngthường kích thước của nó lại lớn hơn so với ôtômát hữu hạn không đơn địnhtương đương
1.6.1.1 Ôtômát hữu hạn đơn định DFA
Một ôtômát hữu hạn đơn định DFA (Deterministic Finite Automata) gồmmột tập hữu hạn các trạng thái và một tập các phép chuyển từ trạng thái này tớitrạng thái khác trên các ký hiệu nhập được chọn từ một bộ chữ cái Σ nào đó
Trang 32h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
Mỗi ký hiệu nhập có đúng một phép chuyển khỏi mỗi trạng thái (có thể chuyểntrở về chính nó) Một trạng thái, thường ký hiệu là q0, gọi là trạng thái bắt đầu(trạng thái ôtômát bắt đầu) Một số trạng thái được thiết kế như là các trạng tháikết thúc hay trạng thái chấp nhận
Một đồ thị có hướng, gọi là sơ đồ chuyển tương ứng với một DFA nhưsau: các đỉnh của đồ thị là các trạng thái của DFA; nếu có một đường chuyển từtrạng thái q đến trạng thái p trên input a thì có một cung nhãn a chuyển từ trạngthái q đến trạng thái p trong sơ đồ chuyển DFA chấp nhận một chuỗi x nếu nhưtồn tại dãy các phép chuyển tương ứng trên mỗi ký hiệu của x dẫn từ trạng tháibắt đầu đến một trong những trạng thái kết thúc
Ví dụ sơ đồ chuyển của một DFA được mô tả trong dưới Trạng thái khởiđầu q0 được chỉ bằng mũi tên có nhãn "Start" Chỉ có duy nhất một trạng thái kếtthúc, cũng là q0 trong trường hợp này, được chỉ ra bằng hai vòng tròn Ôtômátnày chấp nhận tất cả các chuỗi số 0 và số 1 với số số 0 và số số 1 là số chẵn
Hình 1.1 Sơ đồ chuyển của một DFA
Một cách hình thức ta định nghĩa ôtômát hữu hạn là bộ gồm năm thànhphần (Q, Σ, δ, q0, F), trong đó:
Q là tập hợp hữu hạn các trạng thái
Σ là bộ chữ cái nhập hữu hạn
δ là hàm chuyển ánh xạ từ Q × Σ → Q, tức là δ(q, a) là một trạngthái được cho bởi phép chuyển từ trạng thái q trên ký hiệu nhập a
Trang 33Để có thể mô tả một cách hình thức hoạt động của một DFA trên chuỗi, ta
mở rộng hàm chuyển δ để áp dụng đối với một trạng thái trên chuỗi hơn là mộttrạng thái trên từng ký hiệu Ta định nghĩa hàm chuyển δ như một ánh xạ từ Q ×
Σ → Q với ý nghĩa δ(q, w) là trạng thái DFA chuyển đến từ trạng thái q trênchuỗi w
Trang 34h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
Σ là bộ chữ cái nhập Ký hiệu a, b (có hoặc không có chỉ số) và cácchữ số là các ký hiệu nhập
δ là hàm chuyển
F là tập các trạng thái kết thúc
w, x, y và z (có hoặc không có chỉ số) là các chuỗi ký hiệu nhập Mộtchuỗi w được chấp nhập bởi ôtômát hữu hạn M (Q, Σ, δ, q0, F) nếuδ(q, w) = p với p ∈ F Ngôn ngữ được chấp nhận bởi M, ký hiệu L(M) là tậphợp: L(M) = { w | δ (q, w) ∈ F }
Ví dụ: theo khái niệm hình thức, ta có DFA được xác định bởi M (Q, Σ, δ,
q0, F) với Q = {q0, q1, q2, q3}, Σ = {0, 1}, F = {q0} và hàm chuyển δ như sau:
Bảng 1.1 Ví dụ hàm chuyển δ của DFA
Giả sử chuỗi w = 110101 được nhập vào M
Ta có δ(q0, 1) = q1 và δ(q1, 1) = q0 ,vậy δ(q0, 11) = δ(δ(q0,1),1) =δ(q1, 1) = q0
Tiếp tục δ(q0, 0) = q2, vậy δ(q0, 110) = δ(δ(q0, 11), 0) = q2 Tiếp tục ta có δ(q, 1101) = q3, δ(q0, 11010) = q1
Và cuối cùng δ(q0, 110101) = q0 ∈ F
(Hay δ(q0, 110101) = δ(q1, 10101) = δ(q0, 0101) = δ(q2, 101) = δ(q3, 01) =δ(q1, 1) =q0 ∈ F)
Vậy 110101 thuộc L(M) Ta có thể chứng minh rằng L(M) là tập mọichuỗi có số chẵn số 0 và số chẵn số 1
Theo mô tả DFA như trên, ta thấy cũng có thể dùng bảng hàm chuyển để
Trang 35h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
mô tả các phép chuyển trạng thái của một ôtômát hữu hạn Trong bảng hàm
Trang 36h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
chuyển, hàng chứa các trạng thái thuộc tập trạng thái của ôtômát và cột là các kýhiệu thuộc bộ chữ cái nhập Bảng hàm chuyển gợi ý cho chúng ta một cấu trúc
dữ liệu để mô tả cho một ôtômát hữu hạn, đồng thời cũng cho thấy có thể dễdàng mô phỏng hoạt động của DFA thông qua một chương trình máy tính,chẳng hạn dùng cấu trúc vòng lặp
Một cách tổng quát, ta thấy tập Q của DFA thể hiện các trạng thái lưu trữcủa ôtômát trong quá trình đoán nhận ngôn ngữ, và như vậy khả năng lưu trữcủa ôtômát là hữu hạn Mặt khác, hàm chuyển δ là hàm toàn phần và đơn trị, chonên các bước chuyển của ôtômát luôn luôn được xác định một cách duy nhất.Chính vì hai đặc điểm này mà DFA mô tả như trên được gọi là ôtômát hữu hạnđơn định
1.6.1.2 Ôtômát hữu hạn không đơn định NFA
Xét một dạng sửa đổi mô hình DFA để chấp nhận không, một hoặc nhiềuhơn một phép chuyển từ một trạng thái trên cùng một ký hiệu nhập Mô hìnhmới này gọi là ôtômát hữu hạn không đơn định (NFA - Nondeterministic FiniteAutomata)
Một chuỗi ký hiệu nhập a1 a2 an được chấp nhận bởi một NFA nếu cótồn tại một chuỗi các phép chuyển, tương ứng với chuỗi nhập, từ trạng thái bắtđầu đến trạng thái kết thúc Chẳng hạn, chuỗi 01001 được chấp nhận bởi ôtômáttrong hình dưới đây vì có chuỗi phép chuyển qua các trạng thái q0, q0, q0, q3, q4,
q4 có nhãn tương ứng là 0,1, 0, 0, 1 NFA này chấp nhận tất cả các chuỗi có hai
số 0 liên tiếp hoặc hai số 1 liên tiếp
Trang 37h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
Hình 1.3 Sơ đồ của một NFA
Có thể xem ôtômát hữu hạn đơn định là một trường hợp đặc biệt củaNFA, trong đó mỗi trạng thái chỉ có duy nhất một phép chuyển trên mỗi ký hiệunhập Vì thế trong DFA, với một chuỗi nhập w và trạng thái q, chỉ có đúng mộtđường đi nhãn w bắt đầu từ q Để xác định chuỗi w có được chấp nhận bởi DFAhay không chỉ cần kiểm tra đường đi này Nhưng đối với NFA, có thể có nhiềuđường đi có nhãn là w, và do đó tất cả phải được kiểm tra để thấy có hay không
có đường đi tới trạng thái kết thúc
Tương tự như DFA, NFA cũng hoạt động với một bộ điều khiển hữu hạnđọc trên băng nhập Tuy nhiên, tại mỗi thời điểm, bộ điều khiển có thể chứa một
số bất kỳ trạng thái Khi có sự lựa chọn trạng thái kế tiếp, chẳng hạn như từtrạng thái q0 trên k hiệu nhập 0 ở hình trên, ta tưởng tượng như có các bản saocủa ôtômát đang thực hiện đồng thời Mỗi trạng thái kế tiếp mà ôtômát có thểchuyển đến sẽ tương ứng với một bản sao của ôtômát mà tại đó bộ điều khiểnđang chứa trạng thái đó
Ví dụ với chuỗi 01001, ta có :
Trang 38Khái niệm δ(q, a) là tập hợp tất cả các trạng thái p sao cho có phép chuyểntrên nhãn a từ trạng thái q tới p.
Để thuận tiện trong việc mô tả hoạt động ôtômát trên chuỗi, ta mở rộnghàm chuyển δ ánh xạ từ Q × Σ* → 2Q như sau:
1 δ(q, ε) = {q}
2 δ(q, wa) = { p | có một trạng thái r trong δ(q, w) mà p thuộc δ(r, a)}
= δ(δ(q, w), a)
3 δ(P, w) = ∪q ∈ P δ(q, w) , ∀P ⊆ Q
Ngôn ngữ L(M), với M là ôtômát hữu hạn không đơn định NFA (Q, Σ, δ,
q , F) là tập hợp: L(M) = {w | δ(q0, w) có chứa một trạng thái trong F}
Ví dụ: Xét sơ đồ chuyển của hình 2.3 Theo khái niệm hình thức, ta có:NFA M ({q0, q1, q2, q3, q4}, {0, 1}, δ, q0}) với hàm chuyển δ như sau:
Bảng 1.2 Ví dụ hàm chuyển trạng thái δ của NFA
Xét chuỗi nhập w = 01001
Trang 39h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
Ta có: δ (q0, 0) = {q0, q3}
δ (q0, 01) = δ(δ(q0, 0),1) = δ({q0, q3},1) = δ (q0, 1) ∪ δ (q3, 1) = {q0, q1}Tương tự , ta có thể tính :
Ta hình thức hoá bài toán so khớp chuỗi như sau: coi văn bản là mộtmảng T[1 n] có chiều dài n và khuôn mẫu là một mảng P[1 m] có chiều dài m;các thành phần của T và P là các ký tự được rút từ một bảng chữ cái hữu hạn ∑
Ví dụ, ta có thể có ∑ = {0,1} hoặc ∑ ={a,b, ,z} Các mảng ký tự P và T thườngđược gọi là các chuỗi ký tự Ta nói rằng một chuỗi w là tiền tố (hậu tố) của mộtchuỗi x, ký hiệu là w ⊂ x (w ⊃ x), nếu x = wy (x = yw), với y là một chuỗi nào
đó Để ngắn gọn, ta kí hiệu Pk để thể hiện tiền tố k - ký tự P[1 k] của khuôn mẫuP[1 m]
Ta nói rằng khuôn mẫu P xảy ra với khoá chuyển s trong văn bảnT (hoặc,theo tương đương, nói rằng khuôn mẫu P xảy ra bắt đầu tại vị trí s + i trong vănbản T) nếu 0 ≤ s ≤ n-m và T[s + 1 s + m] = P[1 m] (nghĩa là, nếu T[s+j] = P[j],với 1 ≤ j ≤ m) Bài toán so khớp chuỗi là bài toán tìm tất cả các khoá chuyển hợp
lệ với nó một khuôn mẫu P đã cho xảy ra trong một văn bản T đã cho
Ví dụ: khuôn mẫu P = abaa xuất hiện một lần trong văn bản T =
Trang 40h t t p : / / www l r c - tn u e d u v n /
Số hóa bởi Trung tâm Học liệu
abcabaabcabac, tại khoá chuyển s = 3 Với bài toán này, rõ ràng ta có một cáchlàm đơn giản là tìm tất cả các khoá chuyển hợp lệ dùng một vòng lặp kiểm trađiều kiện P[1 m] = T[s+1 s+m] với n - m + 1 giá trị có thể của s
Đánh giá: Thủ tục NAIVE-STRING-MATCHER có độ phức tạp m+1)m) trong trường hợp xấu nhất Như sẽ thấy, NAIVE-STRING-MATCHERkhông phải là một thủ tục tối ưu cho bài toán này Do đó việc sử dụng Otomat sokhớp chuỗi hiệu quả hơn vì chúng xét mỗi ký tự văn bản chính xác một lần
O((n-Có một otomat so khớp chuỗi cho mọi khuôn mẫu P: otomat này phảiđược khởi tạo từ khuôn mẫu trước khi dùng nó để tìm trong chuỗi văn bản Hình1.6 minh họa sơ đồ chuyển tiếp trạng thái của otomat so khớp chấp nhận tất cảcác chuỗi kết thúc bởi chuỗi ababaca Trạng thái 0 là trạng thái đầu, và trạng thái
7 là trạng thái chấp nhận duy nhất Một cạnh có hướng từ trạng thái i đến trạngthái j được gắn nhãn a biểu diễn δ(i, a) = j Các cạnh sang phải hình thành “cột