1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giúp học sinh tiếp cận với phương pháp quy hoạch động bằng một số bài toán đơn giản trong tin học

33 38 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 đề Giúp học sinh tiếp cận với phương pháp quy hoạch động bằng một số bài toán đơn giản trong tin học
Trường học Trường Trung học phổ thông
Chuyên ngành Tin học
Thể loại Sáng kiến kinh nghiệm
Định dạng
Số trang 33
Dung lượng 491,63 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Quy hoạch động là một phương pháp giảm thời gian chạy của các thuật toán thể hiện các tính chất của các bài toán con gối nhau Overlapping subproblem và cấu trúc contối ưu Optimal substru

Trang 1

MỤC LỤC

CÁC KÝ HIỆU VIẾT TẮT TRONG SÁNG KIẾN KINH NGHIỆM 3

I Lời giới thiệu 4

II Tên sáng kiến: 5

III Tác giả sáng kiến: 5

IV Chủ đầu tư tạo ra sáng kiến: 5

V Lĩnh vực áp dụng sáng kiến: 5

VI Ngày sáng kiến được áp dụng lần đầu hoặc áp dụng thử: 5

VII Mô tả bản chất của sáng kiến: 5

PHẦN I: SƠ ĐỒ NỘI DUNG SÁNG KIẾN KINH NGHIỆM 6

PHẦN II: NỘI DUNG SÁNG KIẾN KINH NGHIỆM 7

I Một số khái niệm cơ bản về phương pháp quy hoạch động 7

1.1 Khái niệm 7

1.2 Các bước giải quyết bài toán bằng phương pháp quy hoạch động 7

II So sánh phương pháp quy hoạch động với các phương pháp khác 11

2.1 Phương pháp quy hoạch động và phương pháp đệ quy 11

2.2 Phương pháp quy hoạch động và phương pháp vét cạn 15

III Cài đặt chương trình cho một số bài toán đơn giản thường gặp 15

Ví dụ 1: Bài toán tính an (n là số nguyên dương) 16

Ví dụ 2: Tính n! (n là số nguyên dương) 18

Ví dụ 3: Dãy số fibonacci: 20

Ví dụ 4: Bài toán tháp Hà Nội 22

Ví dụ 5: Bài toán cái túi 24

IV Bài tập tự giải 29

Bài toán 1: Dãy con có tổng bằng S 29

Bài toán 2: Dãy con có tổng lớn nhất 29

Bài toán 3: Chia kẹo 30

VIII Những thông tin cần bảo mật: Không 30

Trang 2

IX Các điều kiện cần thiết để áp dụng sáng kiến: Học sinh đội tuyển Tin học lớp 10,

11, 12 30

X Đánh giá lợi ích thu được hoặc dự kiến có thể thu được do áp dụng sáng kiến theo

ý kiến của tác giả: 30

XI Danh sách những tổ chức/cá nhân đã tham gia áp dụng thử hoặc áp dụng sángkiến lần đầu: 32TÀI LIỆU THAM KHẢO 33

Trang 3

CÁC KÝ HIỆU VIẾT TẮT TRONG SÁNG KIẾN KINH NGHIỆM

Trang 4

BÁO CÁO KẾT QUẢ NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN

I Lời giới thiệu

Hiện nay, công nghệ thông tin xuất hiện ở mọi nơi, sự phát triển nhanh chóngcủa nó giúp cuộc sống của con người trở nên tốt đẹp hơn Công nghệ thông tin giúpcác nhà khoa học tạo ra những nghiên cứu vượt bậc nhờ việc tính toán và xử lý mộtkhối lượng công việc khổng lồ của máy tính Chúng có thể thực hiện hàng tỷ phéptính trong vài giây Rất nhiều phần mềm ra đời nhằm giúp con người giải quyết côngviệc dễ dàng hơn Các phần mềm được viết nhờ các Lập trình viên dựa trên các ngônngữ lập trình và Pascal là một ngôn ngữ lập trình giúp những người mới học lập trình

