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

skkn CHỌN cấu TRÚC dữ LIỆU CHO bài TOÁN QUY HOẠCH ĐỘNG

32 901 5

Đ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

Định dạng
Số trang 32
Dung lượng 224,75 KB

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

Nội dung

Đơn vị công tác: trường THPT chuyên Lương Thế Vinh - Học vị hoặc trình độ chuyên môn, nghiệp vụ cao nhất: Thạc sĩ - Năm nhận bằng: 2012 - Chuyên ngành đào tạo: Công nghệ thông tin - Lĩnh

Trang 1

SỞ GIÁO DỤC VÀ ĐÀO TẠO ĐỒNG NAI

Đơn vị Trường THPT chuyên Lương Thế Vinh

Mã số:

SÁNG KIẾN KINH NGHIỆM

CHỌN CẤU TRÚC DỮ LIỆU CHO BÀI

TOÁN QUY HOẠCH ĐỘNG

Người thực hiện: LÊ QUANG VINH

Có đính kèm: Các sản phẩm không thể hiện trong bản in SKKN

 Mô hình Đĩa CD (DVD)  Phim ảnh  Hiện vật khác

Năm học: 2014 - 2015

Trang 2

SƠ LƯỢC LÝ LỊCH KHOA HỌC

––––––––––––––––––

1 Họ và tên: LÊ QUANG VINH

2 Ngày tháng năm sinh: 19/12/1985

8 Nhiệm vụ được giao: giảng dạy

9 Đơn vị công tác: trường THPT chuyên Lương Thế Vinh

- Học vị (hoặc trình độ chuyên môn, nghiệp vụ) cao nhất: Thạc sĩ

- Năm nhận bằng: 2012

- Chuyên ngành đào tạo: Công nghệ thông tin

- Lĩnh vực chuyên môn có kinh nghiệm: Giảng dạy Tin học

Số năm có kinh nghiệm: 8

- Các sáng kiến kinh nghiệm đã có trong 5 năm gần đây:

o Lý thuyết và bài tập đồ thị - Phần cây khung (năm 2011)

o Website bồi dưỡng năng khiếu tin học (năm 2012)

o Đưa bài tập trên website VNOI vào giảng dạy Tin học chuyên

(năm 2013)

o Định hướng ra đề các kì thi học sinh giỏi bộ môn Tin học (năm

2014)

Trang 3

Sáng kiến kinh nghiệm “Chọn cấu trúc dữ liệu cho bài toán Quy hoạch động” giới

thiệu một số bài tập Quy hoạch động được phân loại theo các cấu trúc dữ liệu sử dụng Giúp cho học sinh dễ dàng nhận biết dạng bài và có thêm “kinh nghiệm” để chọn đúng cấu trúc dữ liệu Sáng kiến kinh nghiệm này nhằm mục đích:

• Bồi dưỡng học sinh các lớp chuyên Tin

• Bồi dưỡng các đội tuyển thi học sinh giỏi.

• Giới thiệu, trao đổi với giáo viên đồng nghiệp về dạng bài toán Quy hoạch động

và cách tiếp cận theo hướng cấu trúc dữ liệu.

Hiện đã có một số tài liệu trình bày chuyên đề Quy hoạch động như:

• Sách giáo khoa chuyên Tin quyển 1 [1, 97 - 107]: trình bày một số ví dụ đặc trưng và bài tập rèn luyện Chưa có phân loại theo một tiêu chí nhất định

• Giải thuật và lập trình [2, 155 - 189]: trình bày giống Sách giáo khoa chuyên Tin quyển 1

• Tài liệu bồi dưỡng năng khiếu Tin học khối THPT [4, 85 – 109]: trình bày nhiều ví dụ về bài toán Quy hoạch động, có lời giải, chương trình cài đặt cụ thể Tuy nhiên, chưa có phân loại bài tập

• Kho bài tập trên website spoj.com [5]: tổng hợp bài tập của tất cả các dạng bài, thích hợp để học sinh luyện tập Các bài tập Quy hoạch động trên website cũng chưa được phân loại

