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

Bài toán đối sánh mẫu sử dụng giải thuật di truyền (LV thạc sĩ)

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.01 MB, 71 trang )

ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CNTT VÀ TRUYỀN THÔNG

NGÂN HOÀNG MỸ LINH

BÀI TOÁN ĐỐI SÁNH MẪU SỬ DỤNG
GIẢI THUẬT DI TRUYỀN

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

THÁI NGUYÊN - 2015

Số hóa bởi Trung tâm Học liệu – ĐHTN




ĐẠI HỌC THÁI NGUYÊN
TRƢỜNG ĐẠI HỌC CNTT VÀ TRUYỀN THÔNG

NGÂN HOÀNG MỸ LINH

BÀI TOÁN ĐỐI SÁNH MẪU SỬ DỤNG
GIẢI THUẬT DI TRUYỀN
Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số: 60 48 01 01

LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH

Ngƣời hƣớng dẫn khoa học: TS. VŨ MẠNH XUÂN


THÁI NGUYÊN - 2015

Số hóa bởi Trung tâm Học liệu – ĐHTN




i

LỜI CAM ĐOAN
Tôi xin cam đoan luận văn này của tự bản thân tôi tìm hiểu, nghiên cứu dƣới
sự hƣớng dẫn của TS Vũ Mạnh Xuân. Các chƣơng trình thực nghiệm do chính bản
thân tôi lập trình, các kết quả là hoàn toàn trung thực. Các tài liệu tham khảo đƣợc
trích dẫn và chú thích đầy đủ.

TÁC GIẢ LUẬN VĂN

Ngân Hoàng Mỹ Linh

Số hóa bởi Trung tâm Học liệu – ĐHTN




ii

LỜI CẢM ƠN
Tôi xin bày tỏ lời cảm ơn chân thành tới tập thể các thầy cô giáo Viện công
nghệ thông tin – Viện Hàn lâm Khoa học và Công nghệ Việt Nam, các thầy cô giáo
Trƣờng Đại học Công nghệ thông tin và truyền thông - Đại học Thái Nguyên đã dạy

dỗ chúng tôi trong suốt quá trình học tập chƣơng trình cao học tại trƣờng.
Đặc biệt tôi xin bày tỏ lòng biết ơn sâu sắc tới thầy giáo TS Vũ Mạnh Xuân
đã quan tâm, định hƣớng và đƣa ra những góp ý, gợi ý, chỉnh sửa quý báu cho tôi
trong quá trình làm luận văn tốt nghiệp.
Cuối cùng, tôi xin chân thành cảm ơn các bạn bè đồng nghiệp, gia đình và
ngƣời thân đã quan tâm, giúp đỡ và chia sẻ với tôi trong suốt quá trình làm luận văn
tốt nghiệp.
Thái Nguyên, tháng 08 năm 2015

Ngân Hoàng Mỹ Linh

Số hóa bởi Trung tâm Học liệu – ĐHTN




iii

MỤC LỤC
MỞ ĐẦU .....................................................................................................................1
CHƢƠNG 1 MỘT SỐ THUẬT TOÁN ĐỐI SÁNH MẪU .......................................3
1.1. Giới thiệu về bài toán đối sánh mẫu.....................................................................3
1.2. Phát biểu bài toán .................................................................................................3
1.3. Một số thuật toán đối sánh mẫu cơ bản................................................................4
1.3.1. Thuật toán Brute Force......................................................................................4
1.3.2. Thuật toán Knuth-Morris-Pratt .........................................................................4
1.3.3. Thuật toán Automat hữu hạn.............................................................................5
1.3.4. Thuật toán Boyer-Moore ...................................................................................7
1.3.5. Thuật toán Karp-Rabin ....................................................................................10
1.3.6. Một số thuật toán khác ....................................................................................11

CHƢƠNG 2 GIỚI THIỆU VỀ GIẢI THUẬT DI TRUYỀN ...................................13
2.1. Tổng quan chung về giải thuật di truyền (GA) ..................................................13
2.1.1. Giới thiệu .........................................................................................................13
2.1.2. Các vấn đề cơ bản của GA ..............................................................................15
2.1.3. Sự khác biệt của GA với các giải thuật khác ..................................................18
2.2. Giải thuật di truyền kinh điển.............................................................................20
2.2.1. Giới thiệu .........................................................................................................20
2.2.2. Các toán tử di truyền .......................................................................................21
2.2.3. Các bƣớc quan trọng trong việc áp dụng giải thuật di truyền kinh điển. ........26
2.2.4. Ví dụ ................................................................................................................27
CHƢƠNG 3 BÀI TOÁN ĐỐI SÁNH MẪU SỬ DỤNG GIẢI THUẬT DI
TRUYỀN ...................................................................................................................30
3.1. Bài toán đối sánh mẫu trên một file văn bản......................................................30
3.1.1. Phân tích thuật toán .........................................................................................31
3.1.2. Các quá trình hoạt động của chƣơng trình ......................................................36
3.1.3. Kết quả và đánh giá .........................................................................................40
3.2. Bài toán đối sánh mẫu trên nhiều file văn bản ...................................................55

Số hóa bởi Trung tâm Học liệu – ĐHTN




iv

3.2.1. Phát biểu bài toán ............................................................................................55
3.2.2. Kết quả thử nghiệm .........................................................................................56
KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN ................................................................63
*) Kết luận .................................................................................................................63
*) Hƣớng nghiên cứu phát triển ................................................................................63

TÀI LIỆU THAM KHẢO .........................................................................................64

DANH MỤC THUẬT NGỮ, TỪ VIẾT TẮT, KÍ HIỆU
GA

Giải thuật di truyền

NST

Nhiễm sắc thể

Population

Quần thể

Pattern matching

Đối sánh mẫu

TSP

Bài toán ngƣời bán hàng