dễ tiếp cận

Tại các trường Trung học phổ thông hiện nay, nhiệm vụ quan trọng là đào tạomột cách toàn diện đồng thời chú trọng bồi dưỡng năng lực của học sinh Chính vìvậy một trong những tiêu chí đánh giá chất lượng giáo dục của trường THPT là kếtquả của việc thực hiện hoạt động bồi dưỡng học sinh giỏi Đối với mỗi giáo viênTHPT, bồi dưỡng học sinh giỏi là một nhiệm vụ quan trọng và khó khăn Nó đòi hỏigiáo viên phải tìm hiểu, học tập rất nhiều kiến thức về chuyên ngành và các phươngpháp giảng dạy thích hợp Đối với giáo viên bộ môn Tin học, bồi dưỡng học sinh giỏiđòi hỏi giáo viên phải hiểu biết về lập trình và cần có các phương pháp giảng dạythuật toán tốt giúp học sinh dễ dàng tiếp thu và vận dụng Học sinh muốn đạt kết quảcao trong kỳ thi học sinh giỏi tỉnh và cao hơn cần phải có lượng kiến thức lớn và sâutrong việc lập trình Những kiến thức này đối với chương trình phổ thông bình thường

là không đủ đáp ứng Nhiệm vụ của giáo viên là cung cấp thêm cho các em kiến thức,phương pháp lập trình để học sinh đạt kết quả tốt trong kỳ thi Có nhiều phương pháp

được dùng để thiết kế thuật toán như: Đệ quy (Recursion), quy hoạch động (Dynamic programming), chia để trị (Divide and conquer), vét cạn (Exhaustivesearch), tham

lam (Greedy algorithms) Trong đó, mỗi thuật toán chỉ áp dụng cho những lớp bàitoán phù hợp Trong ngành khoa học máy tính, đệ quy là chìa khóa để thiết kế nhiềugiải thuật quan trọng và cũng là cơ sở của quy hoạch động (Dynamic Programming)

Quy hoạch động là một phương pháp giảm thời gian chạy của các thuật toán thể hiện

các tính chất của các bài toán con gối nhau (Overlapping subproblem) và cấu trúc contối ưu (Optimal substructure) Phương pháp quy hoạch động là một phương pháp hiệuquả trong việc giải bài toán tối ưu hoá rời rạc Có một số bài toán sử dụng phươngpháp quy hoạch động lại cho hiệu quả cao hơn so với các phương pháp khác Trongcác kỳ thi học sinh giỏi tỉnh và cao hơn hiện nay, từ 30% đến 40% các bài thi cần đếnquy hoạch động và đây là những bài toán khó, đòi hỏi học sinh phải có tư duy lậptrình cao Có thể có những cách khác để giải bài toán đó Nhưng vì các bài thi đều có

Trang 5

xét đến thời gian thực hiện (chạy) chương trình, cũng như dung lượng bộ nhớ để lưutrữ và thực hiện chương trình đó Nên một thuật toán hiệu quả là cực kỳ cần thiết Cónghĩa là cùng một bài toán, cách nào mà thời gian thực hiện càng nhanh, chiếm ít bộnhớ hơn sẽ được đánh giá cao hơn Và trong những trường hợp như vậy, quy hoạchđộng là một trong những thuật toán phù hợp Chỉ cần làm được những bài này là họcsinh gần như có giải Tuy nhiên, các em thường hay bị nhầm lẫn và khó phân biệtđược khi thuật toán sử dụng phương pháp quy hoạch động và các phương pháp khác.Nên việc làm cho các em học sinh phổ thông có thể phân biệt và thấy được sự ưu việtcủa quy hoạch động từ đó sử dụng thành thạo phương pháp này trong lập trình khôngphải là vấn đề dễ dàng Hiểu rõ các thuật toán là bước đầu giúp các em học sinh tự tinđồng thời phân tích bài toán và xác định phương pháp giải đúng đắn sẽ giúp các em