Trong quá trình giảng dạy các lớp chuyên Tin, tác giả nhận thấy đa số các học sinh khi mới làm quen với dạng bài này, sau khi tìm ra công thức truy hồi, thường gặp khó khăn trong việc cài đặt, mà chủ yếu là chọn cấu trúc dữ liệu để lưu trữ các bài toán con Cần có một sự phân loại chi tiết hơn các bài toán Quy hoạch động Tác giả chọn tiêu chí phân loại theo cấu trúc dữ liệu để giúp học sinh có thêm “kinh nghiệm” để chọn đúng cấu trúc dữ liệu cho bài toán

Trang 4

III TỔ CHỨC THỰC HIỆN CÁC GIẢI PHÁP

1 Tổ chức thực hiện

1) Tìm hiểu nội dung chương trình tin học chuyên sâu, nội dung chuyên đề Quy hoạch động trong tài liệu “Chương trình chuyên sâu THPT chuyên – môn Tin học”

do Bộ Giáo Dục và Đào Tạo phát hành năm 2009

• Theo tài liệu này, chuyên đề Quy hoạch động được giảng dạy trong 15 tiết ở khối 11, sau khi học xong yêu cầu học sinh phải làm được các bài toán quen thuộc như: - Bài toán dãy con đơn điệu tăng dài nhất; Bài toán xâu con chung dài nhất; Bài toán biến đổi xâu; Bài toán cái túi; Bài toán lũy thừa một số; Bài toán nhân các ma trận; Bài toán chia đa giác thành các tam giác; …

• Để phù hợp hơn với thực tế giảng dạy ở trường, tác giả chia chuyên đề này thành 2 phần: phần cơ bản dạy ở khối 10 và phần nâng cao dạy ở khối 11 Các ví dụ trình bày trong đề tài này chủ yếu dành cho các học sinh lớp 10 mới làm quen với bài toán Quy hoạch động

2) Tham khảo các tài liệu, giáo án, dự giờ các tiết dạy về chuyên đề Quy hoạch động của đồng nghiệp

• Sau khi tham khảo các tài liệu, dự giờ một số tiết dạy của đồng nghiệp Tác giả nhận thấy phần lớn đều trình bày vấn đề từ dễ đến khó, từ ví dụ cụ thể đến bài tập vận dụng Cách trình bày này có nhiều ưu điểm, học sinh nắm bắt vấn đề dễ dàng Các ví dụ trong đề tài này được trình bày theo cách trên,

bổ sung thêm phần phân loại các bài toán

3) Tham khảo các đề thi học sinh giỏi Tin học cấp tỉnh, cấp quốc gia, Olympic 30.4

• Như đã trình bày ở trên, các bài toán Quy hoạch động chiếm đa số trong các bài thi học sinh giỏi Trong đề tài này có sử dụng một số bài tập Quy hoạch động trích từ các đề thi

4) Sưu tầm, xây dựng, phân loại các bài tập theo hướng Cấu trúc dữ liệu sử dụng

• Sau khi nghiên cứu cách giải các bài tập được tham khảo từ các đề thi, tài liệu, website, tác giả tiến hành phân loại theo tiêu chí cấu trúc dữ liệu sử dụng

5) Giảng dạy thử nghiệm chuyên đề Quy hoạch động cơ bản cho lớp 10 Tin Theo dõi khả năng tiếp thu của học sinh Lấy ý kiến học sinh về những tích cực và hạn chế của việc phân loại bài tập

Trang 5

Chuyên đề Quy hoạch động cơ bản được dạy trong 5 (buổi) x 4 (tiết) = 20 (tiết), theo phân bố như sau

1 Làm quen với bài

toán Quy hoạch

động

• Nguyên lí tối ưu, đặc trưng các bài toán

có thể giải bằng thuật toán QHĐ, đặc trưng chính của thuật toán QHĐ

• Sự giống và khác nhau căn bản giữa thuật toán QHĐ và Đệ quy

• Cách nhận biết được bài toán cụ thể có thể giải được bằng QHĐ hay không

2 Dạng 1: dùng biến

đơn để lưu trữ lời

giải cho bài toán