Số hóa bởi Trung tâm Học liệu – ĐHTN




v


DANH MỤC CÁC HÌNH VẼ
Hình 1.1 : Sơ đồ automat ............................................................................................6
Hình 1.2. Mis-match trong khi đang so sánh tại vị trí j ..............................................8
Hình 1.3. Good-suffix shift, trƣờng hợp u lại xuất hiện trong x .................................8
Hình 1.4. Good-suffix shift, trƣờng hợp chỉ có suffix của u xuất hiện trong x ..........8
Hình 1.5. Bad-character shift ......................................................................................9
Hình 1.6. ......................................................................................................................9
Hình 2.1. Sơ đồ giải thuật GA ...................................................................................14
Hình 3.1. Giao diện chƣơng trình .............................................................................40
Hình 3.2. Giao diện chƣơng trình mở rộng ...............................................................57

DANH MỤC BẢNG BIỂU
Bảng 2.1. Bảng quần thể khởi tạo ban đầu ...............................................................28
Bảng 3.1. Ví dụ về biểu diễn cá thể ..........................................................................36
Bảng 3.2. Kết quả chƣơng trình với độ chính xác 100% ..........................................42
Bảng 3.3. Kết quả chƣơng trình với độ chính xác 90% ............................................43
Bảng 3.4. Kết quả chƣơng trình với độ chính xác 80% ............................................44
Bảng 3.5. Kết quả chƣơng trình với tỉ lệ a – b: 0.5 – 0.5 ..........................................46
Bảng 3.6. Kết quả chƣơng trình với tỉ lệ a – b: 0.6 – 0.4 ..........................................46
Bảng 3.7. Kết quả chƣơng trình với tỉ lệ a – b: 0.8 – 0.2 ..........................................47
Bảng 3.8. Kết quả chƣơng trình với tỉ lệ a – b: 0.9 – 0.1 ..........................................48
Bảng 3.9. Kết quả chƣơng trình mở rộng với độ chính xác 100% ...........................58
Bảng 3.10. Kết quả chƣơng trình mở rộng với độ chính xác 90% ...........................59
Bảng 3.11. Kết quả chƣơng trình mở rộng với độ chính xác 80% ...........................60

Số hóa bởi Trung tâm Học liệu – ĐHTN





1

MỞ ĐẦU
Hiện nay, cùng với sự phát triển không ngừng của ngành khoa học máy tính
chính là việc hệ thống thông tin đƣợc lƣu trữ ngày càng đồ sộ. Đối với một kho
thông tin lớn nhƣ vậy, việc ngƣời dùng muốn tra cứu, truy vấn dữ liệu cũng ngày
càng khó khăn hơn. Bên cạnh đó, khi lƣợng thông tin phát triển quá nhiều, việc tổ
chức, quản lí chúng để làm sao kiểm soát đƣợc việc bùng nổ thông tin cũng là một
trong những vấn đề cần quan tâm của các nhà quản lí. Hiện nay đã có rất nhiều công
cụ truy vấn có thể hỗ trợ cho ngƣời dùng phần nào trong việc tìm kiếm:
* Công cụ tìm kiếm của wikipedia: Chỉ tìm ra tên tựa bài của văn bản nào
trùng hợp với từ khóa.
* Công cụ tìm kiếm của phần mềm ứng dụng Microsoft word: Công cụ
FIND cho phép ngƣời dùng tìm kiếm cụm từ nội bên trong một hồ sơ, văn bản.
* Công cụ tìm kiếm của hệ điều hành Microsoft Windows và Adobe Reader:
Cả hai công cụ này cho phép tìm kiếm các hồ sơ có chứa từ khóa trong một hồ sơ,
một thƣ mục hay trong các ổ đĩa của máy tính.
Tuy nhiên, các công cụ trên vẫn tồn tại những hạn chế nhất định.Trong khi
đó, công việc tìm kiếm, truy vấn dữ liệu làm sao để nhanh chóng và hiệu quả vẫn
đang là một vấn đề cấp thiết đang đƣợc rất nhiều ngƣời dùng quan tâm. Các thông
tin đƣợc lƣu trữ trên máy tính tuy lớn nhƣng đa số đều đƣợc lƣu dƣới dạng văn bản,
và mặc dù có rất nhiều công cụ tìm kiếm nhƣng cơ chế chung của chúng vẫn là dựa
trên phƣơng pháp sử dụng chuỗi. Đối sánh mẫu (pattern matching) là một bài toán
quan trọng trong việc hỗ trợ tìm kiếm văn bản đƣợc áp dụng để tìm một xâu khớp
với mẫu trong văn bản hoặc tìm các văn bản có chứa mẫu.
Giải thuật di truyền (GA – Genetic Algorithms) là một kỹ thuật cơ bản của
tính toán mềm nhằm tìm kiếm giải pháp thích hợp cho các bài toán tối ƣu tổ hợp, nó
vận dụng các nguyên lý của tiến hóa nhƣ lai ghép, đột biến, chọn lọc. Ngày nay,

Số hóa bởi Trung tâm Học liệu – ĐHTN





2