có thành tích tốt hơn Là một giáo viên giảng dạy bộ môn Tin học ở trường trung họcphổ thông, sau nhiều năm tham gia dạy bồi dưỡng đội tuyển thi học sinh giỏi, tôi nhậnthấy việc bồi dưỡng học sinh giỏi là nhiệm vụ vô cùng quan trọng và việc ứng dụngphương pháp quy hoạch động trong thiết kế thuật toán là một mảng kiến thức rất cầnthiết đối với học sinh tham gia đội tuyển học sinh giỏi môn Tin học

Vì vậy tôi chọn đề tài “Giúp học sinh tiếp cận với phương pháp quy hoạch động bằng một số bài toán đơn giản trong Tin học” làm đề tài nghiên cứu Hy vọng

đây sẽ là một tư liệu hữu ích cho các giáo viên, học sinh và những người quan tâmđến phần kiến thức này

II Tên sáng kiến:

Giúp học sinh tiếp cận với phương pháp quy hoạch động bằng một số bài toán đơn giản trong Tin học.

III Tác giả sáng kiến:

- Họ và tên: Nguyễn Thị Hà

- Địa chỉ tác giả sáng kiến: Xã Đại Đồng – huyện Vĩnh Tường – tỉnh Vĩnh Phúc

- Số điện thoại: 0977 212 636

- E_mail: nguyenthiha.gvnguyenvietxuan@vinhphuc.edu.vn

IV Chủ đầu tư tạo ra sáng kiến: Nguyễn Thị Hà

V Lĩnh vực áp dụng sáng kiến: Dạy bồi dưỡng học sinh đội tuyển Tin học, giáo

viên hoặc những người quan tâm tới lập trình

VI Ngày sáng kiến được áp dụng lần đầu hoặc áp dụng thử: Năm 2017 – 2018 VII Mô tả bản chất của sáng kiến:

Trang 6

PHẦN I: SƠ ĐỒ NỘI DUNG SÁNG KIẾN KINH NGHIỆM

Trang 7

PHẦN II: NỘI DUNG SÁNG KIẾN KINH NGHIỆM

I Một số khái niệm cơ bản về phương pháp quy hoạch động

1.1 Khái niệm

* Quy hoạch động (Dynamic Programming) là một phương pháp rất hiệu quả giải

nhiều bài toán tin học, đặc biệt là những bài toán tối ưu

* Quy hoạch động trong ngành khoa học máy tính: Là một phương pháp giảm thời

gian chạy của các thuật toán thể hiện các tính chất của các bài toán con gối nhau (Overlapping subproblem) và cấu trúc con tối ưu (Optimal substructure)

Phương pháp quy hoạch động bắt đầu từ việc giải tất cả các bài toán nhỏ nhất(bài toán cơ sở) để từ đó từng bước giải quyết những bài toán lớn hơn cho tới khi giảiđược bài toán lớn nhất (bài toán ban đầu) Ý tưởng cơ bản của phương pháp quyhoạch động là tránh tính toán lại các bài toán con đã xét, nói cách khác phương phápquy hoạch động đã thể hiện sức mạnh của nguyên lý chia để trị đến cao độ

* Một bài toán P muốn giải bằng phương pháp quy hoạch động cần có 2 đặc điểm sau:

- Bài toán P thỏa mãn nguyên lý tối ưu Bellman, nghĩa là có thể sử dụng lờigiải tối ưu của các bài toán con từ mức thấp nhất để tìm dần lời giải tối ưu cho bàitoán con ở mức cao hơn và cuối cùng là lời giải tối ưu cho bài toán P

- Bài toán P có các bài toán con phủ chồng lên nhau, nghĩa là không gian bàitoán con “hẹp” không tạo dạng hình cây

1.2 Các bước giải quyết bài toán bằng phương pháp 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 ta phân rã bài toán ban đầu thành cácbài toán con có cùng cấu trúc sao cho việc giải quyết bài toán con cấp i phụ thuộc vàokết quả của các bài toán con trước đó Cụ thể hóa bước này là ta phải xây dựng đượchàm mục tiêu F(i) là nghiệm của bài toán con cấp i

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