QHĐ

• Các bài tập dạng 1

3 Dạng 2: dùng mảng 1

chiều để lưu trữ lời

giải cho bài toán

QHĐ

• Các bài tập dạng 2

4 Dạng 3: dùng mảng 2

chiều để lưu trữ lời

giải cho bài toán

QHĐ

• Các bài toán dạng 3

5 Ôn tập, kiểm tra • Để kiểm tra cuối chuyên đề

5) Tổng kết, sửa chữa, hoàn thiện đề tài

Sau khi giảng dạy chuyên đề Quy hoạch động cơ bản cho lớp 10 Tin, tác giả tiến hành lấy ý kiến đồng nghiệp, học sinh để rút kinh nghiệm Tiến hành sửa chữa và hoàn thiện đề tài

2 Nội dung của đề tài

Cấu trúc dữ liệu được sử dụng trong bài toán Quy hoạch động rất đa dạng Từ các cấu trúc dữ liệu cơ bản có sẵn như: biến, mảng 1 chiều, mảng 2 chiều, … cho đến các kiểu dữ liệu nâng cao tự xây dựng như: stack, queue, tree, heap, … Vì giới hạn thời gian, và để học sinh mới làm quen dễ dàng tiếp thu, đề tài chỉ giới hạn các bài tập sử dụng các cấu trúc dữ liệu cơ bản Các dạng nâng cao sẽ được tiếp tục bổ sung trong thời gian tới

Trang 6

2.1 Dạng 1: Dùng biến đơn

Trong công thức truy hồi để tìm lời giải của bài toán chính, chỉ cần sử dụng một

số ít (hai, ba …) lời giải của bài toán con.

Ví dụ

Bài 1. FIBO Dãy Fibonacci

Dãy fibonacci là dãy vô hạn các số nguyên dương 1, 1, 2, 3, 5, 8, …

Input Output

Yêu cầu: Cho n Hãy số hạng thứ n của dãy

Input: số nguyên dương n (n < 103)

Output: số hạng thứ n của dãy Fibonacci

Giải

Gọi Fn là số hạng thứ n của dãy số Để giải bài toán trên, thông thường ta phải tìm được một công thức tính được Fn từ số n đầu vào Các nhà toán học đã mất rất nhiều thời gian để tìm ra công thức:

(1)

Việc tìm ra được những công thức tường minh như trên là rất khó, đòi hỏi nhiều

công sức, thời gian và phải có trình độ toán học cao cấp Tuy nhiên, ta có thể lập công thức tính Fn theo dạng truy hồi như sau:

• fi =1 nếu i≤2

• fi = fi – 1 + fi-2, nếu i≥3

Công thức này mô tả quy luật của dãy số là “số sau bằng tổng hai số trước” mà

một học sinh tiểu học bình thường cũng có thể nghĩ ra được Với công thức này, muốn tìm số hạng thứ n, ta phải tìm được hai số hạng ngay trước n, muốn tìm hai

số hạng phía trước này, ta lại tiếp tục phải tìm các số hạng phía trước nữa

Sau đây là chương trình dùng 2 biến để lưu lại bài toán con fi1 và fi2

Trang 7

Bài 2. NKTICK Xếp hàng mua vé

Có N người sắp hàng mua vé dự buổi hoà nhạc Ta đánh số họ từ 1 đến N theo thứ

tự đứng trong hàng Mỗi người cần mua một vé, song người bán vé được phép bán cho mỗi người tối đa hai vé Vì thế, một số người có thể rời hàng và nhờ người đứng trước mình mua hộ vé Biết tilà thời gian cần thiết để người i mua xong vé cho mình Nếu người i+1 rời khỏi hàng và nhờ người i mua hộ vé thì thời gian để người thứ i mua được vé cho cả hai người là ri

Input Output

Trang 8

Yêu cầu: Xác định xem những người nào cần rời khỏi hàng và nhờ người đứng

trước mua hộ vé để tổng thời gian phục vụ bán vé là nhỏ nhất

Dữ liệu

• Dòng đầu tiên chứa số N (1 ≤ N ≤ 60000)

