Tải bản đầy đủ (.pdf) (68 trang)

Nghiên cứu thuật toán knuth morris pratt và ứng dụng

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.18 MB, 68 trang )

-1-

MỤC LỤC
MỤC LỤC ................................................................................................................... 1
DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT ................................................ 3
DANH MỤC CÁC HÌNH VẼ VÀ CÁC BẢNG .......................................................... 4
MỞ ĐẦU..................................................................................................................... 5
CHƯƠNG 1. SO KHỚP CHUỖI ................................................................................. 8
1.1. Khái niệm so khớp chuỗi .................................................................................. 8
1.2. Lịch sử phát triển .............................................................................................. 9
1.3. Các cách tiếp cận ............................................................................................ 10
1.4. Ứng dụng của so khớp chuỗi........................................................................... 10
1.5. Các dạng so khớp chuỗi .................................................................................. 11
1.5.1. So khớp đơn mẫu ..................................................................................... 11
1.5.2. So khớp đa mẫu ....................................................................................... 12
1.5.3. So mẫu mở rộng ...................................................................................... 13
1.5.4. So khớp chính xác ................................................................................... 14
1.5.5. So khớp xấp xỉ ......................................................................................... 15
1.5.5.1. Phát biểu bài toán ............................................................................. 15
1.5.5.2. Các tiếp cận so khớp xấp xỉ .............................................................. 16
1.5.5.3. Độ tương tự giữa hai xâu .................................................................. 17
1.5. Một số thuật toán so mẫu ................................................................................ 18
1.5.1. Thuật toán Brute Force ............................................................................ 18
1.5.2. Thuật toán Karp-Rabin ............................................................................ 19
1.5.3. Thuật toán BM ( Boyer- Moor) ................................................................ 21
1.5.4. Các thuật toán khác.................................................................................. 24
1.6. Khớp chuỗi với otomat hữu hạn ...................................................................... 25
1.6.1. Otomat hữu hạn ....................................................................................... 25
1.6.1.1. Ôtômát hữu hạn đơn định DFA......................................................... 26
1.6.1.2. Ôtômát hữu hạn không đơn định NFA .............................................. 30
1.6.2. Otomat khớp chuỗi .................................................................................. 32


1.6.2.1. Giới thiệu ......................................................................................... 32
1.6.2.2. Thuật toán xây dựng Otomat so khớp chuỗi ...................................... 35
1.7. Kết luận chương ............................................................................................. 36
CHƯƠNG 2. THUẬT TOÁN SO KHỚP CHUỖI KNUTH-MORRIS-PRATT ......... 37
2.1. Thuật toán KMP ............................................................................................. 37
2.1.1. Giới thiệu thuật toán ................................................................................ 37
2.1.2. Bảng so sánh một phần ............................................................................ 41


-22.1.3. Độ phức tạp của thuật toán KMP ............................................................. 43
2.2. Thuật toán KMP mờ ....................................................................................... 44
2.2.1. Otomat so mẫu......................................................................................... 44
2.2.2. Thuật toán................................................................................................ 45
2.2.2.1 Thuật toán tạo lập TFuzz ................................................................... 45
2.2.2.2. Thuật toán tìm kiếm mẫu dựa vào bảng TFuzz ................................. 46
2.2.3. So sánh KMP và thuật toán KMP mờ ...................................................... 47
2.3. Thuật toán KMP - BM mờ .............................................................................. 48
2.3.1. Ý tưởng của thuật toán............................................................................. 48
2.4.2. Otomat mờ so mẫu................................................................................... 50
2.3.2.1. Giới thiệu ......................................................................................... 50
2.3.2.2. Hoạt động của otomat mờ so mẫu ..................................................... 50
2.3.3. Thuật toán tìm kiếm ................................................................................. 51
2.4. Kết luận chương ............................................................................................. 52
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...................................................................................................... 53
3.1. Bài toán tìm kiếm mẫu trên văn bản................................................................ 53
3.1.1. Tìm kiếm mẫu ......................................................................................... 53
3.1.2. Tìm kiếm thông tin .................................................................................. 54
3.1.2.1 Giới thiệu .......................................................................................... 54
3.1.2.2 Các mô hình tìm kiếm thông tin thường sử dụng ............................... 56

3.2. Mã nguồn mở Lucene ..................................................................................... 58
3.2.1. Giới thiệu................................................................................................. 58
3.2.2. Các bước sử dụng Lucene ........................................................................ 60
3.3. Ứng dụng tìm kiếm thông tin trên văn bản ...................................................... 61
3.4. Cài đặt chương trình thử nghiệm..................................................................... 62
3.4.1. Giải pháp, công nghệ sử dụng .................................................................. 62
3.4.2. Nội dung chương trình ............................................................................. 62
3.4.3. Kết quả thực nghiệm ................................................................................ 65
3.4.3.1. Giao diện chính của chương trình ..................................................... 65
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” .............................................................................................................. 66
3.5. Kết luận chương 3 .......................................................................................... 66
KẾT LUẬN ............................................................................................................... 67
TÀI LIỆU THAM KHẢO ......................................................................................... 68