giải thuật di truyền đƣợc ứng dụng rộng rãi trên mọi lĩnh vực nhƣ tin sinh học, khoa
học máy tính, trí tuệ nhân tạo, tài chính và một số ngành khác.
Đề tài “Bài toán đối sánh mẫu sử dụng giải thuật di truyền” nhằm mục
đích nghiên cứu bài toán đối sánh mẫu, giải thuật di truyền và ứng dụng của giải
thuật di truyền trong đối sánh mẫu và tìm kiếm văn bản.
Ngoài phần mở đầu và kết luận, luận văn gồm có 3 chƣơng:
- Chƣơng 1: Một số thuật toán đối sánh mẫu
- Chƣơng 2: Giới thiệu về giải thuật di truyền
- Chƣơng 3: Bài toán đối sánh mẫu sử dụng giải thuật di truyền
Phƣơng pháp nghiên cứu
Trong luận văn, học viên đã sử dụng các phƣơng pháp nghiên cứu chính sau:
- Phƣơng pháp nghiên cứu lý thuyết: Tìm tòi, tổng hợp tài liệu, hệ thống lại
các kiến thức, tìm hiểu các khái niệm, thuật toán sử dụng trong luận văn.
- Lập trình thử nghiệm: Luận văn sử dụng ngôn ngữ lập trình là Visual
Studio C# 2012 để viết chƣơng trình thử nghiệm.
- Các phƣơng pháp so sánh.

Số hóa bởi Trung tâm Học liệu – ĐHTN




3


CHƢƠNG 1
MỘT SỐ THUẬT TOÁN ĐỐI SÁNH MẪU
Chương này giới thiệu và phát biểu bài toán đối sánh mẫu, tìm hiểu một số
thuật toán đã và đang được sử dụng để giải bài toán đối sánh mẫu.
1.1. Giới thiệu về bài toán đối sánh mẫu
Trong khoa học máy tính, đối sánh mẫu là hành động kiểm tra xem một trình
tự các kí tự có hiện diện trong một xâu cho trƣớc hay không. Ngƣợc lại với nhận
dạng mẫu, đối sánh mẫu thƣờng có sự chính xác hơn. Dạng phổ biến nhất của bài
toán đối sánh mẫu là: Cho trƣớc nguồn tìm kiếm là một tập D các văn bản, cho một
câu hỏi dạng văn bản q (thƣờng là một từ, một xâu văn bản ngắn), hãy tìm tất cả các
văn bản thuộc D mà có chứa q. Trong nhiều trƣờng hợp (chẳng hạn, tìm kiếm thông
qua máy tìm kiếm) q còn đƣợc gọi là “truy vấn” và bài toán còn có tên gọi là “tìm
kiếm theo truy vấn”. Để tìm đƣợc các văn bản có chứa văn bản truy vấn q, hệ thống
tìm kiếm cần phải kiểm tra văn bản truy vấn q có là một xâu con của các văn bản
thuộc tập D hay không (sánh mẫu) và đƣa ra các văn bản đáp ứng. Trong nhiều
trƣờng hợp, bài toán còn đòi hỏi tìm tất cả các vị trí của các xâu con trong văn bản
trùng với q. Đồng thời, điều kiện tìm kiếm có thể đƣợc làm “xấp xỉ” theo nghĩa văn
bản kết quả có thể không cần chứa q mà chỉ cần “liên quan” tới q, nghĩa là có xâu
con trong văn bản xấp xỉ q. Có thể thấy, các máy tìm kiếm sử dụng cả cơ chế tìm
kiếm xấp xỉ khi mà văn bản kết quả tìm kiếm không chứa hoàn toàn chính xác văn
bản truy vấn .[6]
1.2. Phát biểu bài toán
Đối sánh mẫu là một bài toán cơ bản trong xử lý văn bản, bài toán yêu cầu
tìm ra một hoặc nhiều vị trí xuất hiện của mẫu q trên một văn bản S. Mẫu q và văn
bản S là các chuỗi có độ dài M và N (M ≤ N); q và S là các xâu ký tự trên cùng một
bảng chữ cái Σ có δ ký tự. Bài toán sánh mẫu tổng quát đƣợc phát biểu nhƣ sau:

Số hóa bởi Trung tâm Học liệu – ĐHTN





4

“Cho mẫu q độ dài M và văn bản S độ dài N trên cùng bảng chữ Σ. Tìm
một (hoặc tất cả) các lần xuất hiện của mẫu q trong S”.
Trong bài toán tìm kiếm văn bản trên tập văn bản D, bài toán sánh mẫu đƣợc
thực hiện đối với mọi cặp gồm mẫu q và mọi văn bản d

D. Trong trƣờng hợp độ

dài N của d rất lớn và số lƣợng văn bản trong D rất nhiều thì thời gian tìm kiếm văn
bản phù hợp với truy vấn q sẽ là rất tốn kém.
1.3. Một số thuật toán đối sánh mẫu cơ bản
1.3.1. Thuật toán Brute Force
Thuật toán Brute Force là dạng thuật toán tìm kiếm tuần tự, nó 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 Brute Force 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).
Thuật toán đƣợc xây dựng đơn giản, nhƣng với văn bản lớn thì thuật toán
này tỏ ra không hiệu quả.
1.3.2. Thuật toán Knuth-Morris-Pratt
Thuật toán đƣợc phát minh năm 1977 bởi hai giáo sƣ của ĐH Stanford, Hoa
Kỳ (một trong số ít các trƣờng đại học xếp hàng số một về khoa học máy tính trên
thế giới, cùng với trƣờng MIT, CMU cũng của Hoa Kỳ và Cambrige của Anh) là
Donal Knuth và Vaughan Ronald Pratt. Giáo sƣ Knuth (giải Turing năm 1971) còn
rất nổi tiếng với cuốn sách “Nghệ thuật lập trình” (The Art of Computer
Programming), hiện nay đã có đến tập 6. Ba tập đầu tiên đã xuất bản ở Việt Nam, là
một trong những cuốn sách gối đầu giƣờng cho bất kì lập trình viên nói riêng và

những ai yêu thích lập trình máy tính nói chung trên toàn thế giới. Thuật toán này
còn có tên là KMP, tức là lấy tên viết của ba ngƣời đồng phát minh ra nó, chữ “M”
là chỉ giáo sƣ J.H.Morris, cũng là một giáo sƣ rất nổi tiếng trong ngành khoa học
máy tính.

Số hóa bởi Trung tâm Học liệu – ĐHTN