• Dòng thứ 2 ghi N số nguyên dương t1, t2, , tN (1 ≤ ti≤ 30000)

• Dòng thứ ba ghi N-1 số nguyên dương r1, r2, , rN-1 (1 ≤ ri≤ 30000)

Kết quả: In ra tổng thời gian phục vụ nhỏ nhất.

Giải

Gọi f[i] là tổng thời gian mua vé nhỏ nhất tính từ người 1 người i

Ta có công thức truy hồi: fi=min(fi-1+ti, fi-2+ri-1)

Chương trình sau dùng hai biến f1, f2 để lưu kết quả bài toán con

Trang 9

assign(input,fin);reset(input);

assign(output,fon);rewrite(output);

read(n);

for i:=1 to n do read(t[i]);

for i:=1 to n-1 do read(r[i]);

Bài 3. VSTEPS Bậc thang

Bờm chơi trò chơi điện tử Lucky Luke đến màn phải điều khiển Lucky leo lên một cầu thang gồm n bậc

Các bậc thang được đánh số từ 1 đến n từ dưới lên trên Lucky có thể đi lên một

bậc thang, hoặc nhảy một bước lên hai bậc thang Tuy nhiên một số bậc thang đã

bị thủng do cũ kỹ và Lucky không thể bước chân lên được Biết ban đầu, Lucky

đứng ở bậc thang số 1 (bậc thang số 1 không bao giờ bị thủng)

Chơi đến đây, Bờm chợt nảy ra câu hỏi: có bao nhiêu cách để Lucky leo hết được cầu thang? (nghĩa là leo đến bậc thang thứ n) Bờm muốn nhờ bạn trảlời câu hỏi này

Dữ liệu

• Dòng đầu tiên: gồm 2 số nguyên

n và k, là số bậc của cầu thang

và số bậc thang bị hỏng (0 ≤ k <

n ≤ 100000)

• Dòng thứ hai: gồm k số nguyên

cho biết chỉ số của các bậc

thang bị hỏng theo thứ tự tăng

4108266

Trang 10

Lucky leo hết cầu thang khi chia cho

14062008

Hướng dẫn

Công thức truy hồi:

Nếu <bậc i hỏng> thì fi = 0

ngược lại fi=fi-1+fi-2

Ta áp dụng 2 biến fi1 và fi2 để lưu lời giải bài toán con như bài trên

Bài 4. LATGACH Lát gạch

Cho một hình chữ nhật kích thước 2xN (1≤N≤100) Hãy đếm số cách lát các viên gạch nhỏ kích thước 1x2 và 2x1 vào hình trên sao cho không có phần nào của các viên gạch nhỏ thừa ra ngoài, cũng không có vùng diện tích nào của hình chữ nhật không được lát

123

123

Hướng dẫn

Đầu tiên ta xét hình chữ nhật 2x1 thì có 1 cách xếp đó là xếp 1 viên gạch 2x1

Xét hình chữ nhật 2x2 thì có 2 cách xếp đó là xếp 2 viên 1x2 hoặc 2 viên 2x1

Xét hình chữ nhật 2xi có các trường hợp sau với f(i) là số cách xếp cho hình chữ nhật 2xi

=> f(i) = f(i-1) + f(i-2) với f(1) = 1 và f(2) = 2

=> f(N) là kết quả của bài toán

Trang 11

Công thức truy hồi trên chính là công thức của dãy Fibonacy.

Trang 12

Bài 5. NKCABLE Nối mạng

Các học sinh khi đến thực tập trong phòng máy tính thường hay chơi trò chơi điện

tử trên mạng Để ngăn ngừa, người trực phòng máy đã ngắt tất cả các máy tính ra khỏi mạng và xếp chúng thành một dãy trên một cái bàn dài và gắn chặt máy xuống mặt bàn rồi đánh số thứ tự các máy từ 1 đến N theo chiều từ trái sang phải Các học sinh tinh nghịch không chịu thua, họ đã quyết định tìm cách nối các máy trên bàn bởi các đoạn dây nối sao cho mỗi máy được nối với ít nhất một máy khác

