Ti03

29 230 0
Ti03

Đ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

Trong những năm gần đây nội dung thi học sinh giỏi Tin học cấp Quốc gia nội dung và kiến thức ngày càng được nâng cao đòi hỏi học sinh phải có sự tư duy và sáng tạo trong lập trình. Bài toán tổng hợp từ nhiều kiến thức khác nhau. Trong mỗi bài toán đòi hỏi về tư duy thuật toán tốt và kĩ năng lập trình cao mới đạt điểm tối đa của bài. Kĩ thuật quy hoạch động là một trong những kĩ thuật thường hay gặp trong các kì thi học sinh giỏi Tin học Quốc gia và Quốc tế.

MỤC LỤC MỤC LỤC 1 Mở đầu Cải tiến toán quy hoạch động mở rộng với kỹ thuật chia để trị Xét ví dụ sau: tốn dãy số Hướng dẫn thuật toán: Code mẫu: Link Test code mẫu: Bài tập ứng dụng Bài 1: Famous Pagoda (F - ACM ICPC Vietnam Regional 2017) Mức độ .8 Hướng dẫn thuật toán: Code mẫu: 11 Link Test code mẫu: 13 Bài 2: SEQPART – Mức độ 13 Hướng dẫn thuật toán: 14 Code mẫu: 15 Link Test code mẫu: 16 Bài Bài toán Dãy Fibonacci – FIBSEQ Mức độ .16 Hướng dẫn thuật toán: 17 Code mẫu: 19 Link Test code mẫu: 22 Bài 4: Mining – mức độ khó .22 Hướng dẫn thuật toán: 23 Code mẫu: 25 Link Test code mẫu: 26 Bài 5: F Yet Another Minimization Problem – Mức độ khó 26 Hướng dẫn thuật toán: 27 Code mẫu: 28 Link Test code mẫu: 29 Bài tập tham khảo 29 Kết luận 29 Tài liệu tham khảo 29 CẢI TIẾN BÀI TOÁN QUY HOẠCH ĐỘNG BẰNG KỸ THUẬT CHIA ĐỂ TRỊ Mở đầu Trong năm gần nội dung thi học sinh giỏi Tin học cấp Quốc gia nội dung kiến thức ngày nâng cao đòi hỏi học sinh phải có tư sáng tạo lập trình Bài tốn tổng hợp từ nhiều kiến thức khác Trong tốn đòi hỏi tư thuật tốn tốt kĩ lập trình cao đạt điểm tối đa Kĩ thuật quy hoạch động kĩ thuật thường hay gặp kì thi học sinh giỏi Tin học Quốc gia Quốc tế Bài toán giải phương pháp quy hoạch động thường toán tối ưu Để cải tiến thuật toán quy hoạch động thường có kĩ thuật chia để trị, sử dụng bao lồi đường thẳng Convex hux trick, kĩ thuật đổi biến số kết hợp cấu trúc liệu nâng cao stack, set, multiset, deque để tăng tốc toán tối ưu Để giảm độ phức tạp thuật toán từ O(n 3) O(n2logn), hay từ O(n2) O(nlogn) từ O(n) O(logn) tùy thuộc vào độ lớn liệu tốn kĩ thuật lập trình kết hợp cơng thức quy hoạch động để giải toán tối ưu cách hiệu Chia để trị phương pháp hiệu để thiết kế thuật toán Nguyên lý thực thuật toán chia để trị thực qua hai bước sau:  Bước (chia): Chia toán lớn thành toán nhỏ  Bước (trị): Gọi đệ quy giải tốn con, sau gộp lời giải toán thành lời giải toán lớn Trong chuyên đề giới thiệu kĩ thuật cải tiến tăng tốc toán quy hoạch động phương pháp chia để trị nhằm giảm độ phức tạp thuật tốn nâng cao hiệu lập trình Cải tiến toán quy hoạch động mở rộng với kỹ thuật chia để trị Tiếp cận toán quy hoạch động mở rộng kỹ thuật chia để trị cách tiếp cận với hai kỹ thuật dùng đệ quy có nhớ kết hợp lập bảng quy hoạch động dựa cơng thức truy hồi Khi vừa lưu trữ thực giải pháp toán giúp nâng cao hiệu suất thực toán (xử lý tối ưu) Ví dụ xét tốn Fibonaci: - Sử dụng đệ quy với độ phức tạp O(2n) cách tiếp cận top - down Fib(n) { if (n < 2) result = n else result = Fib(n-2) + Fib(n-1) F[n] = result return F[n] } - Tiếp cận bottom up phương pháp lập bảng quy hoạch động để giảm thời gian thực thuật toán với độ phức tạp O(n) sau: tabFib(n) { F[0] = F[1] = for i = n F[i] = F[i-2] + F[i-1] return F[n] } Ý tưởng tốn quy hoạch động mở rộng kỹ thuật chia để trị phải xác định toán lập bảng phương án quy hoạch động dựa công thức truy hồi chia để trị đâu việc lưu trữ giá trị sử dụng chúng để tính cho thời điểm chương trình thực tối ưu Xét ví dụ sau: toán dãy số Trong tiết học dãy số trường, thầy giáo Tý cho lớp chơi trò chơi sau: Cho dãy số A bao gồm N số nguyên, yêu cầu chia dãy số thành hai phần liên tiếp cho tổng số phần bên trái tổng số phần bên phải Với bước bạn điểm khơng thể chia trò chơi kết thúc Sau chia thành công bạn chọn dãy số bên trái bên phải để tiếp tục chơi với bước trò chơi kết thúc Là học sinh giỏi lớp, Tý muốn đạt số điểm cao Bạn tính xem số điểm lớn mà Tý đạt bao nhiêu? Dữ liệu vào từ tệp văn SEQ.INP:  Dòng ghi số nguyên T (1 ≤ T ≤ 10) số lượng liệu Mỗi liệu bao gồm hai dòng:  Dòng ghi số nguyên N số lượng phần tử dãy A  Dòng thứ hai gồm N phần tử dãy A ghi cách dấu cách (0 ≤ ≤ 10 ) Kết ghi tệp văn SEQ.OUT: Với liệu in số nguyên dòng kết liệu Ví dụ: SEQ.INP 3 3 2 2 1 1 SEQ.OUT Giới hạn:  30% số liệu có N≤ 200  60% số liệu có N≤ 2000  100% số liệu có N≤ 2000 Hướng dẫn thuật tốn: Đây dạng toán quy hoạch động kết hợp với kĩ thuật chia để trị để giải tối ưu toán cách dễ dàng: - Đầu tiên xử lý liệu vào kĩ thuật tổng cộng dồn O(n) - Để phân chia dãy a1, a2, …, an thành đoạn có tổng ta sử dụng thuật tốn chặt nhị phân để tìm vị trí low vị trí chia dãy số thành hai dãy có tổng dãy - Khi đáp án tốn ans=1+max( tinh(1,low), tinh(low+1, n)) - Kết hợp kỹ thuật quy hoạch động chia để trị sau: + Đầu tiên ta tìm vị trí mà tổng hai dãy kĩ thuật chặt nhị phân long long half = (s[r] - s[l]) / 2; int low = l, high = r; while (low + < high) { int mid = (low + high) / 2; if (s[mid] - s[l] > L >> G; for (int i = 1; i > C[i]; sum[i] = sum[i - 1] + C[i]; } for (int i = 1; i

Ngày đăng: 18/10/2019, 16:57

Mục lục

  • MỤC LỤC

  • 1. Mở đầu

  • 2. Cải tiến bài toán quy hoạch động mở rộng với kỹ thuật chia để trị

    • Xét ví dụ sau: bài toán dãy số.

      • Hướng dẫn thuật toán:

      • Code mẫu:

      • Link Test và code mẫu:

      • 3. Bài tập ứng dụng

        • Bài 1: Famous Pagoda (F - ACM ICPC Vietnam Regional 2017) Mức độ khá

          • Hướng dẫn thuật toán:

          • Code mẫu:

          • Link Test và code mẫu:

          • Bài 2: SEQPART – Mức độ khá

            • Hướng dẫn thuật toán:

            • Code mẫu:

            • Link Test và code mẫu:

            • Bài 3. Bài toán Dãy Fibonacci – FIBSEQ. Mức độ khá

              • Hướng dẫn thuật toán:

              • Code mẫu:

              • Link Test và code mẫu:

              • Bài 4: Mining – mức độ khó

                • Hướng dẫn thuật toán:

                • Code mẫu:

                • Link Test và code mẫu:

                • Bài 5: F. Yet Another Minimization Problem – Mức độ khó

                  • Hướng dẫn thuật toán:

                  • Code mẫu:

                  • Link Test và code mẫu:

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

Tài liệu liên quan