(SKKN mới NHẤT) sử DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG để GIẢI một số bài TOÁN có TÍNH TRUY hồi TRONG NGÔN NGỮ lập TRÌNH c++

39 6 0
(SKKN mới NHẤT) sử DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG để GIẢI một số bài TOÁN có TÍNH TRUY hồi TRONG NGÔN NGỮ lập TRÌNH c++

Đ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 NGHỆ AN Đơn vị: Trƣờng THPT Phan Đăng Lƣu SÁNG KIẾN KINH NGHIỆM Đề tài: SỬ DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG ĐỂ GIẢI MỘT SỐ BÀI TỐN CĨ TÍNH TRUY HỒI TRONG NGƠN NGỮ LẬP TRÌNH C++ Mơn/Lĩnh vực: Tin học Ngƣời thực hiện: Nguyễn Thị Thƣơng Hồ Văn Chiến Tổ: Toán - Tin Điện thoại: 0976607114 - 0979783682 Có đính kèm: Mơ hình Phần mềm Phim ảnh Hiện vật khác Năm học: 2021 - 2022 TIEU LUAN MOI download : skknchat@gmail.com MỤC LỤC Phần I ĐẶT VẤN ĐỀ 1 Lý chọn đề tài Mục tiêu, nhiệm vụ đề tài Đối tƣợng nghiên cứu Phƣơng pháp nghiên cứu Phần II NỘI DUNG NGHIÊN CỨU 1.Cơ sở lý luận 2 Thực trạng vấn đề nghiên cứu Nội dung vấn đề nghiên cứu 3.1 Tên chủ đề 3.2 Cơ sở lý thuyết 3.2.1 Khái niệm phƣơng pháp quy hoạch động 3.2.2 Các bƣớc giải toán quy hoạch động 3.2.3 Biện pháp lựa chọn cài đặt chƣơng trình 3.3 Các tập áp dụng 3.3.1 Dạng toán dãy liên tiếp 3.3.2 Dạng toán dãy không liên tiếp 10 3.3.3 Dạng toán Dãy có tổng S 18 3.3.4 Dạng toán Biến đổi xâu 22 3.3.5 Dạng toán Ghép cặp 30 Phần III KẾT LUẬN VÀ KIẾN NGHỊ 36 3.1 Kết luận 36 3.2 Kiến nghị 36 TÀI LIỆU THAM KHẢO 37 TIEU LUAN MOI download : skknchat@gmail.com Phần I ĐẶT VẤN ĐỀ: Lý chọn đề tài: Chúng ta thấy Tin Học đƣợc ứng dụng vào hầu hết tất lĩnh vực sống đóng vai trị lớn phát triển xã hội Thấy đƣợc tầm quan trọng Tin học, giới nói chung Việt Nam nói riêng có đầu tƣ lớn cho lĩnh vực Đặc biệt giáo dục nâng cao dân trí Tin Học đào tạo nguồn nhân lực có chất lƣợng cao Phụ huynh hệ học sinh sau bắt đầu trọng chọn nghành nghề liên quan đến công nghệ thông tin nhiều Tuy nhiên hệ thống giáo dục nƣớc ta môn Tin học chƣa đƣợc quan tâm với tầm quan trọng Tin Học bị xem môn phụ trƣờng học dẫn đến học sinh đầu tƣ cho mơn học này, gây khơng khó khăn cho giáo viên nhà trƣờng đặc biệt chọn đội ngũ học sinh giỏi Mặt khác mơn Tin học có đặc thù riêng, học sinh giỏi thi chủ yếu chấm tự động phần mềm themis nên phụ thuộc lớn vào thời gian thực (thời gian chạy) chƣơng trình giới hạn độ lớn liệu mà toán yêu cầu Vì lập trình ngồi việc ý đến giới hạn liệu tốn cần lựa chọn thuật toán tối ƣu để đảm bảo yêu cầu tốn đặt Vì để giải tốn Tin Học thƣờng phải xác định đƣợc: - Bài toán thuộc lớp - Sử dụng phƣơng pháp tối ƣu để giải Trong q trình nghiên cứu bồi dƣỡng học sinh giỏi gặp nhiều tốn dãy tốn xử lí xâu Đây nội dung phổ biến đề thi học sinh giỏi nội dung khó Với mong muốn tìm giải pháp tối ƣu cho tốn này, chúng tơi mạnh dạn trình bày sáng kiến kinh nghiệm: SỬ DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG ĐỂ GIẢI MỘT SỐ BÀI TỐN CĨ TÍNH TRUY HỒI TRONG NGƠN NGỮ LẬP TRÌNH C++ Mục tiêu, nhiệm vụ đề tài: Nhằm giúp học sinh đứng trƣớc toán, xác định đƣợc tốn áp dụng đƣợc quy hoạch động không cách giải cụ thể nhƣ nào, đánh giá, so sánh đƣợc thời gian thực chƣơng trình (độ phức tạp thuật tốn) Cách nhận diện lập công thức quy hoạch động Đối tƣợng nghiên cứu: Sử dụng phƣơng pháp quy hoạch động để giải số tốn có tính truy hồi C++ nhƣ: Tìm dãy con; đếm dãy con; Tính tổng dãy con; tốn liên quan đến xâu nhƣ tìm xâu chung dài biến đổi xâu TIEU LUAN MOI download : skknchat@gmail.com Phƣơng pháp nghiên cứu: Để trình bày sáng kiến kinh nghiệm sử dụng kết hợp nhiều phƣơng pháp nhƣ: Nghiên cứu tài liệu, nghiên cứu theo chuyên đề, thực nghiệm, so sánh, phân tích kết thực nghiệm, ý kiến đóng góp đồng nghiệp thực tiễn giảng dạy Phần II NỘI DUNG NGHIÊN CỨU: Cơ sở lý luận: Sự phát triển nhƣ vũ bão Tin học đóng góp lớn Tin học phát triển xã hội phủ nhận đƣợc, đặc biệt dịp dịch Covid 19 vai trò Tin học đƣợc khẳng định, ngƣời dân nói chung phụ huynh học sinh nói riêng nhìn thấy đƣợc vai trị quan trọng Tin học lĩnh vực kinh tế, văn hóa giáo dục Chắc chắn ngƣời có nhìn nhận khác thấy mơn Tin Học quan trọng Xã hội phát triển, đòi hỏi Tin học phát triển để đáp ứng nhu cầu xã hội Để đáp ứng đòi hỏi phát triển phải có kế hoạch đào tạo bồi dƣỡng cá nhân có niềm say mê có khiếu lĩnh vực tin học trang bị vốn kiến thức sở vững chắc, giúp cho mục tiêu trƣớc đón đầu, rút ngắn khoảng cách trình độ tin học nƣớc ta giới Trong trình nghiên cứu, giảng dạy, gặp nhiều tập toán tin Các tập dạng phong phú đa dạng Thực tế chƣa có thuật tốn hồn chỉnh áp dụng cho tốn Tuy nhiên ngƣời ta tìm số thuật toán chung nhƣ: tham lam, quay lui, quy hoạch động, giải thuật đồ thị Các thuật tốn áp dụng để giải lớp rộng toán hay gặp thực tế Trong q trình ơn thi học sinh giỏi trƣờng, việc truyền đạt kiến thức số thuật toán nhƣ: quay lui, quy hoạch động, tham lam, giải thuật đồ thị… cần thiết cho học sinh để phát triển tƣ lập trình giải tốn tin học Tạo lập củng cố lịng say mê tìm hiểu khám phá cho học sinh giải toán tin Trong q trình dạy bồi dƣỡng chúng tơi nhận thấy, học sinh thực tốt việc lựa chọn cài đặt chƣơng trình tối ƣu giải tập dãy tập xử lí xâu nói riêng tập lập trình nói chung chất lƣợng học sinh giỏi đƣợc nâng cao Thực trạng vấn đề nghiên cứu: Thực trạng dạy học môn Tin học trƣờng phổ thông Phan Đăng Lƣu nay: Hiện nhu cầu xã hội cần nhiều kĩ sƣ Công Nghệ Thông tin lao động có trình độ cao Tuy nhiên việc đào bồi dƣơng học sinh u thích mơn tin học trƣờng phổ thơng gặp nhiều khó khăn TIEU LUAN MOI download : skknchat@gmail.com - Môn Tin học bị xem môn “phụ”, không tham gia thi tốt nghiệp hay đại học cao đẳng môn Tin Học chƣa nhận đƣợc quan tâm nhà trƣờng nhƣ phụ huynh học sinh Mặt khác, để lập trình địi hỏi học sinh phải có kiến thức tốt, phải có khả tƣ đam mê Vì động viên tuyển chọn đƣợc em vào đội tuyển học sinh giỏi mơn tin học trƣờng khó Trong thực trạng chúng tơi muốn tìm hiểu, nghiên cứu, truyền kinh nghiệm, hiểu biết để truyền lại đam mê cho học sinh ham thích mơn Tin học Nội dung vấn đề nghiên cứu: 3.1 Tên chủ đề: SỬ DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG ĐỂ GIẢI MỘT SỐ BÀI TỐN CĨ TÍNH TRUY HỒI TRONG NGƠN NGỮ LẬP TRÌNH C++ 3.2 Cơ sở lý thuyết: 3.2.1 Khái niệm phương pháp quy hoạch động: Các thuật tốn đệ quy có ƣu điểm dễ cài đặt, nhiên chất trình đệ quy, chƣơng trình thƣờng kéo theo địi hỏi lớn khơng gian nhớ khối lƣợng tính tốn khổng lồ, nên thuật toán hiệu cần thiết Và trƣờng hợp nhƣ vậy, quy hoạch động thuật toán đƣợc lựa chọn nhiều Quy hoạch động (Dynamic programming) kỹ thuật nhằm đơn giản hóa việc tính tốn cơng thức truy hồi cách lưu trữ toàn hay phần kết tính tốn bước với mục đích sử dụng lại Bản chất quy hoạch động thay mơ hình tính tốn “từ xuống” (Top-down) mơ hình tính tốn “từ lên” (Bottom-up) Từ “programming” khơng liên quan tới việc lập trình cho máy tính, thuật ngữ mà nhà toán học hay dùng để bƣớc chung việc giải dạng toán hay lớp vấn đề Khơng có thuật tốn tổng quát để giải tất toán quy hoạch động Mục đích phần cung cấp cách tiếp cận việc giải toán tối ƣu mang chất đệ quy, đồng thời đƣa ví dụ từ dễ đến khó để học sinh làm quen hình thành kỹ việc tiếp cận toán quy hoạch động 3.2.2 Các bước giải toán quy hoạch động: Có bƣớc để giải tốn quy hoạch động: Bước 1: Xây dựng hàm mục tiêu: TIEU LUAN MOI download : skknchat@gmail.com Áp dụng nguyên lý tối ƣu Bellman ta phân rã toán ban đầu thành toán dạng có kích thƣớc nhỏ hơn, cho việc giải toán cấp phụ thuộc vào kết tốn trƣớc Bước 2: Xác định toán sở: Bài toán sở tốn nhỏ mà ta biết kết tính đƣợc kết dễ dàng Đây sở để tính nghiệm cho toán cấp lớn Bước 3: Xây dựng công thức truy hồi: Căn vào ý nghĩa hàm mục tiêu, tìm mối liên hệ tốn cấp, ta tiến hành xây dựng cơng thức tính kết tốn cấp i dựa vào kết toán cấp trƣớc Lời giải đƣợc lƣu vào mảng chiều mảng chiều (gọi bảng phƣơng án) Bước 4: Dựa vào bảng phƣơng án, truy vết để tìm phƣơng án tối ƣu 3.2.3 Biện pháp lựa chọn cài đặt chương trình: Khi dùng thuật tốn quy hoạch động: Phƣơng pháp quy hoạch động dùng để giải tốn tối ƣu có chất đệ quy, tức việc tìm phƣơng án tối ƣu cho tốn đƣa tìm phƣơng án tối ƣu số hữu hạn toán Đối với nhiều thuật tốn đệ quy tìm hiểu, nguyên lý chia để trị (divide and conquer) thƣờng đóng vai trị chủ đạo việc thiết kế thuật toán Để giải toán lớn, ta chia làm nhiều tốn dạng với để giải độc lập Trong phƣơng pháp quy hoạch động, nguyên lý đƣợc thể rõ: Khi cần phải giải toán nào, ta giải tất toán lƣu trữ lời giải hay đáp số chúng với mục đích sử dụng lại theo phối hợp để giải tốn tổng qt Đó điểm khác Quy hoạch động phép phân giải đệ quy nội dung phƣơng pháp quy hoạch động Phép phân giải đệ quy toán lớn phân rã thành nhiều toán giải tốn Việc giải toán lại đƣa phép phân rã tiếp thành nhiều toán nhỏ lại giải tiếp tốn nhỏ đƣợc giải hay chƣa Quy hoạch động việc giải tất toán nhỏ (bài tốn sở) để từ bƣớc giải toán lớn hơn, giải đƣợc toán lớn (bài toán ban đầu) Nhận thấy:  Trƣớc áp dụng phƣơng pháp quy hoạch động ta phải xét xem phƣơng pháp có thoả mãn yêu cầu dƣới hay không:  Bài toán lớn phải phân rã đƣợc thành nhiều toán con, mà phối TIEU LUAN MOI download : skknchat@gmail.com hợp lời giải toán cho ta lời giải tốn lớn  Vì quy hoạch động giải tất tốn con, nên khơng đủ khơng gian vật lý lƣu trữ lời giải (bộ nhớ, đĩa…) để phối hợp chúng phƣơng pháp quy hoạch động khơng thể thực đƣợc  Q trình từ tốn sở tìm lời giải tốn ban đầu phải qua hữu hạn bƣớc Cài đặt chƣơng trình: Các bƣớc cài đặt chƣơng trình phƣơng pháp quy hoạch động Bước Giải tất toán sở (thông thƣờng dễ), lƣu lời giải vào bảng phƣơng án Bước Dùng công thức truy hồi phối hợp lời giải toán nhỏ lƣu bảng phƣơng án để tìm lời giải toán lớn lƣu chúng vào bảng phƣơng án Cho tới toán ban đầu tìm đƣợc lời giải Bước Dựa vào bảng phƣơng án, truy vết tìm nghiệm tối ƣu Các hƣớng thực quy hoạch động: - Quy hoạch động ngƣợc: Phƣơng pháp quy hoạch động ngƣợc phƣơng pháp đƣợc sử dụng rộng rãi, tƣơng ứng với suy nghĩ tự nhiên Chúng ta đọc đề bài, suy nghĩ cách giải cho Cách giải u cầu phải giải tốn nhỏ hơn, nhƣ kiểu làm toán ngày phải chứng minh bổ đề Chúng ta tiếp tục suy nghĩ cho tốn này, tổng hợp để tìm lời giải cho tốn lớn Q trình tiếp tục nhƣ vậy, quy hoạch động kiểu “ngƣợc” đƣợc xây dựng nhƣ Ngoài ra, mặt lập trình, kiểu quy hoạch động có mối quan hệ tƣơng đối gần gũi với đệ quy Một toán lớn đƣợc giải dựa vào toán tƣơng tự (và tƣơng tự toán lớn) việc áp dụng đệ quy phƣơng pháp dễ dàng để code Vì vậy, nhiều trƣờng hợp, coi quy hoạch động cách để tối ƣu phƣơng pháp đệ quy để giải tốn Ví dụ: Xâu chung dài Cho hai xâu ký tự Tìm độ dài xâu chung nhỏ chúng Ví dụ với xâu "quetzalcoatl" "tezcatlipoca" xâu chung dài "ezaloa" với độ dài Với toán này, lần lƣợt giải toán nhƣ sau: Lấy i ký tự từ xâu thứ j ký tự từ xâu thứ hai tìm độ dài xâu chung dài xâu đƣợc lấy Dễ dàng thấy đƣợc rằng, lời giải toán phụ thuộc vào i j, L(i, j) Và toán lớn đƣợc TIEU LUAN MOI download : skknchat@gmail.com giải cách lần lƣợt giải toán lần lƣợt từ L(0, 0) tăng dần độ dài xâu đƣợc lấy lấy toàn xâu đề Chúng ta bắt đầu lần lƣợt toán Đƣơng nhiên, hai xâu rỗng xâu chung chúng rỗng Vậy L(0, j) = L(i, 0) = Nếu i j dƣơng, cần suy xét vài trƣờng hợp Nếu ký tự cuối xâu thứ khơng có mặt xâu chung dài nhất, bị bỏ qua mà khơng ảnh hƣởng đến kết Cơng thức L(i, j) = L(i - 1, j) Tƣơng tự nhƣ trƣờng hợp trên, ký tự cuối xâu thứ hai khơng ảnh hƣởng đến kết L(i, j) = L(i, j - 1) Trƣờng hợp cuối cùng, hai ký tự cuối hai xâu x1, x2 có mặt xâu chung dài Dĩ nhiên hai ký tự phải điều xảy ra, tức x1 == x2 Trong trƣờng hợp này, xoá ký tự hai ký tự khiến xâu chung dài ngắn ký tự Vậy rõ ràng L(i, j) = L(i - 1, j - 1) + Trong ba trƣờng hợp trên, phải chọn trƣờng hợp cho kết xâu chung dài (với tốn cần đƣa độ dài đủ) - Quy hoạch động xi: Ngồi kiểu quy hoạch động ngƣợc này, có kiểu quy hoạch động “xuôi” Tuy không phổ biến, kiểu quy hoạch động xi khó áp dụng, nhƣng quy hoạch động “xuôi” mang đến cho nhiều tiện lợi Kiểu xi cần duyệt qua tốn từ nhỏ đến lớn, nhƣng với toán con, tính tốn kết từ tìm cách thực số phép tính để giải toán lớn Nghĩa là, với toán con, nhìn phía trƣớc để xem phải giải toán nhƣ từ tốn Phƣơng pháp khó áp dụng phƣơng pháp ngƣợc kia, toán áp dụng đƣợc Với toán, việc xác định bƣớc tƣơng đối khó khăn, chí việc kiểm tra tính sai phƣơng pháp không dễ dàng Nhƣ thấy phần trƣớc, thơng thƣờng, tốn cần phải giải cách tổng hợp kết từ vài tốn trƣớc Vì vậy, cách quy hoạch động xuôi sử dụng tốn để tính tốn trƣớc tốn cho phần kết khơng phải kết cuối Vì vậy, để thực quy hoạch động xuôi, việc điền sẵn mảng giá trị trung tính điều bắt buộc (sau cộng dồn kết vào giải đƣợc tốn mới) Ví dụ: Xâu chung dài nhất: Với toán này, chọn giá trị trung tính số âm Chúng ta tìm cách quy hoạch động xuôi nhƣ sau: TIEU LUAN MOI download : skknchat@gmail.com  L(0,0) = toán với hai xâu rỗng Với toán L(i, j) tìm cách tính tốn kết cho tốn lớn Lúc này, có hƣớng phát triển tiếp:  Lấy thêm ký tự từ xâu thứ => Kết không thay đổi Lấy thêm ký tự từ xâu thứ hai => Kết không thay đổi Nếu ký tự hai xâu giống => Lấy tự từ độ dài xâu chung tăng lên 3.3 Các tập áp dụng: 3.3.1 Dạng toán dãy liên tiếp: Mơ hình: Bài tốn điển hình: Cho dãy a1,a2, an (1 > n; int res=0; for (int i = 1; i > a[i]; L[1]=1; for (int i = 2; i

Ngày đăng: 03/07/2022, 17:13

Hình ảnh liên quan

Bảng phƣơng án là một mảng một chiề uL để lƣu trữ các giá trị của hàm QHĐ L[i]. Chƣơng trình tính các giá trị của mảng L nhƣ sau:   - (SKKN mới NHẤT) sử DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG để GIẢI một số bài TOÁN có TÍNH TRUY hồi TRONG NGÔN NGỮ lập TRÌNH c++

Bảng ph.

ƣơng án là một mảng một chiề uL để lƣu trữ các giá trị của hàm QHĐ L[i]. Chƣơng trình tính các giá trị của mảng L nhƣ sau: Xem tại trang 10 của tài liệu.
Mô hình: Bài toán điển hình: Cho dãy a1,a2,..an (1 <= n <= 10 3 ).   - (SKKN mới NHẤT) sử DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG để GIẢI một số bài TOÁN có TÍNH TRUY hồi TRONG NGÔN NGỮ lập TRÌNH c++

h.

ình: Bài toán điển hình: Cho dãy a1,a2,..an (1 <= n <= 10 3 ). Xem tại trang 12 của tài liệu.
3.3.2. Dạng bài toán về dãy con không liên tiếp: - (SKKN mới NHẤT) sử DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG để GIẢI một số bài TOÁN có TÍNH TRUY hồi TRONG NGÔN NGỮ lập TRÌNH c++

3.3.2..

Dạng bài toán về dãy con không liên tiếp: Xem tại trang 12 của tài liệu.
bảng xuống cò nS phần tử. - (SKKN mới NHẤT) sử DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG để GIẢI một số bài TOÁN có TÍNH TRUY hồi TRONG NGÔN NGỮ lập TRÌNH c++

bảng xu.

ống cò nS phần tử Xem tại trang 21 của tài liệu.
Biến đổi xâu là một trong số bài toán điển hình minh họa dễ hiểu nhất cho việc sử dụng thuật toán quy hoạch động - (SKKN mới NHẤT) sử DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG để GIẢI một số bài TOÁN có TÍNH TRUY hồi TRONG NGÔN NGỮ lập TRÌNH c++

i.

ến đổi xâu là một trong số bài toán điển hình minh họa dễ hiểu nhất cho việc sử dụng thuật toán quy hoạch động Xem tại trang 24 của tài liệu.
cout<<"\nSo buoc: "<<step<<"\n"; // in ra màn hình // Truy vết  - (SKKN mới NHẤT) sử DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG để GIẢI một số bài TOÁN có TÍNH TRUY hồi TRONG NGÔN NGỮ lập TRÌNH c++

cout.

<<"\nSo buoc: "<<step<<"\n"; // in ra màn hình // Truy vết Xem tại trang 27 của tài liệu.
Để dễ hiểu hơn chúng ta xem hình minh họa dƣới đây: - (SKKN mới NHẤT) sử DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG để GIẢI một số bài TOÁN có TÍNH TRUY hồi TRONG NGÔN NGỮ lập TRÌNH c++

d.

ễ hiểu hơn chúng ta xem hình minh họa dƣới đây: Xem tại trang 29 của tài liệu.
Truy vết để tìm và in ra xâu con ra màn hình sẽ dựa vào bảng kết quả mà ta tìm đƣợc ở phần trên - (SKKN mới NHẤT) sử DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG để GIẢI một số bài TOÁN có TÍNH TRUY hồi TRONG NGÔN NGỮ lập TRÌNH c++

ruy.

vết để tìm và in ra xâu con ra màn hình sẽ dựa vào bảng kết quả mà ta tìm đƣợc ở phần trên Xem tại trang 30 của tài liệu.
Mô hình: Bài toán điển hình: (Olympic Quốc tế năm 1999.) - (SKKN mới NHẤT) sử DỤNG PHƢƠNG PHÁP QUY HOẠCH ĐỘNG để GIẢI một số bài TOÁN có TÍNH TRUY hồi TRONG NGÔN NGỮ lập TRÌNH c++

h.

ình: Bài toán điển hình: (Olympic Quốc tế năm 1999.) Xem tại trang 32 của tài liệu.

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

Tài liệu liên quan