Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 53 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
53
Dung lượng
1 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ ĐÀO THỊ DUNG TÌM HIỂU MỘT SỐ GIẢI THUẬT TÌM KIẾM CHUỖI CON VÀ ỨNG DỤNG LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội – 2016 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ ĐÀO THỊ DUNG TÌM HIỂU MỘT SỐ GIẢI THUẬT TÌM KIẾM CHUỖI CON VÀ ỨNG DỤNG Ngành: Công nghệ thông tin Chuyên ngành: Hệ thống thông tin Mã số: 60480104 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƢỜI HƢỚNG DẪN KHOA HỌC: PGS.TS NGUYỄN TRÍ THÀNH Hà Nội – 2016 LỜI CẢM ƠN Sau thời gian nghiên cứu, làm việc khẩn trƣơng đƣợc hƣớng dẫn tận tình giúp đỡ thầy giáo PGS.TS Nguyễn Trí Thành, luận văn với đề tài “ Tìm hiểu số giải thuật tìm kiếm chuỗi ứng dụng” đƣợc hồn thành Tác giả xin bày tỏ lịng biết ơn sâu sắc tới: Thầy giáo hƣớng dẫn PGS.TS Nguyễn Trí Thành tận tình dẫn, giúp đỡ tác giả hồn thành luận văn Các thầy giáo Trƣờng Đại học công nghệ số đồng nghiệp, quan tâm động viên, giúp đỡ tác giả suốt trình học tập để hồn thành luận văn Mặc dù cố gắng hết sức, song điều kiện thời gian kinh nghiệm thực tế thân cịn ít, đề tài khơng thể tránh khỏi thiếu sót Vì vậy, tác giả mong nhận đƣợc đóng góp ý kiến thầy giáo, giáo bạn bè đồng nghiệp Tôi xin chân thành cảm ơn! Hà Nội, ngày 10 tháng 03 năm 2016 Tác giả Đào Thị Dung LỜI CAM ĐOAN Tên là: Đào Thị Dung Sinh ngày 30 tháng 12 năm 1989 Học viên lớp cao học khoá 20 HTTT - Trƣờng đại học công nghệ - ĐHQGHN Hiện công tác : Trƣờng THPT DTNT Tỉnh Vĩnh Phúc Xin cam đoan luận văn “ Tìm hiểu số giải thuật tìm kiếm chuỗi ứng dụng” thầy giáo PGS.TS Nguyễn Trí Thành hƣớng dẫn cơng trình nghiên cứu riêng tơi Tất tài liệu tham khảo có nguồn gốc, xuất xứ rõ ràng Tác giả xin cam đoan tất nội dung luận văn nhƣ nội dung đề cƣơng yêu cầu thầy giáo hƣớng dẫn Nếu có vấn đề nội dung luận văn tác giả xin hoàn toàn chịu trách nhiệm với lời cam đoan Hà Nội, ngày 10 tháng 03 năm 2016 Học viên Đào Thị Dung MỤC LỤC LỜI CẢM ƠN LỜI CAM ĐOAN MỤC LỤC .3 Danh mục ký hiệu chữ viết tắt Danh mục bảng Danh mục hình ảnh MỞ ĐẦU CHƢƠNG TỔNG QUAN VỀ TÌM KIẾM CHUỖI CON 13 1.1 Lịch sử tìm kiếm chuỗi 13 1.1.1 Thuật toán trƣớc năm 2000 .13 1.1.2 Thuật toán sau năm 2000 14 1.2 Tìm kiếm chuỗi 15 1.2.1 Khái niệm tìm kiếm chuỗi 15 1.2.2 Các cách tiếp cận: 16 1.2.3 Các dạng tìm kiếm chuỗi 16 1.2.4 Ứng dụng tìm kiếm chuỗi 20 1.3 Tóm tắt chƣơng 18 CHƢƠNG CÁC THUẬT TỐN TÌM KIẾM CHUỖI CON 19 2.1 Các thuật toán tìm kiếm chuỗi thơng dụng 19 2.1.1 Thuật toán Brute Force .19 2.1.2 Thuật toán Karp-Rabin 27 2.1.3 Thuật toán Knuth – Morris – Pratt .32 2.1.4 Thuật toán Boyer – Moore 29 2.2 So sánh thuật tốn tìm kiếm chuỗi 42 2.3 Tóm tắt chƣơng 43 CHƢƠNG KẾT QUẢ THỰC NGHIỆM VÀ ỨNG DỤNG .36 3.1 Thực nghiệm 36 3.1.1 Môi trƣờng thực nghiệm 36 3.1.2 Đánh giá kết thực nghiệm .39 3.2 Chƣơng trình ứng dụng : 40 3.2.1 Tập CSDL sử dụng: 48 3.3 Tóm tắt chƣơng 50 KẾT LUẬN 52 Đánh giá kết đề tài : 51 Hạn chế : 51 Hƣớng phát triển tƣơng lai: 51 TÀI LIỆU THAM KHẢO .52 Danh mục ký hiệu chữ viết tắt Từ viết tắt AC Từ đầy đủ Aho-Corasick BDH Backward-Dawg-Matching BOM Backward-OracleMatching DFA Deterministic Finite Automaton FJS Franek-Jennings-Smyth MDH QS KMP BM RAM Multi – phase Dynamic Hash Quick Search Knuth – Morris – Pratt Boyer-Moore Random Access Memory Danh mục bảng Bảng 1.1: Phân loại dạng tìm kiếm chuỗi 18 Bảng 2.1: Bảng kmpNext 27 Bảng 2.2 : Bảng bmBc[c] 33 Bảng 2.3 : Bảng bmGs[i] 33 Bảng 2.4: Bảng so sánh thuật tốn tìm kiếm 42 Bảng 3.1: Cấu hình phần cứng Windows 36 Bảng 3.2 : Cấu hình phần cứng Linux 36 Bảng 3.3: Cấu hình phần mềm 36 Bảng 3.4: Bảng thống kê kết số 37 Bảng 3.5: Bảng thống kê kết số 38 Bảng 3.6: Bảng thống kê kết số 38 Bảng 3.7: Bảng thống kê kết số 39 Bảng 3.8 : Bảng thống kê kết số 39 Danh mục hình ảnh Hình 2.1: mis-match so sánh vị trí j 29 Hình 2.2 : good-suffix shift, trƣờng hợp u lại xuất x 37 Hình 2.3: good-suffix shift, trƣờng hợp suffix u xuất x 37 Hình 2.4 : bad-character shift 37 Hình 3.1 : Giao diện chƣơng trình 41 Hình 3.2: Giao diện chƣơng trình tìm kiếm theo từ viết tắt 41 Hình 3.3 : Giao diện chƣơng trình tìm kiếm theo từ đầy đủ 42 MỞ ĐẦU Lý chọn đề tài: Cùng với phát triển công nghệ thông tin, số lƣợng tài liệu điện tử đƣợc tăng lên đáng kể Trong đó, nhu cầu khai thác kho tài liệu khổng lồ để tìm kiếm thơng tin cần thiết nhu cầu thƣờng ngày thiết thực ngƣời sử dụng Tuy nhiên, khó khăn ngƣời gặp phải việc khai thác thông tin khả tìm xác thơng tin họ cần Để trợ giúp cơng việc này, 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 ngƣời sử dụng Những hệ thống tìm kiếm bắt đầu phát triển đƣa vào ứng dụng, phổ biến hệ thống tìm kiếm theo từ khóa Nhiều hệ thống hoạt động hiệu Internet nhƣ Google, Bing, Yahoo!… Tuy nhiên, phần lớn cơng cụ tìm kiếm sản phẩm thƣơng mại mã nguồn đƣợc giữ bí mật Hoặc hệ thống tìm kiếm máy cá nhân nhƣ Windows Search, Google Desktop… đáp ứng phần nhu cầu ngƣời sử dụng, miễn phí cho cá nhân, nhiên đáp ứng đƣợc phạm vi nhỏ dừng lại mức độ tìm kiếm từ khóa theo tiêu đề phần tóm tắt Bài tốn tìm kiếm xâu kí tự (string searching, hay gọi đối sánh xâu string matching) toán quan trọng thuật toán xử lý xâu ký tự hay xử lý văn (text processing) Đây thuật toán xử lý xâu văn quan trọng có nhiều ứng dụng thực tế Có nhiều thuật tốn tìm kiếm xâu kí tự ví dụ nhƣ thuật toán Brute Force, thuật toán Knuth - Morris- Pratt, thuật toán DFA (Deterministic Finite Automaton - máy automat hữu hạn), thuật toán Karp Rabin, Luận văn nghiên cứu thuật tốn tìm kiếm chuỗi ứng dụng chúng vào hệ thống tìm kiếm văn Hƣớng nghiên cứu : - Nghiên cứu cài đặt thử nghiệm thuật toán : thuật toán Brute Force, thuật toán Knuth - Morris- Pratt, thuật toán Karp – Rabin, thuật toán Boyer – Moore - Đánh giá hiệu thuật tốn - Xây dựng chƣơng trình ứng dụng : từ điển viết tắt smartDictionary Nội dung : good-suffix shift đƣợc lƣu bảng bmGs có kích thƣớc m+1 Ta định nghĩa điều kiện sau: Cs(i, s): với k mà i < k < m, s ≥ k Co(i, s): s g && suff[i + m - - f] < i - g) suff[i] = suff[i + m - - f]; else { if (i < g) g = i; f = i; while (g >= && x[g] == x[g + m - - f]) g; suff[i] = f - g; } } } 31 void preBmGs(char *x, int m, int bmGs[]) { int i, j, suff[XSIZE]; suffixes(x, m, suff); for (i = 0; i < m; ++i) bmGs[i] = m; j = 0; for (i = m - 1; i >= 0; i) if (suff[i] == i + 1) for (; j < m - - i; ++j) if (bmGs[j] == m) bmGs[j] = m - - i; for (i = 0; i