Để tiến hành công việc này, họ đã đo khoảng cách giữa hai máy liên tiếp Bạn hãy giúp các học sinh này tìm cách nối mạng thoả mãn yêu cầu đặt ra sao cho tổng độ dài cáp nối phải sử dụng là ít nhất

Kết quả: Ghi ra độ dài của cáp nối cần sử dụng.

Giải thích:

Máy 1 với máy 2, mất 2 đơn vị (tức là số 2 đầu tiên)

Máy 3 với 4, mất 3 đơn vị (tức là số 3 trong input)

Máy 5 với 6, mất 2 đơn vị (tức là số 2 cuối cùng)

Tổng là 7

Hướng dẫn

Trang 13

Fi là tổng độ dài cáp nối ít nhất để nối i máy đầu tiên Ta có công thức truy hồi:

Fi =min(fi-1,fi-2)+ai-1

Trang 14

2.2 Dạng 2: dùng mảng

Trong công thức truy hồi để tìm lời giải của bài toán chính, cần sử dụng tất cả lời giải của bài toán con.

Ví dụ

Bài 1. LIQ Dãy con tăng dài nhất

Cho dãy a1, a2, , an có n phần tử Dãy con của dãy a được tạo thành bằng các xóa một số phần tử trong dãy a và vẫn giữ nguyên các vị trí còn lại

Ví dụ cho dãy a: 2 4 6 1 7

• Dãy 2 1 7 là một dãy con của a (xóa 4 6)

• Dãy 2 4 1 là một dãy con của a (xóa 6 7)

• Dãy 4 2 không phải là một dãy con của a

Yêu cầu: Hãy tìm một dãy con tăng có nhiều phần tử nhất của dãy.

• Dòng đầu là số nguyên dương n (n ≤ 103)

• Dòng sau gồm N số, mỗi số là một số nguyên ai của dãy (-104 ≤ai ≤ 104, 1≤ i ≤ n)

Dữ liệu ra: gồm 2 dòng

• Dòng đầu là số lượng phần tử của dãy con

• Dòng sau là các số thuộc dãy con

Fi = max(Fj, j= 1 i-1, aj< ai) + 1

Nhìn vào công thức truy hồi ta thấy để tính được Fi, ta cần lời giải của tất cả các bài toán con f1, f2, …, fi – 1 Chương trình sau dùng mảng 1 chiều f[] để lưu lời giải của các bài toán con này

Trang 16

//do truy vet nguoc nen ta xuat nguoc mang kq[]

for i:=d downto 1 do write(a[kq[i]],' ');

Bài 2. NHAHANG Nhà hàng (HSG12_DNAI_2011_V2)

Tập đoàn kinh doanh nhà hàng Phát Đạt xem xét mở một loạt các nhà hàng dọc trên đường cao tốc Bắc Nam Có n vị trí dọc trên đường được đề nghị mở nhà hàng Vị trí thứ i cách đầu đường cao tốc là ai (km) và dựa vào các yếu tố mật độ dân, điều kiện cơ sở, … xác định được khả năng dự kiến mở là bi

Yêu cầu: Hãy xác định các vị trí mở nhà hàng sao cho tổng khả năng dự kiến mở

là tối đa Nhưng hai nhà hàng được chọn gần nhau nhất hoặc giữa nhà hàng đầu tiên được chọn và đầu đường cao tốc phải cách ít nhất là P (km)

Input

• Dòng đầu là hai số n và P (2 ≤ n ≤ 50000)

Trang 17