-3-

DANH 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ừ



-4-

DANH MỤC CÁC HÌNH VẼ VÀ CÁC BẢNG
Hình 1.1. Sơ đồ chuyển của một DFA .............................................................. 27
Hình 1.2. Mô tả một DFA ................................................................................ 28
Bảng 1.1. Ví dụ hàm chuyển δ của DFA .......................................................... 29
Hình 1.3. Sơ đồ của một NFA .......................................................................... 30
Hình 1.4. Di chuyển chuỗi................................................................................ 31
Bảng 1.2. Ví dụ hàm chuyển trạng thái δ của NFA........................................... 32
Hình1.5. Ví dụ so khớp chuỗi........................................................................... 33
Hình 1.6. Ví dụ otomat so khớp chuỗi .............................................................. 35
Bảng 2.1. Bảng so sánh một phần..................................................................... 42
Bảng 2.2. Thí dụ khác ...................................................................................... 42
Bảng 2.3. Trường hợp mẫu xấu nhất với thuật toán KMP ................................ 43
Bảng 2.4. Bảng next ......................................................................................... 46
Bảng 2.5. Bảng TFuzz ...................................................................................... 46
Bảng 2.6. Minh họa thí dụ ................................................................................ 47
Hình 2.1. Dịch chuyển con trỏ trên mẫu ........................................................... 47
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ờ
......................................................................................................................... 48
Hình 2.2. Ý tưởng chung của thuật toán KMP-BM mờ .................................... 49
Hình 3.1. Mô hình biểu diễn và so sánh thông tin............................................. 55
Hình 3.2. Mô hình không gian vec tơ ............................................................... 57
Bảng 3.1. Tính điểm số .................................................................................... 58
Hình 3.3. Mô hình đánh chỉ mục của Lucene ................................................... 59
Hình 3.4. Mô hình ứng dụng tìm kiếm thông tin văn bản ................................. 61
Hình 3.5. Giao diện chính của chương trình ..................................................... 65
Hình 3.6. Kết quả tìm kiếm của chương trình ................................................... 66



-5-

MỞ ĐẦ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óp
phầ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 con
ngườ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ối
lượ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 đến
hà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ực
của người sử dụng. Tuy nhiên, một trong những khó khăn con người gặp phải
trong việc khai thác thông tin là khả năng tìm chính xác thông tin họ cần trong
kho 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 được
phá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ìm
kiếm này là những sản phẩm thương mại và mã nguồn được giữ bí mật. Hoặc
các hệ thống tìm kiếm trên máy cá nhân như Windows Search, Google
Desktop… đã đá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
so 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ưng



-6-

rấ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áo
viên, tôi mạnh dạn nhận đề tài “So khớp chuỗi và thuật toán Knuth-MorrisPratt”.
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ệc
tì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ới
nộ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,
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, đánh
giá kết quả thử nghiệm.



-7-

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ụ.


-8-