Bài toán cơ sở là các bài toán con nhỏ nhất mà ta có thể biết ngay kết quả hoặctính được kết quả dễ dàng Đây chính là cơ sở để tính nghiệm cho các bài toán cấp lớnhơn

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

Trang 8

Căn cứ vào ý nghĩa của hàm mục tiêu, tìm mối quan hệ giửa các bài toán concác cấp, ta tiến hành xây dựng công thức tính kết quả của bài toán cấp i dựa vào kếtquả của các bài toán con cấp trước đó.

- Bước 4: Lập bảng phương án

Sử dụng công thức truy hồi và nghiệm các bài toán cơ sở tính nghiệm tất cả cácbài toán con và lưu trữ chúng vào bảng phương án

- Bước 5: Kết luận nghiệm của bài toán.

Dựa vào bảng phương án chỉ ra nghiệm của bài toán Các bước giải quyết trêntuy rất cụ thể nhưng vẫn trừu tượng đối với học sinh

Bài toán 1: Tính a n (n là số nguyên dương)

- Bước 1: Hàm mục tiêu: f(i) là lũy thừa của ai

- Bước 2: Các bài toán cơ sở: f(0) = 1;

- Bước 3: Công thức truy hồi: f(i) = a* f(i-1)

- Bước 4: Bảng phương án

f(i) 1 a a*a1 a*a2 a*a3 a*a4 a*a5

- Bước 5: Nghiệm f(n) của bài toán

Bài toán 2: Tính n!

- Bước 1: Hàm mục tiêu: f(i) là giai thừa của số i

- Bước 2: Các bài toán cơ sở: f(0) = 1; f(1) = 1

- Bước 3: Công thức truy hồi: f(i) = i* f(i-1)

- Bước 4: Bảng phương án

f(i) 1 1 2*1= 2 3*2=6 4*6 =24 5*24 = 120 6*120=720

- Bước 5: Nghiệm F(n) của bài toán

Bài toán 3: Tìm số Fibonaci thứ N?

- Bước 1: Hàm mục tiêu: f(i) là số fibonaci thứ i.

- Bước 2: Các bài toán cơ sở: f(0) = 1; f(1) = 1

- Bước 3: Công thức truy hồi: f(i) = f(i-1) + f(i-2)

- Bước 4: Bảng phương án

Trang 9

i 1 2 3 4 5 6 7 ….

- Bước 5: Nghiệm f(n) của bài toán

Bài toán 4: Tháp Hà Nội

Chuyển n chiếc đĩa từ cọc 1 sang cọc 2 theo thứ tự từ lớn đến nhỏ có sử dụng cọc

3 làm cọc trung gian Mỗi lần di chuyển được 1 đĩa Và đĩa đĩa lớn phải ở dưới

đĩa nhỏ.

- Bước 1: Hàm mục tiêu: f(i)

- Bước 2: Các bài toán cơ sở: f(1): = 1

- Bước 3: Công thức truy hồi: f(i):=2*f(i-1)+1

- Bước 4: Bảng phương án

- Bước 5: Nghiệm f(n) của bài toán

Bài toán 5: Bài toán cái túi

Trong siêu thị có n gói hàng (n <= 100), gói hàng thứ i có trọng lượng là W i

<= 100 và trị giá V i <= 100 Một tên trộm đột nhập vào siêu thị, sức của tên trộm không thể mang được trọng lượng vượt quá M (M <= 100) Hỏi tên trộm sẽ lấy đi những gói hàng nào để được tổng giá trị lớn nhất.

- Bước 1: Hàm mục tiêu: F[i,j] = max(F[i-1,j],V[i]+ F[i,j-W[i]])

- Bước 2: Các bài toán cơ sở: F[0,j] = 0

- Bước: Công thức truy hồi tính B[i, j]

Với giới hạn trọng lượng j, việc chọn tối ưu trong số các gói {1, 2, ,i - 1, i} để

