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

(Skkn 2023) phƣơng pháp giải một số bài toán chuổi con bằng nnlt c++

31 4 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

1 SỞ GIÁO DỤC & ĐÀO TẠO NGHỆ AN TRƢỜNG THPT KIM LIÊN SÁNG KIẾN KINH NGHIỆM Đề tài: “PHƢƠNG PHÁP GIẢI MỘT SỐ BÀI TOÁN CHUỔI CON BẰNG NNLT C++” Lĩnh vực: Tin học SỞ GIÁO DỤC & ĐÀO TẠO NGHỆ AN TRƢỜNG THPT KIM LIÊN SÁNG KIẾN KINH NGHIỆM Đề tài: “PHƢƠNG PHÁP GIẢI MỘT SỐ BÀI TOÁN CHUỔI CON BẰNG NNLT C++” Lĩnh vực: Tin học Giáo viên: Nguyễn Quang Hùng – Nguyễn Thị Lƣu Trƣờng THPT Kim Liên Năm học: 2022-2023 Số điện thoại: 0973484114 - 0914527656 MỤC LỤC PHẦN ĐẶT VẤN ĐỀ: ……………………………………………………2 Lý chọn đề tài: ……………………………………………… …2 Tính cấp thiết đề tài: ……………………………………………3 Tính đề tài: ……………………………………………… Khả ứng dụng triển khai đề tài: ………………………… Đối tượng phạm vi nghiên cứu: …………………………………3 PHẦN NỘI DUNG NGHIÊN CỨU …………… ……………………… Cơ sở khoa học: …………………………………………………… Thực trạng vấn đề: …………………………………………… Phương hướng giải : ……………………………………….5 3.1 Một số định hướng để viết code cho toán xử lý chuổi:…….5 3.2 Vận dụng định hướng để giải số toán kiểu chuổi:……… 13 Khảo sát cấp thiết tính khả thi giải pháp:…… ………… 26 PHẦN KẾT LUẬN VÀ KHUYẾN NGHỊ: ……………… …………… 28 TÀI LIỆU THAM KHẢO: …………………………………………… …29 PHẦN I ĐẶT VẤN ĐỀ Lý chọn đề tài Chúng ta bước triển khai Chương trình giáo dục phổ thơng mới, mơn Tin học ngày khẳng định vai trò chủ đạo việc trang bị cho người học khả tìm kiếm, tiếp nhận, mở rộng tri thức sáng tạo thời đại cách mạng cơng nghiệp lần thứ tư tồn cầu hóa Trong q trình giảng dạy chúng tơi dành nhiều thời gian để tìm kiếm, sưu tầm, phân loại số tập xử lý chuổi Nên nghiên cứu viết đề tài “PHƢƠNG PHÁP GIẢI MỘT SỐ BÀI TOÁN CHUỔI CON BẰNG NNLT C++” nhằm hệ thống hóa tồn kiến thức liệu kiểu chuổi để giúp giáo viên học sinh sử dụng việc dạy học Khi trao đổi với đồng nghiệp trường số giáo viên trường khác khu vực, chúng tơi nhận thấy cịn nhiều giáo viên dạy vấn đề xử lý chuổi cịn khó khăn đưa tập code viết NNLT C++, mạnh dạn trao đổi kinh nghiệm Rất mong đồng nghiệp nhận xét, góp ý để đề tài chúng tơi ngày hoàn thiện ứng dụng rộng rãi thực tiễn Các tốn code mà chúng tơi đưa nhằm giới thiệu cho học sinh cách viết chưa phương án tối ưu để giải tốn cụ thể Tính cấp thiết đề tài Các toán xử lý chuổi quan trọng lập trình, thường gây khó khăn cho học sinh bắt đầu làm quen Giáo viên bắt đầu viết C++ Vì việc đưa nhiều tốn code cần thiết Tính đề tài - Đưa nhiều tập chuổi code viết NNLT C++ - Đưa số định hướng để giải toán xử lý chuổi NNLT C++ Khả ứng dụng triển khai đề tài Đề tài tài liệu tham khảo bổ ích cho Học sinh, Giáo viên THPT đặc biệt Học sinh khá, giỏi Đối tƣợng phạm vi nghiên cứu 5.1 Đối tƣợng nghiên cứu - Học sinh THPT - Giáo viên trường THPT - Các toán xử lý chuổi 5.2 Phạm vi nghiên cứu - Bám sát nội dung chương trình Tin học THPT - Mở rộng phù hợp với nội dung thi Học sinh giỏi Tỉnh Phƣơng pháp nhiệm vụ nghiên cứu 6.1 Phƣơng pháp nghiên cứu - Phương pháp phân tích, tổng hợp - Phương pháp thực nghiệm 6.2 Nhiệm vụ nghiên cứu Rút số kinh nghiệm để giải toán xử lý chuổi dạy tin học lớp 11 chương trình Tin học THPT PHẦN II NỘI DUNG NGHIÊN CỨU Cơ sở khoa học 1.1 Cơ sơ lý luận Để giải toán chuỗi cách tối ưu, học sinh phải biết khái niệm chuỗi con, thuật tốn thơng dụng; Học sinh phải có kỹ nhận dạng toán phát biểu nhiều dạng khác lựa chọn thuật tốn thích hợp để giải +) Chuỗi gì? Trong lập trình, chuỗi dãy ký tự lưu trữ dạng mảng ký tự Ví dụ, chuỗi "hello" lưu trữ mảng char s[] = {'h', 'e', 'l', 'l', 'o', '\0'} +) Chuỗi gì? Một chuỗi chuỗi mà tạo từ chuỗi ban đầu cách lấy số ký tự liên tiếp chuỗi ban đầu Ví dụ, chuỗi "ell" tạo từ chuỗi "hello" cách lấy ký tự liên tiếp vị trí thứ +) Thuật tốn tìm chuỗi Để tìm chuỗi C++, ta sử dụng thuật tốn Vét cạn, Quy hoạch động, phương pháp phát triển xâu Mỗi thuật tốn có cách hoạt động khác độ phức tạp thời gian khác nhau, tùy thuộc vào kích thước chuỗi ban đầu chuỗi cần tìm */ Một số dạng tốn thƣờng gặp: Dạng 1: Cho xâu ký tự S Yêu cầu: Tìm tất xâu S thoả mãn điều kiện Q Dạng 2: Cho xâu ký tự S Yêu cầu: Đưa đoạn ký tự xâu S thỏa mãn điều kiện Q Trong điều kiện Q có tính chất: Nếu xâu A thỏa mãn điều kiện Q thì xâu liên tục A thoả mãn điều kiện Q ta tính xâu A Dạng 3: Cho xâu ký tự S Yêu cầu: Tìm xâu dài S thỏa mãn điều kiện Q Trường hợp 1: Điều kiện Q có tính chất: Xâu A thỏa mãn điều kiện Q xâu A không thỏa mãn Q Trường hợp 2: Điều kiện Q có tính chất: Nếu xâu A thỏa mãn điều kiện Q xâu liên tục A thoả mãn tính chất Q ký tự A không xét vào xâu khác 1.2 Cơ sơ thực tiễn Chúng tơi tìm tịi toán chuổi con, nghiên cứu kỹ code đúc rút số kinh nghiệm cho thân trình dạy học Thực trạng Các toán xử lý chuổi toán Nhưng thực tế vấn đề dạy học kiểu chuổi NNLT C++, Giáo viên Học sinh cịn gặp số khó khăn hạn chế Phƣơng hƣớng giải pháp 3.1 Một số định hƣớng để viết code cho toán xử lý chuổi viết NNLT C++ Dưới số định hướng viết code cho toán xử lý chuỗi C++: Sử dụng chuỗi đệ quy (Recursion): Đây phương pháp tiếp cận toán cách sử dụng hàm đệ quy để phân tích chuỗi ban đầu thành chuỗi Điều đặc biệt hữu ích việc tìm kiếm chuỗi phù hợp với mẫu chuỗi Sử dụng vòng lặp (Loop): Sử dụng vòng lặp để duyệt qua tất ký tự chuỗi ban đầu tạo chuỗi từ ký tự đến ký tự cuối chuỗi ban đầu Điều đặc biệt hữu ích việc tìm kiếm chuỗi có độ dài cố định Sử dụng thuật toán động (Dynamic Programming): Đây phương pháp tiếp cận toán cách sử dụng bảng để lưu trữ kết phụ thuộc vào tốn giải trước Điều đặc biệt hữu ích việc giải tốn có quy mơ lớn Sử dụng thuật toán KMP (Knuth-Morris-Pratt): Đây thuật toán tối ưu cho việc tìm kiếm chuỗi phù hợp với mẫu chuỗi Thuật toán sử dụng bảng tiền xử lý để lưu trữ thông tin tiền tố hậu tố mẫu chuỗi sử dụng thơng tin để tìm kiếm chuỗi chuỗi ban đầu Sử dụng thư viện chuỗi (String Library): C++ cung cấp số thư viện chuỗi hữu ích, chẳng hạn thư viện , cho phép bạn thực thao tác chuỗi thông thường, chẳng hạn tìm kiếm chuỗi con, so sánh chuỗi cắt chuỗi Việc sử dụng thư viện chuỗi giúp tiết kiệm thời gian Phương pháp phát triển chuỗi cách để tách phần chuỗi ban đầu thành chuỗi mới, có độ dài nội dung khác Có nhiều cách để phát triển chuỗi C++, phương pháp chung bạn cần xác định vị trí bắt đầu độ dài chuỗi 3.2 Vận dụng định hƣớng để giải số toán Giáo viên đưa dạng tốn, phân tích đặc điểm tốn, ý tưởng thuật tốn ví dụ minh họa cho dạng Sau cho học sinh soạn thảo chương trình tiến hành chấm Dạng 1: Bài toán duyệt theo phƣơng pháp vét cạn 1.1/ Bài toán: Cho chuỗi kí tự S Hãy tìm tất chuổi S thoả mãn điều kiện Q 1.2/ Phân tích: Với tốn này, đề u cầu đưa tất chuỗi (các chuỗi lồng nhau, giao nhau) nên phải kiểm tra tất chuỗi Để kiểm tra hết ta phải duyệt theo phương pháp vét cạn 1.3/ Ý tưởng thuật toán: Để giải toán C++, ta sử dụng phương pháp vét cạn, tức kiểm tra tất chuỗi S có thỏa mãn điều kiện Q hay khơng Cụ thể, ta duyệt qua tất vị trí i, j (i ≤ j) chuỗi S lấy chuỗi từ vị trí i đến j Sau đó, kiểm tra xem chuỗi có thỏa mãn điều kiện Q hay khơng Nếu có, ta lưu lại đoạn ký tự tìm tiếp tục duyệt đến vị trí Để kiểm tra chuỗi có thỏa mãn điều kiện Q hay khơng, ta cần định nghĩa điều kiện Ví dụ, điều kiện chuỗi có chứa chữ số, ta duyệt qua ký tự chuỗi kiểm tra xem ký tự có phải số hay khơng Nếu có ký tự số, ta coi chuỗi thỏa mãn điều kiện Q Sau duyệt qua tất vị trí chuỗi S, ta có tất đoạn ký tự thỏa mãn điều kiện Q Ta in đoạn kết thúc chương trình Dưới code cách giải toán C++ #include #include using namespace std; int main() { string s; getline(cin, s); // nhập xâu ký tự for (int i = 0; i < s.length(); i++) { for (int j = i; j < s.length(); j++) { string sub = s.substr(i, j - i + 1); // lấy xâu từ vị trí i đến j // kiểm tra xâu có thỏa mãn điều kiện Q hay không if (/*Điều kiện Q*/) { cout

Ngày đăng: 27/07/2023, 08:44

w