5

Ý tƣởng chính của phƣơng pháp này nhƣ sau: Trong quá trình tìm kiếm vị trí
của mẫu P trong xâu gốc T, nếu tìm thấy một vị trí sai, ta chuyển sang vị trí tìm
kiếm tiếp theo và quá trình tìm kiếm này sẽ đƣợc tận dụng thông tin từ quá trình tìm
kiếm trƣớc để tránh việc phải xét lại các trƣờng hợp không cần thiết.
Thuật toán Knuth-Morris-Pratt là thuật toán có độ phức tạp tuyến tính đầu
tiên đƣợc phát hiện ra, nó dựa trên thuật toán Brute force với ý tƣởng lợi dụng lại
những thông tin của lần thử trƣớc cho lần sau. Trong thuật toán Brute force vì chỉ
dịch cửa sổ đi một ký tự nên có đến m-1 ký tự của cửa sổ mới là những ký tự của
cửa sổ vừa xét. Trong đó có thể có rất nhiều ký tự đã đƣợc so sánh giống với mẫu
và bây giờ lại nằm trên cửa sổ mới nhƣng đƣợc dịch đi về vị trí so sánh với mẫu.
Việc xử lý những ký tự này có thể đƣợc tính toán trƣớc rồi lƣu lại kết quả. Nhờ đó
lần thử sau có thể dịch đi đƣợc nhiều hơn một ký tự, và giảm số ký tự phải so sánh
lại.
Xét lần thử tại vị trí j, khi đó cửa sổ đang xét bao gồm các ký tự y[j…j+m-1],
giả sử sự khác biệt đầu tiên xảy ra giữa hai ký tự x[i] và y[j+i-1].
Khi đó x[1…i] = y[j…i+j-1] = u và a = x[i]

y[i+j] = b. Với trƣờng hợp


này, dịch cửa sổ phải thỏa mãn v là phần đầu của xâu x khớp với phần đuôi của xâu
u trên văn bản. Hơn nữa ký tự c ở ngay sau v trên mẫu phải khác với ký tự a. Trong
những đoạn nhƣ v thoả mãn các tính chất trên ta chỉ quan tâm đến đoạn có độ dài
lớn nhất.
Thuật toán Knuth-Morris-Prath sử dụng mảng Next để lƣu trữ độ dài lớn
nhất của xâu v trong trƣờng hợp xâu u=x[1…i-1]. Mảng này có thể tính trƣớc với
chi phí về thời gian là O(m).
Thuật toán này có chi phí về thời gian là O(m+n) với nhiều nhất là 2n-1 lần
số lần so sánh kí tự trong quá trình tìm kiếm.
1.3.3. Thuật toán Automat hữu hạn
Trong thuật toán này, quá trình tìm kiếm đƣợc đƣa về một quá trình biến đổi
trạng thái automat. Hệ thống automat trong thuật toán DFA sẽ đƣợc xây dựng dựa
Số hóa bởi Trung tâm Học liệu – ĐHTN




6

trên xâu mẫu. Mỗi trạng thái (nút) của automat lúc sẽ đại diện cho số ký tự đang
khớp của mẫu với văn bản. Các ký tự của văn bản sẽ làm thay đổi các trạng thái. Và
khi đạt đƣợc trạng cuối cùng có nghĩa là đã tìm đƣợc một vị trí xuất hiện ở mẫu.
Thuật toán này có phần giống thuật toán Knuth-Morris-Pratt trong việc nhảy
về trạng thái trƣớc khi gặp một ký tự không khớp, nhƣng thuật toán DFA có sự
đánh giá chính xác hơn vì việc xác định vị trí nhảy về dựa trên ký tự không khớp
của văn bản (trong khi thuật toán KMP lùi về chỉ dựa trên vị trí không khớp).
Ví dụ: Ta có xâu mẫu là GCAGAGAG với hệ automat sau :

Hình 1.1 : Sơ đồ automat


Với ví dụ ở trên ta có:
Nếu đang ở trạng thái 2 gặp ký tự A trên văn bản sẽ chuyển sang trạng thái 3.
Nếu đang ở trạng thái 6 gặp ký tự C trên văn bản sẽ chuyển sang trạng thái 2.
Trạng thái 8 là trạng thái cuối cùng, nếu đạt đƣợc trạng thái này có nghĩa là
đã tìm thấy một xuất hiện của mẫu trên văn bản.
Trạng thái 0 là trạng thái mặc định (các liên kết không đƣợc biểu thị đều chỉ
về trạng thái này), ví dụ ở nút 5 nếu gặp bất kỳ ký tự nào khác G thì đều chuyển về
trạng thái 0.
Số hóa bởi Trung tâm Học liệu – ĐHTN




7

Việc xây dựng hệ automat khá đơn giản khi đƣợc cài đặt trên ma trận kề. Khi
đó thuật toán có thời gian xử lý là O(n); thời gian và bộ nhớ để tạo ra hệ automat là
O(m* ) (tùy cách cài đặt).
1.3.4. Thuật toán Boyer-Moore
Thuật toán Boyer Moore là thuật toán tìm kiếm chuỗi rất có hiệu quả trong
thực tiễn, các dạng khác nhau của thuật toán này thƣờng đƣợc cài đặt trong các
chƣơng trình soạn thảo văn bản.
Các đặc điểm chính của nó:
-

Thực hiện việc so sánh từ phải sang trái.

-


Giai đoạn tiền xử lý (preprocessing) có độ phức tạp thời gian và không gian
là O(m + ).

-

Giai đoạn tìm kiếm có độ phức tạp O(m*n).

-

So sánh tối đa 3n kí tự trong trƣờng hợp xấu nhất đối với mẫu không có chu
kỳ (non periodic pattern).

-