có giá trị lớn nhất sẽ có hai khả năng:

+ Nếu không chọn gói thứ i thì F[i, j] là giá trị lớn nhất có thể bằng cách chọntrong số các gói {1, 2, , i - 1} với giới hạn trọng lượng là j Tức là F[i, j] = F[i - 1, j]

+ Nếu có chọn gói thứ i (tất nhiên chỉ xét tới trường hợp này khi mà Wi  j)thì F[i, j] bằng giá trị gói thứ i là Vi cộng với giá trị lớn nhất có thể có được bằng cáchchọn trong số các gói {1, 2, , i - 1} với giới hạn trọng lượng j - Wi Tức là về mặtgiá trị thu được: F[i, j] = Vi + F[i - 1, j - Wi] Vì theo cách xây dựng F[i, j] là giá trị lớnnhất có thể nên nó sẽ là max trong 2 giá trị thu được ở trên

Cơ sở quy hoạch động:

Trang 10

Dễ thấy F[0, j] = giá trị lớn nhất có thể bằng cách chọn trong số 0 gói = 0.

- Bước 4: Bảng phương án

Ta xây dựng bảng phương án dựa trên công thức truy hồi trên Để kiểm tra kếtquả có chính xác hay không (nếu không chính xác chúng ta xây dựng lại hàm mụctiêu) Thông qua cách xây dựng hàm mục tiêu và bảng phương án chúng ta sẽ địnhhướng việc truy vết

* Trường hợp mỗi vật được chọn 1 lần

* Trường hợp 1: Trong bảng phương án F[n,m] chính là giá trị lớn nhất thu được khi

chọn trong cả n vật với giới hạn trọng lượng là M

Nếu f[n,M]=f[n-1,M] thì tức là không chọn vật thứ n, ta truy về f[n-1,M] Còn nếuf[n,M]≠f[n-1,M] thì ta thông báo rằng phép chọn tối ưu có chọn vật thứ n và truy vềf[n-1,M-Wn]

* Trường hợp 2: Trong bảng phương án F[n,m] chính là giá trị lớn nhất thu được khi

chọn trong cả n vật với giới hạn trọng lượng là M

Trang 11

Nếu f[n,M] = f[n-1,M] thì tức là không chọn vật thứ n, ta truy về f[n-1,M] Còn nếuf[n,M] ≠ f[n-1,M] thì ta thông báo rằng phép chọn tối ưu có chọn vật thứ n và truy vềf[n,M-Wn].

II So sánh phương pháp quy hoạch động với các phương pháp khác

2.1 Phương pháp quy hoạch động và phương pháp đệ quy

Về mặt nguyên tắc phương pháp quy hoạch động rất giống với phương pháp đệquy

* Giống nhau: Cả hai phương pháp đều sử dụng lời giải của các bài toán có kích

thước bé hơn, đồng dạng với bài toán ban đầu để đưa ra lời giải của bài toán ban đầu

* Khác nhau:

- Gọi thực hiện các bài toán cả hai chiều:

Từ trên xuống (top - down) hoặc từ dưới

lên (bottom - up)

- Các kết quả trung gian được lưu lại, khi

giải các bài toán lớn hơn chỉ cần cần lấy

ra không cần tính toán lại

- Dành phần lớn bộ nhớ để lưu trữ các kết

quả trung gian

- Tốn ít bộ nhớ hơn và thời gian thực hiện

- Chiếm dung lượng bộ nhớ rất lớn,thông thường độ phức tạp là hàm mũ.Trong hầu hết các bài toán thì quy hoạch động chiếm ưu thế hơn đệ quy nhưngtrong một vài trường hợp cả hai bài toán thực hiện đều như nhau Ta xét một số ví dụ

cả về quy hoạch động và đệ quy để thấy được tính ưu việt của quy hoạch động

Ví dụ 1: Bài toán tính a n (n là số nguyên dương)

Trang 12

for i:=1 to n do f[i]:=a*f[i-1];

lthua:=f[i];

end;

* Nhận xét:

