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

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 3 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

Thông tin cơ bản

Tiêu đề 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++
Tác giả Nguyễn Thị Thương, Hồ Văn Chiến
Trường học Trường THPT Phan Đăng Lưu
Chuyên ngành Tin học
Thể loại sáng kiến kinh nghiệm
Năm xuất bản 2021 - 2022
Thành phố Nghệ An
Định dạng
Số trang 39
Dung lượng 1,04 MB

Cấu trúc

  • Phần I. ĐẶT VẤN ĐỀ (3)
    • 1. Lý do chọn đề tài (3)
    • 2. Mục tiêu, nhiệm vụ của đề tài (3)
    • 3. Đối tƣợng nghiên cứu (3)
    • 4. Phương pháp nghiên cứu (4)
  • Phần II. NỘI DUNG NGHIÊN CỨU (4)
    • 2. Thực trạng vấn đề nghiên cứu (4)
    • 3. Nội dung vấn đề nghiên cứu (5)
      • 3.1. Tên chủ đề (5)
      • 3.2. Cơ sở lý thuyết (5)
        • 3.2.1. Khái niệm về phương pháp quy hoạch động (5)
        • 3.2.2. Các bước giải bài toán quy hoạch động (5)
        • 3.2.3. Biện pháp lựa chọn và cài đặt chương trình (6)
      • 3.3. Các bài tập áp dụng (9)
        • 3.3.1. Dạng bài toán về dãy con liên tiếp (9)
        • 3.3.2. Dạng bài toán về dãy con không liên tiếp (12)
        • 3.3.3. Dạng bài toán Dãy con có tổng bằng S (20)
        • 3.3.4. Dạng bài toán Biến đổi xâu (24)
        • 3.3.5. Dạng bài toán Ghép cặp (32)
  • Phần III. KẾT LUẬN VÀ KIẾN NGHỊ (38)
    • 3.1. Kết luận (0)
    • 3.2. Kiến nghị (0)
  • TÀI LIỆU THAM KHẢO (39)

Nội dung

NỘI DUNG NGHIÊN CỨU

Thực trạng vấn đề nghiên cứu

Thực trạng dạy học môn Tin học trong trường phổ thông Phan Đăng Lưu hiện nay:

Hiện nay, nhu cầu về kỹ sư Công Nghệ Thông tin và lao động trình độ cao đang gia tăng Tuy nhiên, việc đào tạo và phát triển học sinh yêu thích môn Tin học tại các trường phổ thông đang gặp nhiều khó khăn.

Môn Tin học hiện vẫn bị coi là môn học "phụ", không được tham gia vào kỳ thi tốt nghiệp hay tuyển sinh đại học, dẫn đến việc thiếu sự quan tâm từ phía nhà trường, phụ huynh và học sinh.

Mặt khác, để lập trình đòi hỏi học sinh phải có một kiến thức cơ bản tốt, phải có khả năng về tƣ duy và đam mê

Vì vậy động viên và tuyển chọn đƣợc các em vào đội tuyển học sinh giỏi môn tin học ở trường rất khó

Trong bối cảnh hiện tại, chúng tôi mong muốn nghiên cứu và chia sẻ những kinh nghiệm, kiến thức của mình nhằm khơi dậy niềm đam mê học tập môn Tin học cho các học sinh yêu thích lĩnh vực này.

Nội dung vấn đề nghiên cứu

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.2.1 Khái niệm về phương pháp quy hoạch động:

Các thuật toán đệ quy dễ cài đặt nhưng thường yêu cầu nhiều bộ nhớ và tính toán lớn, do đó, cần thiết phải có một thuật toán hiệu quả Trong những trường hợp này, quy hoạch động là một trong những lựa chọn phổ biến nhất.

Quy hoạch động (Dynamic programming) là một kỹ thuật tối ưu hóa quá trình tính toán các công thức truy hồi bằng cách lưu trữ kết quả ở mỗi bước để tái sử dụng Kỹ thuật này thay thế mô hình tính toán "từ trên xuống" (Top-down) bằng mô hình tính toán hiệu quả hơn, giúp giảm thiểu thời gian và công sức tính toán.

“từ dưới lên” (Bottom-up)

Thuật ngữ "programming" trong ngữ cảnh này không đề cập đến lập trình máy tính, mà là khái niệm được các nhà toán học sử dụng để mô tả các bước chung trong việc giải quyết các bài toán hoặc vấn đề cụ thể Đặc biệt, không tồn tại một thuật toán tổng quát nào có thể giải quyết tất cả các bài toán quy hoạch động.

Phần này nhằm giới thiệu một phương pháp mới để giải quyết các bài toán tối ưu đệ quy, kèm theo ví dụ từ dễ đến khó, giúp học sinh làm quen và phát triển kỹ năng trong việc tiếp cận các bài toán quy hoạch động.

3.2.2 Các bước giải bài toán quy hoạch động:

Có 4 bước để giải 1 bài toán bằng quy hoạch động:

Bước 1: Xây dựng hàm mục tiêu:

Áp dụng nguyên lý tối ưu của Bellman, chúng ta có thể phân rã bài toán ban đầu thành các bài toán con cùng loại nhưng có kích thước nhỏ hơn Việc giải quyết các bài toán con này sẽ phụ thuộc vào kết quả của các bài toán con trước đó.

Bước 2: Xác định bài toán cơ sở:

