ỨNG DỤNG MẢNG BĂM (HASH) ĐỂ GIẢI CÁC BÀI TOÁN VỀ SO KHỚP XÂU (CHUỖI)

15 403 0
ỨNG DỤNG MẢNG BĂM (HASH) ĐỂ GIẢI CÁC BÀI TOÁN VỀ SO KHỚP XÂU (CHUỖI)

Đ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

SỞ GIÁO DỤC VÀ ĐÀO TẠO NAM ĐỊNH TRƯỜNG THPT CHUYÊN LÊ HỒNG PHONG SÁNG KIẾN DỰ THI CẤP TỈNH BÁO CÁO SÁNG KIẾN ỨNG DỤNG MẢNG BĂM (HASH) ĐỂ GIẢI CÁC BÀI TOÁN VỀ SO KHỚP XÂU (CHUỖI) Tác giả: Ngơ Trung Tưởng Trình độ chun mơn: Đại học Chức vụ: Giáo viên Nơi công tác: Trường THPT chuyên Lê Hồng Phong Nam Định, tháng 05 năm 2014 THÔNG TIN CHUNG VỀ SÁNG KIẾN Tên sáng kiến: ỨNG DỤNG MẢNG BĂM (HASH) ĐỂ GIẢI CÁC BÀI TOÁN VỀ SO KHỚP XÂU (CHUỖI) Lĩnh vực áp dụng sáng kiến: Giảng dạy lớp 10, 11 chuyên tin, đội tuyển HSGQG môn tin học Thời gian áp dụng sáng kiến: Từ năm học 2012-2013 đến Tác giả: Họ tên: Ngô Trung Tưởng Năm sinh: 1982 Nơi thường trú: 22/34 Trần Thái Tông, P Thống Nhất, TP Nam Định Trình độ chun mơn: Đại học Chức vụ công tác: Giáo viên Nơi làm việc: Trường THPT chuyên Lê Hồng Phong Địa liên hệ: 22/34 Trần Thái Tông, P Thống Nhất, TP Nam Định Điện thoại: 0982.209.259 Đơn vị áp dụng sáng kiến: Tên đơn vị: Trường THPT chuyên Lê Hồng Phong Địa chỉ: 76 Vỵ Xuyên Điện thoại: 03503.640297 III Nội dung chuyên đề Phát biểu toán - Cho xâu T gồm m kí tự - Cho xâu mẫu P gồm n kí tự - Yêu cầu: cho biết xâu mẫu P xuất lần T vị trí xuất P Thuật tốn Có nhiều thuật tốn khác để giải toán Brute-force approach (vét cạn-độ phức tạp O(n*m)), KMP (độ phức tạp O(n+m)), Suffix Array… Trong chuyên đề tơi khơng đề cập đến thuật tốn mà tập trung vào thuật toán sử dụng mảng băm hay gọi tên gọi khác HASH Đây thuật toán hiệu đặc biệt thi cử tốc độ thực thi nhanh, linh hoạt xử lí dễ cài đặt Mơ tả thuật tốn HASH a Các kí hiệu: - Tập chữ bảng chữ kí hiệu ∑ - Xâu T gồm m kí tự: T[1 m] - Xâu mẫu P gồm n kí tự: P[1 n] - Xâu từ i đến j xâu T là: T[i j] - Chúng ta cần tìm tất vị trí i thỏa mãn (1≤i≤m-n+1) mà T[i i+n-1]=P[1 n] b Mơ tả thuật tốn Để đơn giản, giả sử Σ = {a, b,…, z}, nghĩa Σ gồm chữ Latin in thường Để biểu diễn xâu, thay dùng chữ cái, chuyển sang biểu diễn số hệ 26 Ví dụ: xâu ‘abcd’ biểu diễn hệ 26: ‘a’*26 3+ ‘b’*262+ ‘c’*261 + ‘d’*260 đổi số hệ số 10 tương ứng là: 65*263+66*262+67*26+68= 1188866 Dễ thấy rằng, muốn so sánh xâu biểu diễn xâu hệ số 10 giống Ví dụ xâu A=B ↔ Mã A = Mã B Tuy nhiên xâu dài Mã A, Mã B lớn Chính thế, ta lấy mod cho số base nguyên tố lớn ví dụ 109+7, hay 2.109+11… A=B  Mã A mod base = Mã B mod base Dễ dàng nhận thấy việc so sánh Mã A mod base với Mã B mod base kết luận A có với B hay khơng sai Mã A mod base = Mã B mod base điều kiện cần để A B chưa phải điều kiện đủ Tuy nhiên, chấp nhận lập luận sai thuật toán Hash Và coi điều kiện cần điều kiện đủ Trên thực tế, lập luận sai có lúc dẫn đến so sánh xâu khơng xác chương trình bị chạy kết sai Nhưng thực tế cho thấy rằng, chọn base số nguyên lớn, số lượng trường hợp sai ít, ta coi Hash thuật tốn xác Trở lại toán ban đầu, cần P xuất vị trí T Để làm việc này, cần duyệt qua vị trí xuất phát P T Giả sử vị trí i, kiểm tra T[i i + n − 1] có với P hay khơng Để kiểm tra điều này, cần tính mã Hash đoạn T[i i + n − 1] mã Hash xâu P Để tính mã Hash xâu P cần làm đơn giản sau: HashP=0; for (i=1;i

Ngày đăng: 05/02/2018, 20:45

Từ khóa liên quan

Mục lục

  • Input

  • Output

  • Ví dụ:

  • Input

  • Output

  • Example

Tài liệu cùng người dùng

Tài liệu liên quan