- Ta xây dựng mảng f chứa các giá trị

trung gian nên khi cần dùng đến chỉ cần

lấy ở trong f ra không cần phải tính lại.

Nên chương trình thực hiện sẽ nhanh

- Rồi để gọi hàm lthua(n-1) thì lại phải gọi hàm lthua(n-2) và lthua(n-3) … cứ như vậy các hàm sẽ bị gọi lặp lại rất nhiều lần.

- Như vậy trong bài này khi ta dùng đệ quy để giải bài toán Mỗi lần muốn dùng lại hàm nào thì nó gọi lại hàm đó nên sẽ tốn nhiều bộ nhớ

n n

Cho một số nguyên dương n (0 < n < 13)

end;

Trang 13

Ví dụ 3: Tính phần tử thứ n của dãy số Fibonaci

Ta có định nghĩa như sau: f(n) =

1( 1) ( 2)

n n

or n  1

Cho một số nguyên dương n (0 < n < 50)

var n,i,a: longint;

- Mỗi bài toán con sẽ được lưu lại vào

mảng f trước khi tính những bài toán con

lớn hơn Nhờ đó, mà việc tính toán giảm

đi đáng kể, mỗi bài toán con chỉ cần tính

đúng một lần

- Đặc điểm của lời giải bài toán theo

phương pháp quy hoạch động: giải quyết

bài toán đệ quy từ mức thấp trước, lời

giải của chúng được lưu lại và được sử

dụng để tìm lời giải của các bài toán ở

* Nhận xét:

- Độ phức tạp: O(a n ) với a  1.61803

- Do hàm f(n-1) và f(n-2) được tính một cách độc lập Số lần gọi cần để tính f(n) là số lần gọi để tính f(n-1) cộng với số lần gọi để tính f(n-2) Nếu tính toán như trên, chúng ta có rất nhiều bài toán con sẽ được tính đi tính lại, điển hình là các số f(1) và f(2)

- Đặc điểm của lời giải đệ quy: thực hiện bài toán từ việc phân tích ở mức cao xuống mức thấp.

Ví dụ 4: Bài toán tháp Hà Nội Chuyển n chiếc đĩa từ cọc 1 sang cọc 2 theo thứ tự từ lớn đến nhỏ có sử dụng cọc 3 làm cọc trung gian Mỗi lần di chuyển được 1 đĩa Và đĩa đĩa lớn phải ở

dưới đĩa nhỏ.

Trang 14

if n = 1 then exit(1) else exit (2*thaphanoi(n-1)+1); end;

Ví dụ 5: Bài toán cái túi Trong siêu thị có n gói hàng (n <= 100), gói hàng thứ i có trọng lượng là Wi <=

100 và trị giá Vi <= 100 Một tên trộm đột nhập vào siêu thị, sức của tên trộm không thể mang được trọng lượng vượt quá M ( M <= 100) Hỏi tên trộm sẽ

lấy đi những gói hàng nào để được tổng giá trị lớn nhất.

s1:=0;

for i1:=1 to n do begin

Trang 15

2.2 Phương pháp quy hoạch động và phương pháp vét cạn

- Quy hoạch động là tìm một kĩ

thuật tìm kết quả trước thông qua

một kết quả có sẵn hoặc được

tìm thấy

- Ưu điểm là chạy rất nhanh

- Nhược điểm của nó là rất khó

tìm ra thuật toán, với một số bài

toán có thể sẽ không có thuật

toán quy hoạch động

- Vét cạn là một trong những thuật toán giải bàitoán tối ưu

- Thuật toán vét cạn là thuật toán tìm phương ántối ưu của bài toán bằng cách lựa chọn mộtphương án trong tập hợp tất cả các phương áncủa bài toán để tìm ra phương án tối ưu Trongnhiều bài toán, không gian các phương án quálớn Vét cạn giúp tìm ra kết quả tối ưu nhưng độphức tạp lớn, thường là hàm mũ trong khiphương pháp quy hoạch động độ phức tạp là đathức Do vậy, khi áp dụng thuật toán vét cạnkhông đảm bảo về thời gian cũng như kĩ thuật.Vét cạn là xét toàn bộ trường hợp, rồi tìm ra kếtquả