Bài toán cơ sở là những bài toán nhỏ nhất mà chúng ta có thể dễ dàng biết hoặc tính được kết quả Đây là nền tảng quan trọng để giải quyết các bài toán phức tạp hơn.

Bước 3: Xây dựng công thức truy hồi:

Dựa trên ý nghĩa của hàm mục tiêu, chúng ta xác định mối liên hệ giữa các bài toán con ở các cấp độ khác nhau để xây dựng công thức tính kết quả cho bài toán cấp i Kết quả của bài toán cấp i sẽ được tính dựa vào kết quả của các bài toán con ở cấp trước Các lời giải sẽ được lưu trữ trong mảng một chiều hoặc mảng hai chiều, được gọi là 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 và cài đặt chương trình:

Khi nào thì dùng thuật toán quy hoạch động:

Phương pháp quy hoạch động là kỹ thuật giải bài toán tối ưu có tính chất đệ quy, cho phép tìm ra phương án tối ưu bằng cách phân chia bài toán thành các bài toán con hữu hạn Khác với nguyên lý chia để trị, quy hoạch động không chỉ giải quyết một số bài toán con mà còn lưu trữ các lời giải của chúng để tái sử dụng, từ đó hỗ trợ giải quyết các bài toán tổng quát hơn Sự khác biệt này giữa quy hoạch động và phân giải đệ quy chính là cốt lõi của phương pháp quy hoạch động.

Phép phân giải đệ quy là phương pháp giải quyết một bài toán lớn bằng cách chia nó thành nhiều bài toán con Mỗi bài toán con lại tiếp tục được phân rã thành những bài toán nhỏ hơn, và quá trình này lặp lại cho đến khi đạt được các bài toán có thể giải quyết một cách dễ dàng.

Quy hoạch động là phương pháp giải quyết vấn đề bằng cách bắt đầu từ những bài toán cơ sở nhỏ nhất, sau đó từng bước tiến tới việc giải quyết các bài toán lớn hơn, cho đến khi đạt được giải pháp cho bài toán ban đầu.

 Trước khi á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 những yêu cầu dưới đây hay không:

 Bài toán lớn phải phân rã đƣợc thành nhiều bài toán con, mà sự phối

5 hợp lời giải của các bài toán con đó cho ta lời giải của bài toán lớn

Quy hoạch động yêu cầu phải giải quyết tất cả các bài toán con, do đó, nếu không có đủ không gian lưu trữ để phối hợp các lời giải (như bộ nhớ hoặc đĩa), phương pháp này sẽ không thể thực hiện được.

 Quá trình từ bài toán cơ sở tìm ra lời giải bài toán ban đầu phải qua hữu hạn bước

Các bước cài đặt một chương trình bằng phương pháp quy hoạch động

Bước 1 Giải tất cả các bài toán cơ sở (thông thường rất dễ), lưu các lời giải vào bảng phương án

Bước 2 là áp dụng công thức truy hồi để kết hợp các giải pháp từ những bài toán nhỏ đã được lưu trữ trong bảng phương án, nhằm tìm ra lời giải cho các bài toán lớn hơn Quá trình này tiếp tục cho đến khi tìm được lời giải cho bài toán ban đầu và lưu lại kết quả vào bảng phương án.

Bước 3 Dựa vào bảng phương án, truy vết tìm ra nghiệm tối ưu

Các hướng thực hiện quy hoạch động:

Phương pháp quy hoạch động ngược là một kỹ thuật phổ biến, phù hợp với cách tư duy tự nhiên của con người Khi gặp một bài toán, chúng ta thường nghĩ đến cách giải quyết bằng cách chia nhỏ thành những bài toán con, tương tự như việc chứng minh các bổ đề trong toán học Quá trình này bao gồm việc phân tích và giải quyết từng bài toán nhỏ, sau đó tổng hợp lại để tìm ra lời giải cho bài toán lớn Quy hoạch động ngược được xây dựng dựa trên nguyên tắc này, giúp tối ưu hóa và giải quyết các vấn đề phức tạp một cách hiệu quả.

Quy hoạch động có mối quan hệ chặt chẽ với đệ quy trong lập trình, khi một bài toán lớn được giải quyết thông qua các bài toán con tương tự Việc áp dụng đệ quy thường là phương pháp dễ dàng để lập trình, nhưng quy hoạch động có thể được coi là cách tối ưu hóa quy trình này, giúp giải quyết bài toán một cách hiệu quả hơn.

Ví dụ: Xâu con chung dài nhất

Cho hai xâu ký tự, nhiệm vụ là tìm độ dài xâu con chung nhỏ nhất giữa chúng Ví dụ, với hai xâu "quetzalcoatl" và "tezcatlipoca", xâu con chung dài nhất là "ezaloa" với độ dài 6.

Với bài toán này, chúng ta sẽ lần lƣợt giải các bài toán con nhƣ sau:

Ngày đăng: 02/07/2022, 19:35

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: - 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: (Trang 10)
Mô hình: Bài toán điển hình: - 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: (Trang 12)
10cin>>n; - 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++
10cin >>n; (Trang 12)
bảng xuống cò nS phần 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ử (Trang 21)
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 - 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 (Trang 24)
cout<<"\nSo buoc: "<<step<<"\n"; // in ra màn hình // Truy vế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 (Trang 27)
Để dễ hiểu hơn chúng ta xem hình minh họa dƣới đây: - 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: (Trang 29)
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 - 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 (Trang 30)
Mô hình: Bài toán điển hình: (Olympic Quốc tế năm 1999.) - 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.) (Trang 32)

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w