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... NGÂN HOÀNG MỸ LINH BÀI TOÁN ĐỐI SÁNH MẪU SỬ DỤNG GIẢI T
Trang 1NGÂ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
Trang 2NGÂ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
Trang 3LỜ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 đủ
Ngân Hoàng Mỹ Linh
Trang 4LỜ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
Trang 5MỤ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 10
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 29
3.1 Bài toán đối sánh mẫu trên một file văn bản 29
3.1.1 Phân tích thuật toán 30
3.1.2 Các quá trình hoạt động của chương trình 35
3.1.3 Kết quả và đánh giá 39
3.2 Bài toán đối sánh mẫu trên nhiều file văn bản 53
3.2.1 Phát biểu bài toán 53
3.2.2 Kết quả thử nghiệm 55
Trang 6KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 60
*) Kết luận 60
*) Hướng nghiên cứu phát triển 60
TÀI LIỆU THAM KHẢO 61
DANH MỤC THUẬT NGỮ, TỪ VIẾT TẮT, KÍ HIỆU
Trang 7DANH 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 7
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 8
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 39
Hình 3.2 Giao diện chương trình mở rộng 55
DANH MỤC BẢNG BIỂU Bảng 2.1 Bảng quần thể khởi tạo ban đầu 27
Bảng 3.1 Ví dụ về biểu diễn cá thể 35
Bảng 3.2 Kết quả chương trình với độ chính xác 100% 41
Bảng 3.3 Kết quả chương trình với độ chính xác 90% 42
Bảng 3.4 Kết quả chương trình với độ chính xác 80% 43
Bảng 3.5 Kết quả chương trình với tỉ lệ a – b: 0.5 – 0.5 44
Bảng 3.6 Kết quả chương trình với tỉ lệ a – b: 0.6 – 0.4 45
Bảng 3.7 Kết quả chương trình với tỉ lệ a – b: 0.8 – 0.2 46
Bảng 3.8 Kết quả chương trình với tỉ lệ a – b: 0.9 – 0.1 47
Bảng 3.9 Kết quả chương trình mở rộng với độ chính xác 100% 56
Bảng 3.10 Kết quả chương trình mở rộng với độ chính xác 90% 57
Bảng 3.11 Kết quả chương trình mở rộng với độ chính xác 80% 58
Trang 8MỞ ĐẦ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, 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
Trang 9Đề 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
Trang 10CHƯƠ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:
“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”
Trang 11Trong 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
Ý 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
Trang 12kiế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 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
Trang 13Thuậ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
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)
Trang 141.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
Hình 1.2 Mis-match trong khi đang so sánh tại vị trí j