Độ phức tạp O(m/n) trong trƣờng hợp tốt nhất.
Trong cài đặt ta dùng mảng bmGs để lƣu cách dịch 1, mảng bmBc để lƣu

phép dịch thứ 2 (ký tự không khớp).
Thuật toán sẽ quét các kí tự của mẫu (pattern) từ phải sang trái, bắt đầu từ
phần tử cuối cùng.
Trong trƣờng hợp mis-match (hoặc là trƣờng hợp đã tìm đƣợc 01 đoạn khớp
với mẫu), nó sẽ dùng 2 hàm đƣợc tính toán trƣớc để dịch cửa sổ sang bên phải. Hai
hàm dịch chuyển này đƣợc gọi là good-suffix shift ( còn đƣợc biết với cái tên phép
dịch chuyển khớp) và bad-character shift (hay phép dịch chuyển xuất hiện).
Đối với mẫu x[0…m-1], ta dùng 01 biến số chỉ số i chạy từ cuối về đầu, đối
với chuỗi y[0…n-1], ta dùng 01 biến j để chốt ở phía đầu.
Giả sử trong quá trình so sánh, ta gặp 1 mis-match tại vị trí x[i] = a của mẫu
và y[i+j] = b trong khi đang thử khớp tại vị trí j.

Số hóa bởi Trung tâm Học liệu – ĐHTN





8

Hình 1.2. Mis-match trong khi đang so sánh tại vị trí j

Khi đó, x[i+1...m-1] = y[j+i+1…j+m-1] = u và x[i] ≠ y[i+j]. Bây giờ ta đi xét
đối với từng trƣờng hợp, 2 hàm trên sẽ thực hiện việc di chuyển nhƣ thế nào:
-

Phép dịch chuyển good-suffix shift sẽ dịch cửa sổ sang bên phải cho
đến khi gặp 1 kí tự khác với x[i] trong trƣờng hợp đoạn u lại xuất hiện
trong x.

Hình 1.3. Good-suffix shift, trường hợp u lại xuất hiện trong x

-

Nếu đoạn u không xuất hiện lại trong x, mà chỉ có 1 phần cuối (suffix)
của u khớp với phần đầu (prefix) của x, thì ta sẽ dịch 1 đoạn sao cho
phần suffix dài nhất v của y[j+i+1…j+m-1] khớp với prefix của x.

Hình 1.4. Good-suffix shift, trường hợp chỉ có suffix của u xuất hiện trong x

-

Phép dịch chuyển bad-character shift sẽ khớp kí tự y[i+j] với 1 kí tự
(bên trái nhất) trong đoạn x[0…m-2].


Số hóa bởi Trung tâm Học liệu – ĐHTN




9

Hình 1.5. Bad-character shift

-

Nếu y[i+j] không xuất hiện trong x, ta thấy ngay rằng không có xuất
hiện nào của x trong y mà chứa y[i+j], do đó ta có thể đặt cửa sổ ngay
sau y[i+j], tức là y[j+i+1].

Hình 1.6.

