Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 54 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
54
Dung lượng
733,88 KB
Nội dung
TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ************* NGU ỄN THỊ NGỌC ANH MỘT SỐ THUẬT TOÁN TÌM CHUỖI VÀ XÂY DỰNG CHƢƠNG TRÌNH MINH HỌA THUẬT TOÁN BOYER - MOORE KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC C u nn n K o ọ m HÀ NỘI –2015 tn TRƢỜNG ĐẠI HỌC SƢ PHẠM HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ************* NGUYỄN THỊ NGỌC ANH MỘT SỐ THUẬT TOÁN TÌM CHUỖI VÀ XÂY DỰNG CHƢƠNG TRÌNH MINH HỌA THUẬT TOÁN BOYER - MOORE KHÓA LUẬN TỐT NGHIỆP ĐẠI HỌC C u nn n K o ọ m tn N ƣời ƣớng dẫn khoa học TS. TRỊNH ĐÌNH VINH HÀ NỘI –2015 LỜI CẢM ƠN Để hoàn thành đƣợc khóa luận, nghiên cứu cố gắng thân, em xin gửi lời cảm ơn tới TS. Trịnh Đình Vinh giáo viên trực tiếp hƣớng dẫn, tận tình bảo định hƣớng cho em suốt trình thực khóa luận. Em xin gửi lời cảm ơn chân thành cảm ơn tất thầy, cô giáo trƣờng Đại học Sƣ phạm Hà Nội nói chung thầy, cô giáo khoa Công nghệ thông tin nói riêng giảng dạy dìu dắt em trong suốt trình học tập trƣờng. Cuối cùng, em xin gửi lời cảm ơn tới gia đình, bạn bè ngƣời bên cổ vũ tinh thần, tạo điều kiện thuận lợi cho em để em học tập tốt hoàn thiện khóa luận. Với điều kiện thời gian nghiên cứu vốn kiến thức thân em hạn chế nên chƣơng trình không tránh khỏi thiếu sót. Em mong nhận đƣợc bảo quý báu quý thầy, cô giáo bạn bè để chƣơng trình em đƣợc hoàn thiện hơn. Em xin chân thành cảm ơn! Hà Nội, ngày 10 tháng 05 năm 2015 Sinh viên thực Nguyễn Thị Ngọc Anh LỜI CAM ĐOAN Tên em là: Nguyễn Thị Ngọc Anh Sinh viên lớp: K37A – Tin học, khoa Công nghệ Thông tin, trƣờng Đại học Sƣ phạm Hà Nội 2. Em xin cam đoan: 1. Nội dung đề tài: “Một số thuật toán tìm chuỗi xây dựng chƣơng trình minh họa thuật toán Boyer – Moore” nghiên cứu riêng em. 2. Kết nghiên cứu em không trùng với kết tác giả khác. Nếu sai em xin hoàn toàn chịu trách nhiệm. Hà Nội, ngày 10 tháng 05 năm 2015 Sinh viên thực Nguyễn Thị Ngọc Anh MỤC LỤC MỞ ĐẦU . CHƢƠNG 1: CƠ SỞ LÝ THUYẾT . 1.1. Bài toán tìm kiếm hƣớng giải 1.1.1. Bài toán tìm kiếm 1.1.2. Hƣớng giải . 1.2. So khớp chuỗi . 1.2.1. Khái niệm 1.2.1.1. Chuỗi 1.2.1.2.So khớp chuỗi 1.2.2. Lịch sử phát triển. . 1.2.3. Các bƣớc xử lý 1.2.4. Các cách tiếp cận . 1.2.5. Các dạng so khớp chuỗi 1.2.6. Ứng dụng . 16 CHƢƠNG 2: MỘT SỐ THUẬT TOÁN TÌM CHUỖI 17 2.1. Thuật toán so khớp chuỗi . 17 2.1.1. Phát biểu toán 17 2.1.2. Thuật toán so khớp chuỗi thô 17 2.2. Thuật toán so khớp chuỗi KNUTH – MORRIS - PRATT (KMP) 20 2.2.1. Hàm tiền tố 20 2.2.2. Thuật toán KMP 22 2.3. Thuật toán so khớp chuỗi BOYER-MOORE (BM) 27 2.3.1. Ý tƣởng thuật toán . 27 2.3.2. Mô tả thuật toán 28 2.3.3. Ví dụ thuật toán Boyer-Moore . 30 2.3.4. Hàm tìm vị trí xuất cuối ký tự - Last . 31 2.3.5. Ví dụ cụ thể vai trò hàm Last thuật toán Boyer-Moore 32 2.3.6. Thuật toán Boyer-Moore viết ngôn ngữ JAVA . 32 2.3.7. Phân tích thuật toán . 34 2.4.Thuật toán so khớp chuỗi FRANEK – JENNINGS – SMYTH (FJS) 35 2.4.1. Phát biểu toán 35 2.4.2. Thuật toán FJS . 35 2.4.3. Tính toán tiền xử lý BM KMP . 37 2.5. So sánh thuật toán so khớp chuỗi 40 CHƢƠNG 3: XÂY DỰNG CHƢƠNG TRÌNH DEMO 42 3.1. Phát biểu toán . 42 3.2. Thuật toán Boyer Moore cải tiến bảng giá trị dịch chuyển hai chiều 42 3.3. Kết thực nghiệm 45 KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 47 TÀI LIỆU THAM KHẢO . 48 MỞ ĐẦU 1. Lý lựa chọn đề tài Với bùng nổ phát triển công nghệ thông tin năm gần đây, mang lại nhiều hiệu khoa học nhƣ hoạt động thực tế, phát triển mạnh mẽ công nghệ thông tin làm cho khả thu thập lƣu trữ thông tin hệ thống thông tin tăng lên cách nhanh chóng, lƣợng liệu lƣu trữ trở nên nhiều. Vì việc xử lý thông tin gặp phải nhiều khó khăn, đặc biệt công tác tìm kiếm. Dữ liệu máy tính đƣợc lƣu trữ dƣới nhiều dạng khác liệu dạng chuỗi cách phổ biến nhất. Trên chuỗi đơn vị liệu ý nghĩa quan trọng cách xếp chúng. Có thể thấy dạng khác chuỗi nhƣ file liệu, gói tin, biểu diễn gen hay văn đọc. Để tìm kiếm thông tin hữu ích nhiều giải pháp, đề xuất đƣợc áp dụng, bao gồm giải pháp dựa phần cứng phần mềm. Tuy nhiên, hầu hết hệ thống tìm kiếm thông tin gặp phải nhiều vấn đề hiệu chúng phải phân tích, xử lý lƣợng lớn chuỗi liệu. Hơn việc phân tích, tìm kiếm, so khớp chuỗi đòi hỏi chi phí tính toán thời gian xử lý lớn. Khi lƣợng liệu lớn, nhiều thông tin bị bỏ qua không đƣợc phân tích, không đáp ứng đƣợc nhu cầu ngƣời sử dụng. Để tìm kiếm thông tin cách xác mà không nhiều thời gian cần phải sâu nghiên cứu thuật toán so khớp chuỗi có hiệu cao. Một thuật toán so khớp chuỗi có hiệu cao thuật toán Boyer – Moore. Chính lý nên em chọn đề tài “Một số thuật toán tìm chuỗi xây dựng chƣơng trình minh họa thuật toán Boyer – Moore” làm khóa luận tốt nghiệp mình. 2. Mục tiêu nhiệm vụ nghiên cứu Mục tiêu - Áp dụng thuật toán Knuth - Morris – Pratt, Boyer – Moore, Franek Jennings – Smyth để tìm chuỗi. - Xây dựng chƣơng trình minh họa thuật toán Boyer – Moore. Nhiệm vụ - Tìm hiểu số thuật toán so khớp chuỗi. - Xây dựng chƣơng trình tìm kiếm văn mã unicode dựa thuật toán Boyer – Moor cải tiến bảng giá trị dịch chuyển chiều. Cài đặt thử nghiệm đánh giá kết quả. 3. Đối tƣợng phạm vi nghiên cứu Khóa luận sâu nghiên cứu số thuật toán tìm chuỗi xây dựng chƣơng trình minh họa thuật toán Boyer – Moore cải tiến để tìm kiếm chuỗi mã Unicode. 4. Giả thuyết khoa học Tìm hiểu, nghiên cứu số thuật toán tìm chuỗi giúp ngƣời lập trình hiểu rõ công tác tìm kiếm. Từ đó, việc xây dựng chƣơng trình tìm kiếm văn bản, tìm kiếm thông tin chƣơng trình tìm kiếm mẫu vết công lĩnh vực an toàn mạng,… trở nên dễ dàng hơn. Chƣơng trình đƣợc xây dựng đƣa vào thực tiễn trợ giúp đắc lực cho ngƣời sử dụng việc tìm kiếm thông tin cách nhanh chóng, xác mà không nhiều thời gian. 5. P ƣơn p pn a. P ƣơn p i n ứu p nghiên cứu lý luận Nghiên cứu qua việc đọc sách, báo tài liệu liên quan nhằm xây dựng sở lý thuyết đề tài biện pháp cần thiết để giải vấn đề đề tài. b. P ƣơn p p u n i Tham khảo ý kiến chuyên gia, tìm hiểu quan điểm, kinh nghiệm họ để thiết kế chƣơng trình phù hợp với yêu cầu thực tiễn. c. P ƣơn p p t ực nghiệm Căn vào quan sát thực tiễn, yêu cầu sở, vào lý luận đƣợc nghiên cứu kết đạt đƣợc để có đƣợc tƣơng tác ngƣời dùng chƣơng trình, từ yêu cầu thiết kế hiệu quả. 6. Ý n ĩ k o Ýn ọc thực tiễn ĩ k o ọc Nội dung nghiên cứu khóa luận góp phần làm rõ công tác tìm kiếm số thuật toán so khớp chuỗi. Ýn ĩ t ực tiễn Chƣơng trình minh họa thuật toán Booyer – Moore thành công góp phần phát triển công tác tìm kiếm ứng dụng tìm kiếm chuỗi văn bản, sinh học phân tử lĩnh vực an toàn mạng, an toàn thông tin,… Giúp ngƣời tìm kiếm thông tin xác cách nhanh nhất. 7. Cấu trúc khóa luận Ngoài phần mở đầu, kết luận hƣớng phát triển, tài liệu tham khảo cấu trúc khóa luận bao gồm chƣơng sau: Chƣơng 1: Cơ sở lý thuyết Chƣơng 2: Một số thuật toán tìm chuỗi Chƣơng 3: Xây dựng chƣơng trình demo CHƢƠNG CƠ SỞ LÝ THU ẾT 1.1.B i to n tìm kiếm v ƣớn iải qu ết 1.1.1. B i to n tìm kiếm Ngày nay, máy tính đƣợc sử dụng lĩnh vực đời sống, theo kho thông tin máy tính tăng trƣởng không ngừng. Để tìm kiếm thông tin hữu ích, nhiều giải pháp, đề xuất đƣợc áp dụng, bao gồm giải pháp dựa phần cứng phần mềm. Tuy nhiên, hầu hết hệ thống tìm kiếm thông tin có gặp phải vấn đề hiệu chúng phải phân tích, xử lý lƣợng lớn chuỗi liệu. Vậy làm để ngân hàng nắm giữ tất thông tin nhiều tài khoản khách hàng cần tìm kiếm để kiểm tra biến động, hãng bảo hiểm hay hệ thống trợ giúp bán vé xe, vé máy bay,… cách xác, cần phải tìm hiểu sâu toán tìm kiếm. Tìm kiếm thao tác móng cho nhiều tác vụ tính toán. Tìm kiếm nghĩa tìm hay nhiều mẩu thông tin đƣợc lƣu trữ. Dạng phổ biến toán tìm kiếm là: Cho trƣớc nguồn tìm kiếm tập D văn (hoặc sở liệu văn bản, tập văn Internet). Cho chuỗi mẫu q (thƣờng từ, chuỗi ký tự ngắn), tìm tất vă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 gọi "truy vấn" toán có tên gọi "tìm kiếm theo truy vấn". Để tìm đƣợc văn có chứa chuỗi truy vấn q, hệ thống tìm kiếm cần phải kiểm tra chuỗi truy vấn q có chuỗi văn thuộc tập D hay không (so khớp) đƣa văn đáp ứng. Trong nhiều trƣờng hợp, toán đòi hỏi tìm tất vị trí chuỗi văn trùng với q. Đồng thời, điều kiện tìm kiếm đƣợc làm "xấp xỉ" theo nghĩa chuỗi kết không cần chứa q (không cần có chuỗi văn trùng cách hoàn toàn xác với q) mà cần "liên quan" tới q (có chuỗi văn int i = m-1; if (i > n-1) return -1; int j = m-1; { if (pattern.charAt(j) = = text.charAt(i)) if (j = = 0) return i; // so khớp else { // kỹ thuật soi gương i--; j--; } else { // kỹ thuật nhảy ký tự // lấy số lần xuất cuối ký tự int lo = last[text.charAt(i)]; i = i + m - Math.min(j, 1+lo); j = m - 1; } } while (i < = n-1); return -1; // không so khớp } //--------------------------------------------------//Hàm Last(), hàm trả mảng lƣu số lần xuất cuối ký tự //ASCII chuỗi mẫu pattern public static int[] buildLast(String pattern) { int last[] = new int[128]; // tập ký tự ASCII for(int i = 0; i < 128; i++) last[i] = -1; // khởi tạo mảng for (int i = 0; i < pattern.length(); i++) last[pattern.charAt(i)] = i; 33 return last; } //-----------------------------------------------//Thân hàm main() public static void main(String args[]) { if (args.length ! = 2) { System.out.println("Sử dụng dòng lệnh sau: BmSearch "); System.exit(0); } System.out.println("Chuỗi văn bản: " + args[0]); System.out.println("Chuỗi mẫu: " + args[1]); int posn = bmMatch(args[0], args[1]); if (posn = = -1) System.out.println("Không tìm thấy chuỗi mẫu xuất chuỗi vb"); else System.out.println("Mẫu tìm thấy bắt đầu vị trí: "+ posn + “ chuỗi văn bản”); } 2.3.7. P ân t t uật to n Thời gian chạy thuật toán Boyer-Moore O(mn+A). Trong A bảng chữ cái, m độ dài chuỗi mẫu, n độ dài chuỗi văn bản. Thuật toán chạy nhanh bảng chữ A có kích thƣớc lớn, chậm bảng chữ A có kích thƣớc nhỏ thích hợp cho tìm kiếm chuỗi văn bản, không thích hợp cho tìm kiếm liệu nhị phân. 34 Ví dụ minh họa hình 2.7 T: a a a a a a P: b a a a a a 12 11 10 b a a a a a a a a 18 17 16 15 14 13 b a a a a a 24 23 22 21 20 19 b a a a a a Hình 2.7 Tìm kiếm chuỗi trƣờng hợp xấu 2.4.T uật to n so k ớp 2.4.1. P uỗi FRANEK – JENNINGS – SMYTH (FJS) t biểu b i to n Cho chuỗi văn x = x[1 n] có chiều dài n chuỗi mẫu p = p[1 m] có chiều dài m. Hỏi p có x hay không? Nếu có p xuất lần x, vị trí p bắt đầu xuất x. 2.4.2. T uật to n FJS Ý tƣởng Thuật toán FJS dựa kết hợp ý tƣởng so khớp chuỗi mẫu tốt biết. Các bƣớc thực nhƣ sau: Bƣớc 1: Thực tính toán tiền xử lý cho bƣớc dịch chuyển theo thuật toán BM (Boyer – Moore) KMP (Knutth – Moris – Pratt). Bƣớc 2: Theo cách tiếp cận thuật toán BM, trƣớc hết thuật toán FJS so sánh ký tự p[m], ký tự bên phải mẫu, với ký tự tƣơng ứng 35 vị trí i’ văn x. Nếu p[m] x[i’] dịch chuyển mẫu p dọc theo x theo bƣớc dịch chuyển “Sunday shift” khi: + Hoặc tìm thấy vị trí i’ x thỏa mãn: p[m] = x[i’], i’n. Chuyển sang bƣớc B3. + Hoặc i’>n, thuật toán kết thúc. Bƣớc 3: Nếu p[m] = x[i’], thực thuật toán KMP: Bắt đầu từ ký tự trái mẫu p (ký tự p[1]) không khớp mở rộng p[m-1]. - Sau dù có tìm thấy so khớp hay không p x thực bƣớc dịch chuyển KMP. - Quay lại bƣớc B2. Dạng giả mã thuật toán FJS (Tìm tất xuất mẫu p = p[1 m] văn x = x[1 n]) if mn then return until p[m] = x[i’]; j:= 1; if j ≤ then i := i’−m’; j := 1; while j[...]... để có đƣợc một chiến lƣợc chơi hiệu quả - Tìm chuỗi: So sánh một hoặc nhiều chuỗi mẫu với văn bản để tìm vị trí số lần xuất hiện cửa chuỗi mẫu đó trong văn bản Tùy thuộc vào mục đích tìm kiếm khác nhau mà dựa trên các thuật toán, thuật giải khác nhau để giải quyết bài toán Từ đó xây dựng chƣơng trình cài đặt cụ thể 1.2 So k ớp 1.2.1 K uỗi i niệm 1.2.1.1 C uỗi Chuỗi là một nhóm các ký tự, số, khoảng... đƣợc đặt trong các dấu nháy Giả sử S là một chuỗi ký tự có kích thƣớc m Một chuỗi con S[i j] của chuỗi S là phân đoạn chuỗi có chỉ số giữa i và j Một chuỗi tiền tố của chuỗi S 5 là chuỗi con S[0 i] Một chuỗi hậu tố của chuỗi S là chuỗi con S[i m-1], i là chỉ số bất kỳ giữa 0 và m-1 Ví dụ: S V I E T N A M i 0 1 2 3 4 5 6 + Chuỗi con S[1 3] = “IET” + Tất cả các chuỗi tiền tố của S là:“VIETNAM”,“VIETNA”,... chính của các thuật toán so khớp chuỗi : 8 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... 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 chuỗi truy vấn 1.1.2 Hƣớn iải qu ết Để giải quyết bài toán tìm kiếm có nhiều phƣơng pháp, giải thuật đã đƣợc nghiên cứu: - Tìm kiếm trên danh sách: Là giải thuật đơn giản, tìm trong một tập hợp một phần tử chứa một khóa nào đó - Tìm kiếm trên cây: Là trung tâm của kĩ thuật tìm kiếm, các thuật toán. .. n]) và một chuỗi mẫu P có độ dài là m (P[1 m]) Các Phần tử của S và P là các ký tự trong tập hữu hạn alphabet Ví dụ: = {0,1} hoặc = {a,b,c ,z} Mảng ký tự S và P đƣợc gọi là chuỗi ký tự Khi đó bài toán so khớp chuỗi đƣợc phát biểu nhƣ sau: Cho một chuỗi ban đầu S và một chuỗi mẫu P So khớp chuỗi chính là việc tìm chuỗi mẫu P trong chuỗi ban đầu S Nếu chuỗi mẫu P đƣợc tìm thấy trong chuỗi ban đầu... bƣớc của thuật toán so khớp chuỗi thô nhƣ trên sẽ trả cho kết quả có tìm thấy chuỗi mẫu P trong chuỗi ban đầu S hay không Nếu chuỗi mẫu P đƣợc tìm thấy thì tìm thấy ở vị trí phần tử nào trên chuỗi S Tuy nhiên thuật toán so khớp chuỗi này còn gặp nhƣợc điểm lớn về thời gian thực hiện thuật toán nhƣ sau: - Với n là độ dài của chuỗi ban đầu S, m là độ dài của chuỗi mẫu P thì thời gian so khớp hai chuỗi là... trƣờng hợp ngƣợc lại (tức là không tìm thấy mẫu P trong S) s đƣợc gọi là giá trị dịch chuyển không hợp lệ Tóm lại: Bài toán so khớp chuỗi là bài toán tìm giá trị dịch chuyển s sao cho sau số lần dịch chuyển đó tìm đƣợc chuỗi mẫu P trong chuỗi ban đầu S 2.1.2 T uật to n so k ớp uỗi t Thuật toán so khớp chuỗi thô là thuật toán tìm tất cả các giá trị dịch chuyển, sử dụng một vòng lặp để kiểm tra điều kiện... 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 Có thể hình thức hóa bài toán so khớp chuỗi nhƣ sau: Coi văn bản là một mảng S[1 n] có chiều dài n và khuôn mẫu là một mảng P[1 m] có chiều 6 dài m, các thành phần của S và P là... thuật toán nhỏ hơn 2.2 T uật to n so k ớp uỗi KNUTH – MORRIS - PRATT (KMP) Để khắc phục nhƣợc điểm thời gian thực hiện thuật toán lớn, D.E.Knuth và V.R.Pratt đã xây dựng một thuật toán so khớp chuỗi tuyến tính Thời gian thực hiện thuật toán là O(n + m) dựa trên việc tính hàm tiền tố [1, ,m] đƣợc tính toán trên chuỗi mẫu P trong thời gian O(m) Mảng có thể giúp cho việc tính toán bƣớc dịch chuyển một. .. tìm kiếm các mẫu trong DNA, protein,… - Tìm kiếm cơ sở dữ liệu nhƣ trong GenBank - Trong nhiễu kênh với cho phép chấp nhận đƣợc - Trong tìm kiếm 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… 16 CHƢƠNG 2 MỘT SỐ THUẬT TOÁN TÌM CHUỖI 2.1 T uật to n so k ớp 2.1.1 P uỗi t biểu b i to n Giả sử chuỗi S là một mảng có độ dài là n (S[1 n]) và một . hiệu năng cao đó là thuật toán Boyer – Moore. Chính vì các lý do trên nên em đã chọn đề tài Một số thuật toán tìm chuỗi và xây dựng chƣơng trình minh họa thuật toán Boyer – Moore làm khóa. tiêu và nhim v nghiên cu Mc tiêu - Áp dụng thuật toán Knuth - Morris – Pratt, Boyer – Moore, Franek - Jennings – Smyth để tìm chuỗi. - Xây dựng chƣơng trình minh họa thuật toán Boyer – Moore. . nghiệm và đánh giá kết quả. ng và phm vi nghiên cu Khóa luận đi sâu nghiên cứu một số thuật toán tìm chuỗi và xây dựng chƣơng trình minh họa thuật toán Boyer – Moore cải tiến để tìm