CHƯƠNG 1. SO KHỚP CHUỖI
1.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ật
toán so khớp chuỗi là một trong những khâu cơ bản được sử dụng trong việc
triể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. Trong
nhiề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ột
mả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ột
chuỗ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ẫu
P[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
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ế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


-9-

đã 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ách
là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úp
suy 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 đơn
giả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ật
toán so khớp chuỗi đa mẫu Aho Corasick trong tài liệu “Communications of the
ACM 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 đơn
giả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ài
liệu IBM J. Res develop – vol 31 no.2.


- 10 -

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 toán so khớp chuỗi:
 Thuật toán cổ điển: là các thuật toán chủ yếu dựa vào sự so sánh
giữa các ký tự. Các thuật toán điển hình bao gồm Brute Force,
Naïve,…
 Thuật toán máy tự động hậu tố: là các thuật toá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ác
thuật toán điển hình bao gồm Knuth – Morris – Pratt, Boyer –
Moore, Horspool,…
 Thuật toán bit song song: là các thuật toán khai thác bản chất song
song của các dữ liệu bit để thực hiện các thao tác cùng lúc. Các
thuật toán điển hình bao gồm Shift – Or, …
 Thuật toán băm: là các thuật toá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 toán điển hình
bao gồm Karp – Rabin.
Độ phức tạp tính toá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 toá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 toá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
So khớp chuỗi là một trong những bài toán cơ bản của ngành Tin học. So
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 nhau
như:


- 11 -

 Chức năng search trong các trình soạn thảo văn bản và web
browser.
 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ần
mề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ác
dạ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ất
hiệ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 3
xâ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ủa
xâu yx và là khúc con hay xâu con (factor) của xâu yxz.
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ánh
vớ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, song


- 12 -

trong 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ấu
trú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ật
toá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 ra
mộ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
và Shift - Or.
Tiếp cận thứ hai sử dụng một “cửa sổ trượt” trên xâu S và so khớp mẫu
trong cửa sổ này. Tại mỗi vị trí trong cửa sổ, cần tìm một khúc cuối của cửa sổ
mà là khúc cuối của xâu mẫu P. Thuật toán BM là một điển hình cho tiếp cận

này và một biến thể đơn giản hoá của nó là Horspool.
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ại
mỗ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 =
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ụng
thuật toán so đơn mẫu nhanh nhất đối với mỗi từ khoá. Rõ ràng phương pháp
này không hiệu quả khi số lượng từ khoá lớn.


- 13 -

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, song
lại không hiệu quả trong thực hành. Một mở rộng của thuật toán Horspool là Set
Horspool. Cuối cùng là thuật toán Wu-Manber, một phương pháp pha trộn giữa
tiế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ột
khoảng xác định trước. Điều này thường được sử dụng trong các ứng dụng
sinh- tin học, chẳng hạn tìm mẫu PROSITE.
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ện
củ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ừ ba
hướng này được giải quyết bằng cách điều chỉnh lại thuật toán Shift - Or và
BNDM, trong đó có sử dụng cơ chế song song bit để mô phỏng otomat đa định,


- 14 -

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ăn
bản nào đó T[1..n], m<=n. Ví dụ: ta có thể tìm thấy vị trí của xâu “abc” trong
xâu “abcababc” là 1 và 6.
Phát biểu hình thức bài toá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 đều

nằ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ếp
cận ngây thơ (Naïve string search). Dưới đây là thủ tục đặc tả của phương pháp này:
NAÏVE_STRING_MATCHER (T, P)
1. n ← length [T]
2. m ← length [P]
3. for s ← 1 to n-m+1 do
4. j ← 1
5. while j ≤ m and T[s + j] = P[j] do
6. j ← j +1
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ợp
xấu nhất độ phức tạp là O(n.m), ví dụ như so khớp mẫu “”aaaab” trong xâu
“aaaaaaaaab”.


- 15 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 đánh
má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ỗi

gen 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 được
cá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 nay
cò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ều
nguyê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ên
người, địa chỉ…
- Thông tin người tìm đưa vào không chính xác, chỉ “đại loại”.
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í trong
văn bản khớp với mẫu, cho phép nhiều nhất k lỗi.


- 16 -

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 đầu
tiê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àm
củ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 ra
rấ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án
bit 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 so
khớ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
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ệu
quả nhất theo tiếp cận này là PEX và ABNDM. Trong PEX, mẫu được chia
thà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ớp
xấ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/m
nhỏ. Đố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 song
bit đượ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ướng


- 17 -

xấ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ức
chính qui có thể kể ra như: thuật toán dựa trên quy hoạch động cho biểu thức

chí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ệt
Nan” 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ạn
thả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ảo
Edit 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
xâ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ớn
thì sự khác nhau giữa hai xâu càng nhiều (hay độ tương tự càng nhỏ) và ngược
lại. Khoảng cách soạn thảo thường để kiểm tra chính tả hay tiếng nói. Tuỳ thuộc
và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ạn
thả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ự.


- 18 -

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 con
củ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ủa
hai 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à y
theo 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ự
cho đế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ũ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).
function IsMatch(const X: string; m: integer;
const Y: string; p: integer): boolean;
var i: integer;
begin
IsMatch := false;
Dec(p);
for i := 1 to m do
if X <> Y[p + i] then Exit;
IsMatch := true;
end;


- 19 -