- Ưu điểm của vét cạn là chắc chắn tìm ra lờigiải (nếu có)

- Nhược điểm của nó là có thể chạy quá lâu,vượt mức thời gian cho phép

Chú ý: Vét cạn theo nghĩa thông thường là xét

hết mọi đối tượng hay mọi trường hợp Trong lập trình, vét cạn là phương pháp được dùng khi không còn phương pháp nào hiệu quả hơn

có thể sử dụng được

III Cài đặt chương trình cho một số bài toán đơn giản thường gặp

Vì trong đề tài chỉ nói đến những bài toán đơn giản nên thường là những bài

toán dễ tìm ra phương pháp giải và phương pháp giải thường dùng là đệ quy hoặc quy hoạch động Nên phần ví dụ trong SKKN này mỗi bài toán tôi chỉ xin phép đề cập

đến mối tương quan giữa hai phương pháp là đệ quy và quy hoạch động Tức là trong

phần chương trình của từng bài tôi thường có thêm biến “đếm” để đếm số lần lặp thực

hiện trong từng bài khi chạy cùng số test để người học có thể thấy được cái nào hay,cái nào ngắn hơn Giúp người học dể hiểu, dễ phân biệt và rút ra được cái hay và cáichưa hay của quy hoạch động trong từng bài toán

Trang 16

Ví dụ 1: Bài toán tính a n (n là số nguyên dương)

dem:=dem+1;

if n =0 then lthua:=1 else lthua:=a*lthua(a,n-1);

end;

BEGIN clrscr;

dem:=0;

assign(f,'nhap.inp'); reset(f); //write('nhap a,n:=') ; readln(a,n); readln(f,a,n);

Ngày đăng: 07/05/2021, 19:35

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1]. Hồ Sĩ Đàm (chủ biên), Đỗ Đức Đông, Lê Minh Hoàng, Nguyễn Thanh Hùng (2009), Tài liệu giáo khoa chuyên tin, NXB Giáo dục Sách, tạp chí
Tiêu đề: Tài liệu giáo khoa chuyên tin
Tác giả: Hồ Sĩ Đàm (chủ biên), Đỗ Đức Đông, Lê Minh Hoàng, Nguyễn Thanh Hùng
Nhà XB: NXB Giáo dục
Năm: 2009
[2]. Robert Sedgewich – Người dịch: Trần Đan Thư, Vũ Mạnh Tưởng, Dương Vũ Diệu Trà, Nguyễn Tiến Huy (In lần thứ 5), Cẩm nang thuật toán, NXB Khoa học và kỹ thuật Sách, tạp chí
Tiêu đề: Cẩm nang thuật toán
Nhà XB: NXB Khoa học vàkỹ thuật
[3]. Lê Minh Hoàng, Bài giảng chuyên đề Giải thuật và lập trình, NXB Đại học sư phạm Hà Nội, 1999 – 2002 Sách, tạp chí
Tiêu đề: Giải thuật và lập trình
Nhà XB: NXB Đại học sưphạm Hà Nội
[5]. Nguyễn Hưu Điển, Một số vấn đề về thuật toán, NXB Giáo dục Sách, tạp chí
Tiêu đề: Một số vấn đề về thuật toán
Nhà XB: NXB Giáo dục
[6]. Nguyễn Chí Trung, Giáo trình thuật toán và kỹ thuật lập trình Pascal – NXB Sở giáo dục và đào tạo Hà Nội Sách, tạp chí
Tiêu đề: Giáo trình thuật toán và kỹ thuật lập trình Pascal
Nhà XB: NXB Sởgiáo dục và đào tạo Hà Nội
[4]. Trần Lê Hồng Dũ, Phạm Ngọc Chí Nhân – Trường THPT Bến Tre, Các bài toán về quy hoạch động Khác

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w