Ngày nay máy tính đã được sử dụng trong mọi lĩnh vực của đời sống, vì vậy kho thông tin trong máy tính tăng trưởng không ngừng và thật khókhăn cho công tác tìm kiếm (nhất là tìm kiếm trên các file văn bản). Vì lẽ đó bài toán tìm kiếm văn bản là bài toán rất thiết thực đang được nhiều người quan tâm, vấn đề cấp thiết đặt ra là giải quyết bài toán tìm kiếm văn bản sao cho hiệu quả, đáp ứng được nhu cầu của người sử dụng. Chuyên đề này định hướng nghiên cứu sử dụng giải thuật toán so khớp để tìm trong file văn bản các đoạn văn bản giống hoặc gần giống với mẫu (từ khoá) cần tìm kiếm. Mục đích của chuyên đề là: nghiên cứu các phương pháp tìm kiếm văn bản và tìm cách ứng dụng chúng vào một số bài toán cụ thể, trên cơ sở đó xây dựng phần mềm ứng dụng tìm kiếm văn bản một cách hiệu quả và thiết thực. Đề tài tập trung vào bài toán tìm kiếm văn bản theo hướng tiếp cận sau: Tìm các vị trí trong văn bản có xuất hiện chuỗi văn bản giống hoặc gần giống với chuỗi văn bản mẫu (xuất hiện gần giống trong trường hợp văn bản tìm kiếm không chứa chuỗi văn bản mẫu). Các thuật toán được nghiên cứu trong đề tài gồm 7 thuật toán: 1. Simon algorithm 2. Colussi algorithm 3. Galil_Giancarlo algorithm 4. Apostolico_Crochemore algorithm 5. Not So Naive algorithm 6. Forward Dawg Matching algorithm 7. Boyer- Moore algoritth
BTL_Truyền số liệu 1 Nhóm 5 - Tin K9 Người hướng dẫn: ThS. Lê Đắc Nhường Sinh viên thực hiện: 1. Hoàng Thành Đạt 2. Trương Thị Thu Hằng 3. Nguyễn Thị Lan Hương 4. Trần Văn Thắng (10/2) 5. Vũ Văn Thắng 6. Đỗ Thị Thúy Trinh 7. Nguyễn Xuân Tùng Lớp ĐH Tin K9 TRƯỜNG ĐẠI HỌC HẢI PHÒNG KHOA TOÁN TIN ---------- TÌM KIẾM VÀ SO KHỚP CHUỖI Chuyên đề: Truyền số liệu BTL_Truyền số liệu 2 Nhóm 5 - Tin K9 LỜI NÓI ĐẦU Ngày nay máy tính đã được sử dụng trong mọi lĩnh vực của đời sống, vì vậy kho thông tin trong máy tính tăng trưởng không ngừng và thật khókhăn cho công tác tìm kiếm (nhất là tìm kiếm trên các file văn bản). Vì lẽ đó bài toán tìm kiếm văn bản là bài toán rất thiết thực đang được nhiều người quan tâm, vấn đề cấp thiết đặt ra là giải quyết bài toán tìm kiếm văn bản sao cho hiệu quả, đáp ứng được nhu cầu của người sử dụng. Chuyên đề này định hướng nghiên cứu sử dụng giải thuật toán so khớp để tìm trong file văn bản các đoạn văn bản giống hoặc gần giống với mẫu (từ khoá) cần tìm kiếm. Mục đích của chuyên đề là: nghiên cứu các phương pháp tìm kiếm văn bản và tìm cách ứng dụng chúng vào một số bài toán cụ thể, trên cơ sở đó xây dựng phần mềm ứng dụng tìm kiếm văn bản một cách hiệu quả và thiết thực. Đề tài tập trung vào bài toán tìm kiếm văn bản theo hướng tiếp cận sau: Tìm các vị trí trong văn bản có xuất hiện chuỗi văn bản giống hoặc gần giống với chuỗi văn bản mẫu (xuất hiện gần giống trong trường hợp văn bản tìm kiếm không chứa chuỗi văn bản mẫu). Các thuật toán được nghiên cứu trong đề tài gồm 7 thuật toán: 1. Simon algorithm 2. Colussi algorithm 3. Galil_Giancarlo algorithm 4. Apostolico_Crochemore algorithm 5. Not So Naive algorithm 6. Forward Dawg Matching algorithm 7. Boyer- Moore algorit Do kiến thức còn hạn chế nên trong đề tài còn nhiều chỗ ngôn từ vẫn chưa thể hiện hết ý của thuật toán, mong thầy góp để chúng em làm tốt hơn. BTL_Truyền số liệu 3 Nhóm 5 - Tin K9 NHẬN XÉT CỦA GIÁO VIÊN . . . . . . . . . . . . ĐÁNH GIÁ VÀ CHO ĐIỂM BTL_Truyền số liệu 4 Nhóm 5 - Tin K9 MỤC LỤC Lời nói đầu Mục lục CHƯƠNG 1 : THUẬT TOÁN SIMON . 5 1.1 Các đặc điểm chính . 5 1.2 Mô tả . 5 3.1 Mã C 6 4.1.Ví dụ 9 CHƯƠNG 2: THUẬT TOÁN COLUSSI 12 1 .1 Các tính năng chính . 12 2.1 Mô tả 12 3.1 mã C . 15 4.1 Các ví dụ 19 CHƯƠNG 3 THUẬT TOÁN GALIL_GIANCARLO 22 1.1. Các chức năng chính . 22 3.1 The C code . 23 4.1 Ví dụ. . 24 CHƯƠNG 4 : APOSTOLICO_CROCHEMORE ALGORITHRM . 26 1.1 Đặc điểm chính . 26 2.1 Mô tả 27 3.1 Lệnh C 28 4.1 Ví dụ . 29 CHƯƠNG 5: NOT SO NAIVE ALGORITHM 32 1.1 Các đặc điểm chính: . 32 1.1 Mô tả: . 32 3.1 Code C . 32 4.1 Ví dụ . 34 CHƯƠNG 6: THUẬT TOÁN FORWARD DAWG MATCHING . 38 1.1 Các tính năng chính 38 2.1 Mô tả . 38 3.1 Mã C Error! Bookmark not defined. 4.1 Ví dụ: 41 CHƯƠNG 7 : THUẬT TOÁN BOYER-MOORE . 43 1. 1 Các đặc điểm chính: . 43 2. 1 Mô tả: 43 3.1 Code C . 46 4.1 Ví dụ: 49 KẾT LUẬN 51 TÀI LIỆU THAM KHẢO . 51 BTL_Truyền số liệu 5 Nhóm 5 - Tin K9 Chương 1 : Thuật toán Simon 1.1 Các đặc điểm chính Thực hiện một cách tiết kiệm A (x) tối thiểu Deterministic Finite Automaton công nhận ∑*x; Giai đoạn tiền xử lý trong thời gian O(m) và không gian phức tạp; Giai đoạn tìm kiếm độ phức tạp thời gian là O (m + n) (độc lập với kích thước bảng chữ cái); Nhiều nhất là 2n -1 văn bản so sánh phần tử trong giai đoạn tìm kiếm; Thời gian trễ giới hạn Min{1 + log2m, σ}. 1.2 Mô tả Hạn chế chính của việc tìm kiếm với tối thiểu A(x) là kích thước của automaton: O(mσ). Simon nhận thấy rằng có chỉ là một cạnh có ý nghĩa trong vài A (x). Đó là: Cạnh phía trước sẽ từ tiền tố của x chiểu dài k đến tiền tố chiều dài k+1 với 0≤k<m. ( m là số cạnh xác định); Quay trở lại cạnh đi từ các tiền tố của x chiều dài k đến một tiền tố có chiều dài nhỏ hơn khác không. Số lượng của các cạnh ≤ m. Các cạnh khác dẫn đến trạng thái ban đầu và sau đó có thể được suy ra. Do đó, số của các cạnh quan trọng được giới hạn 2m. Sau đó, đối với mỗi trạng thái automaton chỉ cần thiết để lưu trữ các danh sách của các cạnh đi quan trọng của nó. Mỗi trạng thái được đại diện bởi chiều dài của tiền tố liên quan của nó trừ đi 1 để mỗi cạnh dẫn đến phần tử i, với -1 ≤ i ≤ m -1 gọi là x [i] do đó nó không phải là cần thiết để lưu trữ các tên của các cạnh . Các cạnh phía trước có thể dễ dàng được suy ra từ mô hình, do đó chúng không được lưu trữ. Nó chỉ còn lại để lưu trữ các cạnh có ý nghĩa. Sử dụng một bảng L, kích thước m-2, danh sách liên kết. Các phần tử L [i] cho danh sách các mục tiêu của các cạnh bắt đầu từ trạng thái i . Để tránh để lưu trữ các danh sách trạng thái BTL_Truyền số liệu 6 Nhóm 5 - Tin K9 m -1, trong việc tính toán của bảng L, các số nguyên l được tính toán như vậy mà l +1 là chiều dài của đường biên giới dài nhất của x. Giai đoạn1: Tiền xử lý của thuật toán Simon bao gồm bảng L và số nguyên l . Nó có thể được thực hiện trong không gian O(m) và phức tạp thời gian. Giai đoạn 2: Tìm kiếm thực hiện tương tự như trong những tìm kiếm với một automaton. Khi một sự xuất hiện của mô hình được tìm thấy, trạng thái hiện tại được cập nhật bởi trạng thái l . Giai đoạn này có thể được thực hiện trong thời gian O (m + n). Các thuật toán Simon thực hiện nhiều nhất là 2n -1 so sánh phần tử văn bản trong giai đoạn tìm kiếm. Sự chậm trễ (tối đa số so sánh cho một phần tử văn bản duy nhất) được bao giới hạn Min{1 + log2m, σ }. 3.1 Mã C int getTransition(char *x, int m, int p, List L[],char c) { List cell; if (p < m - 1 && x[p + 1] == c) return(p + 1); else if (p > -1) { cell = L[p]; while (cell != NULL) if (x[cell->element] == c) return(cell->element); else cell = cell->next; return(-1); } else return(-1); } BTL_Truyền số liệu 7 Nhóm 5 - Tin K9 void setTransition(int p, int q, List L[]) { List cell; cell = (List)malloc(sizeof(struct _cell)); if (cell == NULL) error("SIMON/setTransition"); cell->element = q; cell->next = L[p]; L[p] = cell; } int preSimon(char *x, int m, List L[]) { int i, k, ell; List cell; memset(L, NULL, (m - 2)*sizeof(List)); ell = -1; for (i = 1; i < m; ++i) { k = ell; cell = (ell == -1 ? NULL : L[k]); ell = -1; if (x[i] == x[k + 1]) ell = k + 1; else setTransition(i - 1, k + 1, L); while (cell != NULL) { k = cell->element; BTL_Truyền số liệu 8 Nhóm 5 - Tin K9 if (x[i] == x[k]) ell = k; else setTransition(i - 1, k, L); cell = cell->next; } } return(ell); } void SIMON(char *x, int m, char *y, int n) { int j, ell, state; List L[XSIZE]; /* Preprocessing */ ell = preSimon(x, m, L); /* Searching */ for (state = -1, j = 0; j < n; ++j) { state = getTransition(x, m, state, L, y[j]); if (state >= m - 1) { OUTPUT(j - m + 1); state = ell; } } } BTL_Truyền số liệu 9 Nhóm 5 - Tin K9 4.1.Ví dụ Mẫu: gcagagag Xâu: gcatcgcagagagtatacagtacg Giai đoạn 1:Tiền xử lý Giai đoạn 2: Tìm kiếm Trạng thái ban đầu: -1 G C A T C G C A G A G A G T A T A C A G T A C G 0 G C A TC G C A G A G A G T A T A C A G T A CG 1 G C A T C G C A G A G A G T A T A C A G T A C G 2 G C A T C G C A G A G A G T A T A C A G T A C G - G C A T C G C A G A G A G T A T A C A G T A C G - G C A T C G C A G A G A G T A T A C A G T A C G 0 G C A T C G C A G A G A G T A T A C A G T A C G 1 G C A T C G C A G A G A G T A T A C A G T A C G 2 G C A T C G C A G A G A G T A T A C A G T A C G 3 BTL_Truyền số liệu 10 Nhóm 5 - Tin K9 G C A T C G C A G A G A G T A T A C A G T A C G 4 G C A T C G C A G A G A G T A T A C A G T A C G 5 G C A T C G C A G A G A G T A T A C A G T A C G 6 G C A T C G C A G A G A G T A T A C A G T A C G 7 G C A T C G C A G A G A G T A T A C A G T A C G - G C A T C G C A G A G A G T A T A C A G T A C G - G C A T C G C A G A G A G T A T A C A G T A C G - G C A T C G C A G A G A G T A T A C A G T A C G - G C A T C G C A G A G A G T A T A C A G T A C G - G C A T C G C A G A G A G T A T A C A G T A C G - G C A T C G C A G A G A G T A T A C A G T A C G 0 G C A T C G C A G A G A G T A T A C A G T A C G