procedure BF(const X: string; m: integer; const Y: string; n: integer);
var i: integer;
begin
for i := 1 to n - m + 1 do
if IsMatch(X, m, Y, i) then
Output(i); { Thông báo tìm thấy mẫu tại vị trí i của văn bản }
end;

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ì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 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.
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 ở đây là:
hash(w[i…i+m-1]) = h
= (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:
h = ((h – w*dm-1)*d + w[i+m]
Trong bài toán này ta có thể chọn d = 2 để tiện cho việc tính toán a*2
tương đương a shl 1. Và không chỉ thế ta chọn q = MaxLongint khi đó phép mod
q không cần thiết phải thực hiện vì sự tràn số trong tính toán chính là một phép
mod có tốc độ rất nhanh.
Việc chuẩn bị trong thuật toán Karp-Rabin có độ phức tạp O(m). Tuy vậy
thời gian tìm kiếm lại tỉ lệ với O(m*n) vì có thể có nhiều trường hợp hàm băm
của chúng ta bị lừa và không phát huy tác dụng. Nhưng đó chỉ là những trường
hợp đặc biệt, thời gian tính toán của thuật toán KR trong thực tế thường tỉ lệ với

O(n+m). Hơn nữa thuật toán KR có thể dễ dàng mở rộng cho các mẫu, văn bản


- 20 -

dạng 2 chiều, do đó khiến cho nó trở nên hữu ích hơn so với các thuật toán còn
lại trong việc xử lý ảnh.
procedure KR(const X: string; m: integer;
const Y: string; n: integer);
var
dM, hx, hy: longint;
i, j: integer;
begin
dM := 1;
for i := 1 to m - 1 do dM := dM shl 1;
hx := 0;
hy := 0;
for i := 1 to m do
begin
hx := (hx shl 1) + Ord(X);
hy := (hy shl 1) + Ord(Y);
end;
j := 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;


- 21 -

1.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ả cho
nhữ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ới
mộ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ệc
dị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ìm
kiế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ủa
S(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:


- 22 -

 Nế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ường
hợp (2a) sao cho khúc Pi+1-gPi+2-g....Pm-g dóng thẳng với khúc Skm+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ớn
nhấ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ính

bả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.
Thuật tính bảng dịch chuyển d2
procedure computed 2();
begin
for i: = 1 to m do d2i : = 2 *m- i;
j := m; k: = m+ 1;
while j > 0 do
begin


- 23 fj: = k;
while k <= m and Pj  Pi do
begin
d2k:= mind2k, m- j ;
k: = fk];
end;
j := j - 1; k := k - 1;
end;
for i: = 1 to k do d2i : = mind2i, m +k - i
j: = fk;
while k < = m do
begin
while k <=j do
begin
d2k := mind2k, j-k + m 
k := k + 1;
end;
j: = fj;

end;
end;

Thuật toán BM tìm sự xuất hiện của mẫu P trong xâu vào S
procedure BM();
var i, j: integer;
counter: integer;
begin
j:= m; counter: = 0;
while j <= n do
begin
i: = m;
while i >0 and Sj  Pi do
begin i: = i - 1; j: = j - 1; end;
if i: = 0 then
begin

Ghi nhận một lần xuất hiện mẫu tại vị trí j + 1;


- 24 counter: = counter + 1;
j := j + m + 1;
end;
else j: =j+ maxd1Sj, d2i;
end;
Ghi nhận counter;
end;

Độ phức tạp của thuật toán: Độ phức tạp thời gian là O(m + n) và độ phức
tạp không gian là O(m).

1.5.4. Các thuật toán khác

Một số thuật toán nêu trên chưa phải là tất cả các thuật toán tìm kiếm
chuỗi hiện có. Nhưng chúng đã đại diện cho đa số các tư tưởng dùng để giải bài
toán tìm kiếm chuỗi.
Cá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ạng
cải tiến (và cải lùi) của thuật toán Knuth-Morris-Pratt và thuật toán sử dụng
Automat như: Forward Dawg Matching, Apostolico-Crochemore, Not So Naive, …
Các thuật toán so sánh mẫu từ phải sang trái đều là các dạng của thuật
toán Boyer-Moore. Thuật toán BM là thuật toán tìm kiếm rất hiệu quả trên thực
tế nhưng độ phức tạp tính toán lý thuyết lại là O(m*n). Chính vì vậy những cải
tiến của thuật toán này cho độ phức tạp tính toán lý thuyết tốt như: thuật toán
Apostolico-Giancarlo đánh dấu lại những ký tự đã so sánh rồi để khỏi bị so sánh
lặp lại, thuật toán Turbo-BM đánh giá chặt chẽ hơn các thông tin trước để có thể
dịch được xa hơn và ít bị lặp, … Còn có một số cải tiến khác của thuật toán BM
không làm giảm độ phức tạp lý thuyết mà dựa trên kinh nghiệm để có tốc độ tìm
kiếm nhanh hơn trong thực tế. Ngoài ra, một số thuật toán kết hợp quá trình tìm
kiếm của BM vào hệ thống Automat mong đạt kết quả tốt hơn.
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à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


- 25 -

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 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ững
thuậ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ột
trong 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ển
mạ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.
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ường
hợ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ạch
thì được thiết kế theo cách này, vì thế chúng có thể được xem như hệ thống
trạ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ình
sọ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


×