1. Trang chủ
  2. » Luận Văn - Báo Cáo

Báo cáo chuyên đề công nghệ phầm mềm

64 11 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

Thuật toán đối sánh mẫu (pattern matching algorithm) là một thuật toán được sử dụng để tìm kiếm và tìm thấy một mẫu cụ thể trong một chuỗi hoặc tập dữ liệu lớn hơn. Mục đích của thuật toán này là xác định xem một mẫu cụ thể có xuất hiện trong chuỗi hay không, và nếu có, thì định vị vị trí của mẫu trong chuỗi. Có nhiều thuật toán đối sánh mẫu khác nhau, mỗi thuật toán có đặc điểm và hiệu suất khác nhau trong việc đối sánh mẫu. Các thuật toán đối sánh mẫu có ứng dụng rộng trong nhiều lĩnh vực, bao gồm xử lý văn bản, công nghệ thông tin, khoa học dữ liệu và nhiều lĩnh vực khác. Lựa chọn thuật toán phù hợp phụ thuộc vào yêu cầu và đặc điểm của bài toán cụ thể mà bạn đang giải quyết.

BỘ THÔNG TIN VÀ TRUYỀN THÔNG HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG - - BÁO CÁO CHUN ĐỀ CƠNG NGHỆ PHẦN MỀM Giảng viên: Nhóm môn học: Nguyễn Duy Phương 05 Sinh viên thực hiện: Nguyễn Văn Sơn Mã sinh viên: B19DCCN558 Hà Nội, tháng năm 2023 Mục Lục I Giới thiệu II Phân loại thuật toán đối sánh mẫu III Trình bày số thuật tốn 4 Các thuật toán tìm kiếm mẫu từ bên phải qua bên trái: 1.1 Brute – Force 1.2 Knuth-Morris-Pratt 1.3 Karp-Rabin 10 1.4 Morris-Partt 15 1.5 Apostolico-Crochemore 19 1.6 Not So Naïve 23 1.7 Morris Pratt 30 Các thuật tốn tìm kiếm mẫu từ bên phải qua bên trái: 35 2.1 Boyer Moore 35 2.2 Turbo-BM algorithm 37 Các thuật tốn tìm kiếm mẫu từ vị trí cụ thể: 39 3.1 Two Way Algorithm 39 3.2 Skip Search algorithm 43 Các thuật toán tìm kiếm mẫu từ bất kỳ: 45 4.1 Smith 45 4.2 Horspool 48 4.3 Raita 53 4.4 Quick Search 56 4.5 Tuned Boyer Moore 59 I Giới thiệu Thuật toán đối sánh mẫu (pattern matching algorithm) thuật toán sử dụng để tìm kiếm tìm thấy mẫu cụ thể chuỗi tập liệu lớn Mục đích thuật tốn xác định xem mẫu cụ thể có xuất chuỗi hay khơng, có, định vị vị trí mẫu chuỗi Có nhiều thuật tốn đối sánh mẫu khác nhau, thuật tốn có đặc điểm hiệu suất khác việc đối sánh mẫu Các thuật tốn đối sánh mẫu có ứng dụng rộng nhiều lĩnh vực, bao gồm xử lý văn bản, công nghệ thông tin, khoa học liệu nhiều lĩnh vực khác Lựa chọn thuật toán phù hợp phụ thuộc vào yêu cầu đặc điểm toán cụ thể mà bạn giải II Phân loại thuật toán đối sánh mẫu Thuật toán đối sánh mẫu đề xuất Brute-Force Thuật toán xác định vị trí xuất X Y với thời gian O(m.n) Nhiều cải tiến khác thuật toán Brute-Force đề xuất nhằm cải thiện tốc độ tìm kiếm mẫu Ta phân loại thuật tốn tìm kiếm mẫu thành lớp:  Tìm kiếm mẫu từ bên trái qua bên phải: Harrison Algorithm, Karp-Rabin Algorithm, Morris-Pratt Algorithm, Knuth- Morris-Pratt Algorithm, Forward Dawg Matching algorithm , Apostolico-Crochemore algorithm, Naive algorithm  Tìm kiếm mẫu từ bên phải qua bên trái: Boyer-Moore Algorithm , Turbo BM Algorithm, Colussi Algorithm, Sunday Algorithm, Reverse Factorand Algorithm, Turbo Reverse Factor, Zhu and Takaoka and BerryRavindran Algorithms  Tìm kiếm mẫu từ vị trí cụ thể: Two Way Algorithm, Colussi Algorithm , Galil-Giancarlo Algorithm, Sunday's Optimal Mismatch Algorithm, Maximal Shift Algorithm, Skip Search, KMP Skip Search and Alpha Skip Search Algorithms  Tìm kiếm mẫu từ bất kỳ: Horspool Algorithm, Boyer-Moore Algorithm, Smith Algorithm , Raita Algorithm III Trình bày số thuật tốn Các thuật tốn tìm kiếm mẫu từ bên phải qua bên trái: 1.1 Brute – Force a Trình bày thuật tốn: Thuật tốn Brute Force hoạt động cách so sánh ký tự mẫu với ký tự chuỗi cách Quá trình tìm kiếm diễn theo bước sau: - Duyệt qua vị trí chuỗi đầu vào Tại vị trí, so sánh ký tự mẫu với ký tự tương ứng chuỗi, vị trí - Nếu tất ký tự khớp, khớp tìm thấy Thuật tốn trả vị trí khớp tất vị trí khớp - Nếu có ký tự khơng khớp, thuật tốn di chuyển sang vị trí chuỗi tiếp tục so sánh b Đánh giá: - Khơng có pha tiền xử lý - Bộ nhớ cần dùng cố định - Luôn dịch bước sang phải - Độ phức tạp O(n*m) c Kiểm nghiệm thuật tốn  Pha tìm kiếm: d Lập trình thuật tốn(java) 1.2 Knuth-Morris-Pratt a Trình bày thuật toán  Tiền xử lý: o Tạo mảng lps (Longest Proper Prefix which is also Suffix) với độ dài độ dài mẫu Mảng lưu trữ độ dài đoạn đồng thời tiền tố hậu tố dài đoạn mẫu o Khởi tạo lps[0] = i = o Duyệt qua ký tự mẫu từ đầu đến cuối:  Nếu ký tự vị trí i mẫu khớp với ký tự vị trí lps[i-1] mẫu, đặt lps[i] = lps[i-1] + tăng i lên  Nếu không khớp, xử lý trường hợp sau:  Nếu i khác 0, đặt i = lps[i-1]  Nếu i 0, đặt lps[i] = tăng i lên  Quá trình tìm kiếm: o Khởi tạo biến i = (vị trí chuỗi) j = (vị trí mẫu) o Duyệt qua ký tự chuỗi từ đầu đến cuối:  Nếu ký tự vị trí i chuỗi khớp với ký tự vị trí j mẫu, tăng i j lên  Nếu j độ dài mẫu, tức tìm thấy khớp, thực hành động cần thiết (ví dụ: lưu trữ vị trí xuất hiện, tiếp tục tìm kiếm khớp tiếp theo)  Nếu ký tự vị trí i chuỗi khơng khớp với ký tự vị trí j mẫu, thực xử lý sau:  Nếu j khác 0, đặt j = lps[j-1] (quay lui mẫu)  Nếu j 0, tăng i lên b Đánh giá - Có pha tiền xử lý độ phức tạp O(m) - Độ phức tạp O(n + m) c Kiểm nghiệm thuật tốn Tìm kiếm mẫu "ABAB" chuỗi "ABABDABACDABABCABAB"  Pha 1: Xây dựng bảng prefix o Bước 1: Khởi tạo bảng prefix với độ dài mẫu: Index Value 0 0 o Bước 2: Duyệt qua ký tự mẫu cập nhật bảng prefix:  Ký tự khơng có prefix nào, nên giá trị tương ứng bảng prefix Index Value 0 0  Ký tự thứ hai khơng có prefix nào, Index Value 0 0  Ký tự thứ ba khơng có prefix nào, Index Value 0 0  Ký tự thứ tư "B", trùng khớp với ký tự mẫu Do đó, giá trị index độ dài prefix lớn khớp với hậu tố nó, tức Index Value 0  Pha 2: Tìm kiếm o Bước 1: Khởi tạo biến:  i: vị trí chuỗi (ban đầu i = 0)  j: vị trí mẫu (ban đầu j = 0) o Bước 2: Lặp qua ký tự chuỗi:  So sánh ký tự vị trí i chuỗi ký tự vị trí j mẫu:  Nếu hai ký tự khớp nhau, tăng i j lên  Nếu hai ký tự không khớp nhau: o Kiểm tra giá trị bảng prefix vị trí j - 1:  Nếu giá trị 0, tăng i lên  Nếu giá trị lớn 0, cập nhật j thành giá trị bảng prefix giữ i nguyên Tiếp tục lặp qua ký tự hết chuỗi tìm thấy mẫu o Bước 3: Kết Kết vị trí xuất mẫu chuỗi Trong ví dụ này, ta thực bước sau:  i = 0, j = 0:  So sánh "A" với "A": khớp nhau, tăng i j lên  i = 1, j = 1:  So sánh "B" với "B": khớp nhau, tăng i j lên  i = 2, j = 2:  So sánh "A" với "A": khớp nhau, tăng i j lên  i = 3, j = 3:  So sánh "B" với "B": khớp nhau, tăng i j lên  j = m (độ dài mẫu): Tìm thấy mẫu vị trí i - m = - = -1 (khơng hợp lệ) Vì vậy, kết -1, tức mẫu không xuất chuỗi d Lập trình thuật tốn(Java) Trong ví dụ trên, tìm kiếm mẫu "ABCDABD" chuỗi "ABCABCDABABCDABCDABDE" cách sử dụng thuật toán KMP Kết hiển thị vị trí xuất mẫu chuỗi thơng báo khơng tìm thấy Kết đầu ví dụ "Pattern found at index 13", mẫu "ABCDABD" tìm thấy vị trí 13 chuỗi 1.3 Karp-Rabin a Trình bày thuật tốn Thuật tốn Karp-Rabin thuật tốn tìm kiếm chuỗi dựa việc sử dụng hàm băm (hashing) Dưới chi tiết thuật toán Karp-Rabin:  Tính tốn giá trị băm cho mẫu: o Sử dụng hàm băm để tính tốn giá trị băm cho mẫu Giá trị băm tính dựa ký tự mẫu có giá trị phạm vi cố định o Giá trị băm sử dụng để so sánh với giá trị băm cửa sổ chuỗi  Tính tốn giá trị băm cho cửa sổ chuỗi: o Duyệt qua cửa sổ có độ dài với độ dài mẫu chuỗi 10 50 51 d Lập trình thuật tốn(Java) public class Horspool { public static boolean cmp(char[] x, char[] y, int y1) { for (int i = 0; i < x.length; i++) { if (x[i] != y[y1++]) { return false; } } return true; } public static int[] preBc(char[] x) { int[] bc = new int[255]; int m = x.length; for (int i = 0; i < 255; i++) { bc[i] = m; } for (int i = 0; i < m - 1; i++) { bc[(int) x[i]] = m - i - 1; } return bc; } public static void search(char[] x, char[] y) { int m = x.length; int n = y.length; int[] preBc = preBc(x); int i = 0; while (i

Ngày đăng: 04/06/2023, 10:41

TỪ KHÓA LIÊN QUAN

w