• N dòng tiếp theo, dòng thứ i trong n dòng là hai số ai và bi (1 ≤ ai ≤107, 1≤ bi

Sắp xếp lại các vị trí theo tọa độ tăng dần

Hàm mục tiêu: Fi = tổng khả năng dự kiến lớn nhất lớn nhất của dãy

Trang 18

jmax:=-1;

for j:=0 to i-1 do

if (c[i].a-c[j].a>=p) then

if (f[j]>f[jmax]) then jmax:=j;

if jmax=-1 then f[i]:=0

Trang 19

Có n cuộc họp đánh số từ 1 đến n đăng ký làm việc tại một phòng hội thảo Cuộc

họp thứ t cần được bắt đầu ngay sau thời điểm s i và kết thúc tại thời điểm f i: Hỏi có thể bố trí phòng hội thảo phục vụ được nhiều nhất bao nhiêu cuộc họp, sao cho khoảng thời gian làm việc của hai cuộc họp bất kỳ là không giao nhau

Dữ liệu:

 Dòng đầu tiên chứa số nguyên dương n 10 6

 Dòng thứ i trong số n dòng tiếp theo chứa hai số nguyên s i, fi 0 si fi 10 5 Các số trên một dòng của Input file được ghi cách nhau ít nhất một dấu cách

Kết quả:

 Dòng đầu tiên ghi số k là số các cuộc họp được chấp nhận phục vụ

 k dòng tiếp theo liệt kê số hiệu các cuộc họp được chấp nhận theo thứ tự từ

cuộc họp đầu tiên tới cuộc họp cuối cùng , mỗi dòng ghi số hiệu một cuộc họp

Giải thích

Hướng dẫn

Sắp xếp các cuộc họp tăng dần theo thời điểm kết thúc (bi) Thế thì cuộc họp i sẽ

bố trí được sau cuộc họp j nếu và chỉ nếu j<i và bj ≤ ai Yêu cầu bố trí được nhiều cuộc họp nhất có thể đưa về việc tìm dãy các cuộc họp dài nhất thoả mãn điều kiện trên

F[i] là dãy cuộc họp dài nhất kết thúc tại a[i]

Công thức truy hồi: Fi =Max{Fj / 1≤j<i và bj≤aj} +1

Trang 20

Bài 4. THUEMAY Cho thuê máy

Trung tâm tính toán hiệu năng cao nhận được đơn đặt hàng của n khách hàng Khách hàng i muốn sử dụng máy trong khoảng thời gian từ ai đến bi và trả tiền thuê

là ci Vì trung tâm chỉ có một máy cho thuê nên thời gian sử dụng máy của 2 khách hàng bất kì được phục vụ đều không giao nhau

Yêu cầu: Hãy bố trí lịch thuê máy để tổng số tiền thu được là lớn nhất.

Ngày đăng: 14/08/2016, 14:25

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Hồ Sĩ Đàm, Đỗ Đứ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 Việt Nam Sách, tạp chí
Tiêu đề: Tài liệu giáo khoa chuyên Tin
Tác giả: Hồ Sĩ Đàm, Đỗ Đức Đông, Lê Minh Hoàng, Nguyễn Thanh Hùng
Nhà XB: NXB Giáo Dục Việt Nam
Năm: 2009
2. Lê Minh Hoàng (2002). Giải thuật và lập trình, Đại học Sư phạm Hà Nội Sách, tạp chí
Tiêu đề: Giải thuật và lập trình
Tác giả: Lê Minh Hoàng
Năm: 2002
3. Nguyễn Xuân Huy (2008). Sáng tạo trong thuật toán và lập trình, Tủ Sách Sáng Tạo Duy Tân – 2008 Sách, tạp chí
Tiêu đề: Sáng tạo trong thuật toán và lập trình
Tác giả: Nguyễn Xuân Huy
Năm: 2008
3. Khả năng áp dụng (Đánh dấu X vào 1 trong 3 ô mỗi dòng dưới đây)- Cung cấp được các luận cứ khoa học cho việc hoạch định đường lối, chính sách Sách, tạp chí
Tiêu đề: (Đánh dấu X vào 1 trong 3 ô mỗi dòng dưới đây)
4. Lê Quang Vinh, Vũ Thị Phương, Nguyễn Hoàng Anh (2012). Tài liệu bồi dưỡng năng khiếu Tin học khối THPT Khác
5. Một số bài tập từ website: vnoi.info, spoj.vn, codefore.org, … Khác
6. Các đề thi học sinh giỏi tin học, tin học trẻ cấp tỉnh, cấp quốc gia, đề thi Olympic 30.4 … Khác

TỪ KHÓA LIÊN QUAN

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

w