Thuật toán Boyer-Moore sẽ chọn đoạn dịch chuyển dài nhất trong 2 hàm
dịch chuyển good-suffix và bad-character shift. Hai hàm này đƣợc định nghĩa nhƣ
sau: Hàm good-suffix shift đƣợc lƣu trong bảng bmGs có kích thƣớc m+1. Ta định
nghĩa 2 điều kiện sau:
+ Cs(i,s): với mỗi k mà i < k < m, s ≥ k hoặc x[k-s] = x[k]
+ Co(i,s): nếu s < i thì x[i-s] ≠ x[i].
Khi đó, với 0 ≤ i < m: bmGs[i+1] = min{s>0: Cs(i,s) and Co(i,s) hold}
Và chúng ta định nghĩa bmGs[0] là độ dài chu kỳ của x. Việc tính toán bảng
bmGs sử dụng 1 bảng suff đƣợc định nghĩa nhƣ sau:
Với 1 ≤ i < m, suff[i] = max{k: x[i-k+1…i] = x[m-k…m-1]}
Hàm bad-character shift đƣợc lƣu trong bảng bmBc có kích thƣớc . Cho c
trong ∑: bmBc[c] = min{i: 1 ≤ i

ngƣợc lại.

Số hóa bởi Trung tâm Học liệu – ĐHTN




10

Bảng bmGs và bmBc đƣợc tính toán trong thời gian O(m+ ) trƣớc khi thực
hiện tìm kiếm và cần 1 không gian phụ là O(m+ ). Giai đoạn tìm kiếm có độ phức
tạp thời gian bậc 2 nhƣng lại chỉ có 3n phép so sánh khi tìm kiếm 1 chuỗi không có
chu kì. Đối với việc tìm kiếm trong một khối lƣợng lớn các chữ cái, thuật toán có
thể thực hiện với một tốc độ rất nhanh. Khi tìm kiếm chuỗi am-1 trong bn chuỗi, thuật
toán chỉ sử dụng O(m/n) phép so sánh, là chi phí thấp nhất của các thuật toán tìm
kiếm hiện đại có thể đạt đƣợc [2].
1.3.5. Thuật toán Karp-Rabin
Thuật toán mang tên hai nhà khoa học phát minh ra nó là Richard M.Karp
(sinh năm 1931,ngƣời Mỹ) và Michael O.Rabin (sinh năm 1931,ngƣời Đức). Tƣ
tƣởng chính của phƣơng pháp này là sử dụng phƣơng pháp băm (hashing). Tức là
mỗi một xâu sẽ đƣợc gán với một giá trị của hàm băm (hash function). Ví dụ, có
xâu “hello” đƣợc gán với giá trị bằng 5, và hai xâu đƣợc gọi là bằng nhau nếu giá trị
hàm băm của nó bằng nhau.Nhƣ vậy, thay vì việc phải đối sánh các xâu con của T
với mẫu P, ta chỉ cần so sánh giá trị hàm băm của chúng và đƣa ra kết luận.
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. Chẳng hạn hàm băm đƣợc chọn ở đây
là: hash(w[i…i+m-1]) = h = (w[i]*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 giản nhƣ sau:
h = ((h – w[i]*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.
Thuật toán Karp-Rabin sử dụng hàm băm tính toán nhanh, không phụ thuộc
vào chiều dài chuỗi cần tìm kiếm; tiết kiệm bộ nhớ vì không lƣu trữ nhiều kết quả

Số hóa bởi Trung tâm Học liệu – ĐHTN




11

tìm kiếm trƣớc đó; không sử dụng các phƣơng pháp nhận biết, loại trừ các kết quả
xấu cho các bƣớc tiếp theo.
1.3.6. Một số 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 đối sánh mẫu
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 đối
sánh.
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ủ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. Phải nói lại rằng 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 chia mẫu thành hai đoạn,
đầu tiên kiểm tra đoạn ở bên phải rồi mới kiểm tra đoạn bên trái với chiều từ
trái sang phải.

-

Thuật toán Colussi và Galil-Giancarlo lại chia mẫu thành hai tập và tiến hành
tìm kiếm trên mỗi tập với một chiều khác nhau.

-

Thuật toán Optimal Mismatch và Maximal Shift sắp xếp thứ tự mẫu dựa vào
mật độ của ký tự và khoảng dịch đƣợc.

Số hóa bởi Trung tâm Học liệu – ĐHTN




12

-

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 định 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ỳ:
Đó là các thuật toán có thể tiến hành so sánh mẫu với cửa sổ theo một thứ tự

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
chiêu ký tự không khớp của thuật toán Boyer-Moore. Có lẽ loại thuật toán này dựa
trên ý tƣởng càng so sánh loạn càng khó kiếm test chết. Vì dựa hoàn toàn trên vị trí
đƣợc lấy ngẫu nhiên nên kết quả chỉ là mong đợi ngẫu nhiên chứ không có một cơ
sở toán học nào để lấy vị trí ngẫu nhiên sao cho khả năng xuất hiện mẫu cần tìm là
lớn.
Các thuật toán đối sánh mẫu trình bày ở trên đã đƣợc sử dụng phổ biến, tƣ
tƣởng chủ đạo vẫn là tìm kiếm từ đầu văn bản tới cuối văn bản. Trong đề tài này
hƣớng đến một cách tiếp cận mới là sử dụng giải thuật di truyền thuộc lớp giải thuật
xác suất, phƣơng pháp mô phỏng theo quá trình chọn lọc tự nhiên của sinh vật. Từ
một quần thể ban đầu, các cá thể đƣợc đánh giá qua sự thích nghi tốt hay xấu, từ đó
quyết định cá thể đó có thể tồn tại hay không. Áp dụng với bài toán này, từ một tập
các vị trí trong văn bản tìm kiếm ban đầu, các vị trí trong tập ban đầu đƣợc chọn lọc
qua nhiều bƣớc, các vị trí tốt đƣợc giữ lại và tiến hóa tới khi đạt độ chính xác tốt
nhất, đồng thời các vị trí xấu bị loại bỏ. Trong các chƣơng tiếp theo sẽ trình bày cụ
thể về giải thuật di truyền và cài đặt thực nghiệm giải thuật di truyền giải bài toán
đối sánh mẫu.

Số hóa bởi Trung tâm Học liệu – ĐHTN




13

CHƢƠNG 2

GIỚI THIỆU VỀ GIẢI THUẬT DI TRUYỀN
Chương này giới thiệu tổng quan về giải thuật di truyền. Các toán tử của
giải thuật di truyền và những điểm khác biệt của giải thuật di truyền với các giải
thuật khác.[1],[3],[4],[5],[9]
2.1. Tổng quan chung về giải thuật di truyền (GA)
2.1.1. Giới thiệu
Lí thuyết về giải thuật di truyền trong những năm qua đã phát triển rất mạnh
và theo nhiều hƣớng tiếp cận khác nhau. Sở dĩ nhƣ vậy là do tính hiệu quả của giải
thuật này so với các giải thuật khác. Giải thuật di truyền đã thể hiện rõ tính ƣu việt
trong tìm kiếm tiến hoá và tính mềm dẻo trong khả năng thích nghi với yêu cầu của
bài toán đặt ra, đặc biệt đối với các bài toán khó, có không gian tìm kiếm lớn và có
nhiều ràng buộc phức tạp.
Giải thuật di truyền đƣợc J.H.Holland và các đồng nghiệp của ông tại trƣờng
đại học Michigan giới thiệu năm 1975, và đã có rất nhiều công trình nghiên cứu về
lí thuyết cũng nhƣ ứng dụng của nó đƣợc công bố trong những năm gần đây. GA
đƣợc ứng dụng trong nhiều lĩnh vực khác nhau nhƣ: Sinh học, khoa học cơ bản,
khoa học máy tính, trí tuệ nhân tạo.
Giải thuật di truyền là kỹ thuật phỏng theo quá trình thích nghi tiến hoá của
các quần thể sinh học dựa trên học thuyết Darwin. Cũng nhƣ các thuật toán tiến hoá
khác, GA đƣợc hình thành dựa trên một quan niệm đƣợc coi là một tiên đề phù hợp
với thực tế khách quan. Đó là quan niệm “quá trình tiến hoá tự nhiên là quá trình
hoàn hảo nhất, hợp lý nhất và tự nó đã mang tính tối ưu”. Quá trình tiến hoá thể
hiện tối ƣu ở chỗ thế hệ sau bao giờ cũng tốt hơn thế hệ trƣớc. Tƣ tƣởng của GA là
mô phỏng các hiện tƣợng tự nhiên: kế thừa và đấu tranh sinh tồn.

Số hóa bởi Trung tâm Học liệu – ĐHTN





14

Các giả thuyết (lời giải) trong GA thƣờng đƣợc mô tả bằng chuỗi các bit,
việc hiểu chuỗi các bit này tuỳ thuộc vào ứng dụng, ý tƣởng các giả thuyết cũng có
thể mô tả bằng các biểu thức kí hiệu hoặc ngay cả các chƣơng trình máy tính.
GA thuộc lớp các giải thuật xác suất nhƣng lại rất khác các giải thuật ngẫu
nhiên vì chúng kết hợp các phần tử tìm kiếm trực tiếp và ngẫu nhiên. GA lập luận
mang tính chất ngẫu nhiên để tìm giải pháp tối ƣu cho những vấn đề phức tạp, thay
vì xác định nhƣ toán học giải tích. Trong GA, tập các lời giải của bài toán đƣợc gọi
là quần thể và việc tìm kiếm giả thuyết thích hợp đƣợc bắt đầu với một quần thể
khởi tạo ban đầu. Các cá thể của quần thể ban đầu khơi nguồn cho các quần thể ở
thế hệ tiếp theo bằng các hoạt động tiến hoá đó là chọn lọc, lai ghép và đột biến –
tất cả đều là ngẫu nhiên.
Sơ đồ thuật toán của GA đƣợc thể hiện ở hình vẽ dƣới đây:

Hình 2.1. Sơ đồ giải thuật GA

Số hóa bởi Trung tâm Học liệu – ĐHTN




15

1. [Bắt đầu] Nhận các tham số cho thuật toán.
2. [Khởi tạo] Sinh ngẫu nhiên một quần thể gồm n cá thể (là n lời giải cho bài toán).
3. [Quần thể mới] Tạo quần thể mới bằng cách lặp lại các bƣớc sau cho đến khi quần
thể mới hoàn thành:
a. [Thích nghi] Ƣớc lƣợng độ thích nghi eval(x) của mỗi cá thể
b. [Chọn lọc] Chọn hai cá thể bố mẹ từ quần thể cũ theo độ thích nghi của chúng (cá

thể có độ thích nghi càng cao thì càng có nhiều khả năng đƣợc chọn)
c. [Lai ghép] Với một xác suất lai ghép đƣợc chọn, lai ghép hai cá thể bố mẹ để tạo
ra một cá thể mới
d. [Đột biến] Với một xác suất đột biến đƣợc chọn, biến đổi cá thể mới
e. [Tạo lại quần thể mới]
4. [Chọn kết quả] Nếu điều kiện dừng đƣợc thỏa mãn thì thuật toán kết thúc và trả về
lời giải tốt nhất trong quần thể hiện tại.Nếu không, quay trở lại bƣớc [3].

2.1.2. Các vấn đề cơ bản của GA
2.1.2.1. Mã hoá cá thể
Trong giải thuật GA sử dụng một số thuật ngữ của di truyền học nhƣ: nhiễm
sắc thể (NST), quần thể (population), gen,… NST đƣợc tạo thành từ các gen (đƣợc
biểu diễn bằng một chuỗi tuyến tính). Mỗi gen mang một số đặc trƣng và có vị trí
nhất định trong NST. Mỗi NST sẽ đƣợc mã hoá để biểu diễn lời giải của bài toán.
Cách mã hoá NST đƣợc đánh giá là một trong hai yếu tố quyết định trong việc xây
dựng giải thuật GA.
a) Mã hoá nhị phân
Trong tất cả các phƣơng pháp mã hoá thì mã hoá nhị phân là phƣơng pháp
đơn giản và ra đời sớm nhất. Trong mã hoá nhị phân, mỗi NST là một chuỗi nhị
phân, mỗi bit trong nó có thể biểu diễn một đặc tính của lời giải.
Ví dụ: Hai NST 1 và 2 có độ dài 10:
NST 1: 1 0 1 0 0 1 0 1 0 0

Số hóa bởi Trung tâm Học liệu – ĐHTN

;

NST 2: 1 1 0 0 0 1 1 1 0 1





16

Mã hoá nhị phân tuy đơn giản và phổ biến nhƣng nó có một đặc điểm là có
thể sẽ tạo ra không gian mã hoá lớn hơn giá trị của NST, hơn nữa có thể xảy ra
trƣờng hợp các toán tử lai ghép và đột biến tạo ra các cá thể không nằm trong không
gian tìm kiếm và đòi hỏi phải có những phƣơng pháp sửa chữa để tạo ra cá thể nằm
trong không gian tìm kiếm. Do đó, với nhiều bài toán thì mã hoá nhị phân không
phải là giải pháp tối ƣu, điển hình là bài toán TSP.
b) Mã hoá hoán vị
Mã hoá hoán vị có thể đƣợc sử dụng trong các bài toán liên quan đến thứ tự,
nhƣ bài toán du lịch hay bài toán lập lịch.
Trong mã hoá hoán vị, mỗi NST là một chuỗi các số biểu diễn một trình tự.
Ví dụ: Có 2 NST 1 và 2:
NST 1: 1 5 4 3 2 6 7 8 9
NST 2: 9 1 7 3 8 5 6 4 2
Mã hoá hoán vị phù hợp với các bài toán có liên quan đến thứ tự. Đối với các
bài toán này, việc thao tác trên các NST chính là hoán đổi vị trí các số trong chuỗi
đã cho nhằm làm thay đổi trình tự của nó.
Ví dụ: Trong bài toán ngƣời du lịch, để biểu diễn một cách đi của ngƣời du lịch thì
dùng một NST mà trình tự các số trong chuỗi đó cho biết thứ tự các thành phố mà
ngƣời du lịch đi qua.
c) Mã hoá theo giá trị
Mã hoá trực tiếp theo giá trị có thể đƣợc dùng trong các bài toán sử dụng giá
trị phức tạp nhƣ trong số thực. Trong đó, mỗi NST là một chuỗi các giá trị. Các giá
trị có thể là bất cứ điều gì liên quan đến bài toán, từ số nguyên, số thực, kí tự cho
đến các đối tƣợng phức tạp hơn.
Ví dụ: Có 2 NST 1 và 2:
NST 1: 3.54


5.32

0.67

1.64

NST 2: (back)

(back)

(right)

(left)

Số hóa bởi Trung tâm Học liệu – ĐHTN




17

Mã hoá theo giá trị thƣờng dùng cho các bài toán đặc biệt. Trong cách mã
hoá này ta thƣờng phải phát triển các toán tử đột biến và lại ghép cho phù hợp với
từng bài toán.
2.1.2.2. Khởi tạo quần thể ban đầu
Quần thể là một tập hợp các cá thể cùng sống trong một môi trƣờng sống và
có chung một số đặc điểm nào đó. Trong GA, ta quan niệm “quần thể là tập các lời
giải của bài toán”.
Quần thể ban đầu ảnh hƣởng khá nhiều đến hiệu quả giải thuật, tuy nhiên

trong nhiều bài toán thì quần thể ban đầu thƣờng đƣợc lựa chọn ngẫu nhiên.
Thƣờng kích thƣớc quần thể phụ thuộc vào kích thƣớc mã hoá.
Ví dụ: Nếu có NST 32 bit, nên tạo quần thể có kích thƣớc từ 16 trở lên.
Kích thƣớc quần thể cho biết có bao nhiêu cá thể trong quần thể trong mỗi
thế hệ. Các nghiên cứu và thử nghiệm cho thấy kích thƣớc quần thể không nên quá
bé hoặc quá lớn. Nếu có ít cá thể thì sẽ dẫn đến việc làm giảm không gian tìm kiếm,
khi đó sẽ dễ rơi vào cục bộ địa phƣơng, nhƣ vậy sẽ xảy ra trƣờng hợp bỏ qua các lời
giải tốt. Ngƣợc lại, nếu kích thƣớc quần thể quá lớn sẽ dẫn đến việc chi phí về thời
gian sẽ tốn hơn, ảnh hƣởng đến hiệu quả tính toán của giải thuật. Các nghiên cứu
cũng đã chỉ ra rằng không có lợi khi tăng kích thƣớc quần thể lên quá một giới hạn
cho phép.
2.1.2.3. Hàm thích nghi (hàm mục tiêu)
Một cách trực quan, hàm thích nghi giống nhƣ là một hàm đánh giá độ tốt
của cá thể. Nó dùng để so sánh giữa hai cá thể cá thể nào tốt hơn. Sau mỗi thế hệ
tiến hoá, giải thuật dùng hàm này để quyết định giữ lại hay loại bỏ các lời giải; cũng
nhƣ trong quá trình lai ghép hay chọn lọc, cá thể nào có giá trị hàm mục tiêu tốt hơn
sẽ đƣợc ƣu tiên chọn lựa.

Số hóa bởi Trung tâm Học liệu – ĐHTN




18

2.1.2.4. Chọn lọc
Trong tự nhiên, quá trình chọn lọc và đấu tranh sinh tồn đã làm thay đổi các
cá thể trong quần thể. Những cá thể tốt, thích nghi với điều kiện sống thì có khả
năng sống sót cao hơn. Các cá thể không thích nghi đƣợc với điều kiện sống thì dần
mất đi. Dựa vào nguyên lý của quá trình chọn lọc và đấu tranh trong tự nhiên, chọn

lọc trong GA chính là quá trình chọn các cá thể có độ thích nghi (cụ thể là giá trị
hàm mục tiêu) tốt hơn để đƣa vào thế hệ tiếp theo hoặc cho lai ghép, với mục đích
là sinh ra cá thể mới tốt hơn. Có nhiều cách lựa chọn nhƣng đều cùng một mục tiêu
là những cá thể tốt sẽ có khả năng đƣợc chọn cao hơn.
2.1.2.5. Lai ghép
Giống nhƣ trong sinh học, việc lai ghép giữa hai cá thể sẽ cho ra cá thể con
thừa hƣởng một phần từ cá thể cha và một phần từ cá thể mẹ. Mỗi toán tử lai ghép
sẽ có xác suất xảy ra tƣơng ứng của nó. Các nghiên cứu sinh học đã chỉ ra rằng
trong tự nhiên, xác suất xảy ra lai ghép thƣờng rất cao, khoảng 99,97%. Tuy nhiên,
trên thực tế, khi áp dụng vào các bài toán trên máy tính thì xác suất này thƣờng
không cao đến mức đó. Việc xác định xác suất lai ghép hoàn toàn phụ thuộc vào
vấn đế cần giải quyết.
2.1.2.6. Đột biến
Đột biến là một sự biến đổi tại một (hay một số) gen của NST ban đầu để tạo
ra một NST mới. Đột biến có xác suất xảy ra thấp hơn lai ghép rất nhiều. Đột biến
có thể tạo ra cá thể mới tốt hơn hoặc xấu hơn cá thể mẹ ban đầu. Tuy nhiên, trong
GA, ta luôn mong muốn tạo ra những phép đột biến cho phép cải thiện lời giải qua
từng thế hệ tiến hoá.
2.1.3. Sự khác biệt của GA với các giải thuật khác
Hoạt động của GA đơn giản là việc mô phỏng sự tiến hoá và chọn lọc tự
nhiên bằng máy tính bắt đầu từ một quần thể đƣợc khởi tạo ngẫu nhiên. Bên cạnh

Số hóa bởi Trung tâm Học liệu – ĐHTN




×