Tài liệu chuyên tin học quyển 3

219 60 0
Tài liệu chuyên tin học quyển 3

Đ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

Hồ sĩ đàm (Chủ biên) đỗ đức đông lê minh hoàng nguyễn hùng tài liệu giáo khoa chuyên tin Nhà xuất giáo dục việt nam CuuDuongThanCong.com https://fb.com/tailieudientucntt Công ty Cổ phần dịch vụ xuất Giáo dục Hà Nội - Nhà xuất Giáo dục Việt Nam giữ quyền công bố tác phẩm 349-2009/CXB/43-644/GD M sè : 8I746H9 CuuDuongThanCong.com https://fb.com/tailieudientucntt LỜI NÓI ðẦU Bộ Giáo dục ðào tạo ñã ban hành chương trình chuyên tin học cho lớp chuyên 10, 11, 12 Dựa theo chuyên ñề chuyên sâu chương trình nói trên, tác giả biên soạn sách chuyên tin học, bao gồm vấn ñề cấu trúc liệu, thuật toán cài ñặt chương trình Bộ sách gồm ba quyển, 1, Cấu trúc bao gồm: phần lí thuyết, giới thiệu khái niệm bản, cần thiết trực tiếp, thường dùng nhất; phần áp dụng, trình bày toán thường gặp, cách giải cài ñặt chương trình; cuối tập Các chun đề sách lựa chọn mang tính hệ thống từ ñến chuyên sâu Với trải nghiệm nhiều năm tham gia giảng dạy, bồi dưỡng học sinh chuyên tin học trường chuyên có truyền thống uy tín, tác giả lựa chọn, biên soạn nội dung bản, thiết yếu mà sử dụng để dạy học với mong muốn sách phục vụ không cho giáo viên học sinh chuyên PTTH mà cho giáo viên, học sinh chuyên tin học THCS làm tài liệu tham khảo cho việc dạy học Với kinh nghiệm nhiều năm tham gia bồi dưỡng học sinh, sinh viên tham gia kì thi học sinh giỏi Quốc gia, Quốc tế Hội thi Tin học trẻ Toàn quốc, Olympiad Sinh viên Tin học Tồn quốc, Kì thi lập trình viên Quốc tế khu vực ðơng Nam Á, tác giả ñã lựa chọn giới thiệu tập, lời giải có định hướng phục vụ cho khơng học sinh mà sinh viên làm tài liệu tham khảo tham gia kì thi Lần đầu tập sách biên soạn, thời gian trình độ có hạn chế nên chắn cịn nhiều thiếu sót, tác giả mong nhận ý kiến đóng góp bạn ñọc, ñồng nghiệp, sinh viên học sinh để sách ngày hồn thiện Các tác giả CuuDuongThanCong.com https://fb.com/tailieudientucntt CuuDuongThanCong.com https://fb.com/tailieudientucntt Chun đề THUẬT TỐN VÀ PHÂN TÍCH THUẬT TỐN Thuật toán Thuật toán khái niệm quan trọng tin học Thuật ngữ thuật toán xuất phát từ nhà khoa học Arập Abu Ja'far Mohammed ibn Musa al Khowarizmi Ta hiểu thuật tốn dãy hữu hạn bước, bước mơ tả xác phép tốn hành động cần thực hiện, ñể giải vấn ñề ðể hiểu ñầy ñủ ý nghĩa khái niệm thuật toán xem xét đặc trưng sau thuật tốn: • ðầu vào (Input): Thuật toán nhận liệu vào từ tập • ðầu (Output): Với tập liệu đầu vào, thuật tốn đưa liệu tương ứng với lời giải tốn • Chính xác: Các bước thuật tốn mơ tả xác • Hữu hạn: Thuật tốn cần phải ñưa ñược ñầu sau số hữu hạn (có thể lớn) bước với đầu vào • ðơn trị: Các kết trung gian bước thực thuật tốn xác định cách ñơn trị phụ thuộc vào ñầu vào kết bước trước • Tổng quát: Thuật tốn áp dụng để giải tốn có dạng cho ðể biểu diễn thuật tốn biểu diễn danh sách bước, bước diễn đạt ngơn ngữ thơng thường kí hiệu tốn học; biểu diễn thuật tốn sơ đồ khối Tuy nhiên, để đảm bảo tính xác định thuật tốn, thuật tốn cần viết ngơn ngữ lập trình Một chương trình biểu diễn thuật tốn ngơn ngữ lập trình chọn Trong tài liệu này, sử dụng ngơn ngữ tựa Pascal để trình bày thuật tốn Nói tựa Pascal, nhiều trường hợp, ngắn gọn, khơng hồn tồn tn CuuDuongThanCong.com https://fb.com/tailieudientucntt theo quy định Pascal Ngơn ngữ Pascal ngơn ngữ đơn giản, khoa học, giảng dạy nhà trường phổ thơng Ví dụ: Thuật tốn kiểm tra tính ngun tố số nguyên dương ݊ ሺ݊ ൒ 2ሻ, viết ngôn ngữ lập trình Pascal function is_prime(n):boolean; begin for k:=2 to n-1 if (n mod k=0) then exit(false); exit(true); end; Phân tích thuật tốn 2.1 Tính hiệu thuật toán Khi giải toán, cần chọn số thuật toán thuật toán mà cho “tốt” Vậy dựa sở để đánh giá thuật tốn “tốt” thuật tốn kia? Thơng thường ta dựa hai tiểu chuẩn sau: Thuật tốn đơn giản, dễ hiểu, dễ cài đặt (dễ viết chương trình) Thuật tốn hiệu quả: Chúng ta thường ñặc biệt quan tâm ñến thời gian thực thuật tốn (gọi độ phức tạp tính tốn), bên cạnh quan tâm tới dung lượng khơng gian nhớ cần thiết để lưu giữ liệu vào, kết trung gian q trình tính tốn Khi viết chương trình để sử dụng số lần tiêu chuẩn (1) quan trọng, viết chương trình để sử dụng nhiều lần, cho nhiều người sử dụng tiêu chuẩn (2) lại quan trọng Trong trường hợp này, dù thuật tốn phải cài ñặt phức tạp, ta lựa chọn ñể nhận ñược chương trình chạy nhanh hơn, hiệu 2.2 Tại cần thuật tốn có tính hiệu quả? Kĩ thuật máy tính tiến nhanh, ngày máy tính lớn đạt tốc độ tính tốn hàng nghìn tỉ phép tính giây Vậy có cần phải tìm thuật tốn hiệu hay khơng? Chúng ta xem lại ví dụ tốn kiểm tra tính nguyên tố số nguyên dương ݊ ሺ݊ ൒ 2ሻ function is_prime(n):boolean; begin CuuDuongThanCong.com https://fb.com/tailieudientucntt for k:=2 to n-1 if (n mod k=0) then exit(false); exit(true); end; Dễ dàng nhận thấy rằng, ݊ số nguyên tố phải ݊ െ phép tốn ݉‫݀݋‬ Giả sử siêu máy tính tính trăm nghìn tỉ ሺ10ଵସ ሻ phép ݉‫ ݀݋‬trong giây, ñể kiểm tra số khoảng 25 chữ số khoảng ଵ଴మఱ ଵ଴భర ൈ଺଴ൈ଺଴ൈଶସൈଷ଺ହ ~3170 năm Trong đó, ta có nhận xét việc thử ݇ từ ñến ݊ െ không cần thiết mà cần thử ݇ từ ñến √ ݊, ta có: function is_prime(n):boolean; begin for k:=2 to trunc(sqrt(n)) if (n mod k=0) then exit(false); exit(true); end; {hàm sqrt(n) hàm tính √݊, trunc(x) hàm làm trịn x } Như để kiểm tra số khoảng 25 chữ số khoảng ඥ ૚૙૛૞ ૚૙૚૝ ~0.03 giây! 2.3 ðánh giá thời gian thực thuật tốn Có hai cách tiếp cận để đánh giá thời gian thực thuật toán Cách thứ thực nghiệm, viết chương trình cho chạy chương trình với liệu vào khác máy tính Cách thứ hai phương pháp lí thuyết, coi thời gian thực thuật toán hàm số cỡ liệu vào (cỡ liệu vào tham số ñặc trưng cho liệu vào, có ảnh hưởng định đến thời gian thực chương trình Ví dụ tốn kiểm tra số ngun tố cỡ liệu vào số ݊ cần kiểm tra; hay với toán xếp dãy số, cỡ liệu vào số phần tử dãy) Thông thường cỡ liệu vào số nguyên dương ݊, ta sử dụng hàm số ܶሺ݊ሻ ݊ cỡ liệu vào ñể biểu diễn thời thực thuật tốn Xét ví dụ tốn kiểm tra tính ngun tố số nguyên dương ݊ (cỡ liệu vào ݊), ݊ số chẵn ሺ݊ ൐ 2ሻ cần lần thử chia ñể kết luận ݊ số nguyên tố Nếu ݊ ሺ݊ ൐ 3ሻ không chia hết cho lại chia hết cho cần lần thử (chia chia 3) để kết luận ݊ khơng ngun tố Cịn ݊ số ngun tố thuật tốn phải thực nhiều lần thử CuuDuongThanCong.com https://fb.com/tailieudientucntt Trong tài liệu này, hiểu hàm số ܶሺ݊ሻ thời gian nhiều cần thiết ñể thực thuật tốn với liệu đầu vào cỡ ݊ Sử dụng kí hiệu tốn học lớn để mơ tả độ lớn hàm ܶሺ݊ሻ Giả sử ݊ số nguyên dương, ܶሺ݊ሻ ݂ሺ݊ሻ hai hàm thực không âm Ta viết ܶሺ݊ሻ ൌ ܱሺ݂ሺ݊ሻሻ tồn số dương ܿ ݊଴ , cho ܶሺ݊ሻ ൑ ܿ ൈ ݂ሺ݊ሻ, với ݊ ൒ ݊଴ Nếu thuật toán có thời gian thực ܶሺ݊ሻ ൌ ܱሺ݂ሺ݊ሻሻ nói thuật tốn có thời gian thực cấp ݂ሺ݊ሻ Ví dụ: Giả sử ܶሺ݊ሻ ൌ ݊ଶ ൅ 2݊, ta có ݊ଶ ൅ 2݊ ൑ ݊ଶ ൅ 2݊ଶ ൌ 3݊ଶ với ݊ ൒ Vậy ܶሺ݊ሻ ൌ ܱሺ݊ଶ ሻ, trường hợp ta nói thuật tốn có thời gian thực cấp ݊ଶ 2.4 Các quy tắc đánh giá thời gian thực thuật tốn ðể đánh giá thời gian thực thuật tốn trình bày ngôn ngữ tựa Pascal, ta cần biết cách ñánh giá thời gian thực câu lệnh Pascal Trước tiên, xem xét câu lệnh Pascal Các câu lệnh Pascal ñịnh nghĩa ñệ quy sau: Các phép gán, ñọc, viết câu lệnh (ñược gọi lệnh ñơn) Nếu S1, S2, , Sm câu lệnh Begin S1; S2; …; Sm; End; câu lệnh (ñược gọi lệnh hợp thành hay khối lệnh) Nếu S1 S2 câu lệnh E biểu thức lơgic If E then S1 else S2; câu lệnh (ñược gọi lệnh rẽ nhánh hay lệnh If) Nếu S câu lệnh E biểu thức lơgic While E S; câu lệnh (ñược gọi lệnh lặp ñiều kiện trước hay lệnh While) Nếu S1, S2,…,Sm câu lệnh E biểu thức lơgic Repeat S1; S2; …; Sm; Until E; câu lệnh (ñược gọi lệnh lặp ñiều kiện sau hay lệnh Repeat) CuuDuongThanCong.com https://fb.com/tailieudientucntt Nếu S lệnh, E1 E2 biểu thức kiểu thứ tự ñếm ñược For i:=E1 to E2 S; câu lệnh (ñược gọi lệnh lặp với số lần xác ñịnh hay lệnh For) ðể ñánh giá, phân tích chương trình xuất phát từ lệnh đơn, ñánh giá lệnh phức tạp hơn, cuối ñánh giá ñược thời gian thực chương trình, cụ thể: Thời gian thực lệnh ñơn: gán, ñọc, viết ܱሺ1ሻ Lệnh hợp thành: giả sử thời gian thực S1, S2,…,Sm tương ứng ܱሺ݂ଵ ሺ݊ሻሻ, ܱሺ݂ଶ ሺ݊ሻሻ, , ܱሺ݂௠ ሺ݊ሻሻ Khi thời gian thực lệnh hợp thành là: ܱሺ݉ܽ‫ݔ‬ሺ݂ଵ ሺ݊ሻ, ݂ଶ ሺ݊ሻ, … , ݂௠ ሺ݊ሻሻሻ Lệnh If: giả sử thời gian thực S1, S2 tương ứng ܱሺ݂ଵ ሺ݊ሻሻ, ܱሺ݂ଶ ሺ݊ሻሻሻ Khi ñó thời gian thực lệnh If là: ܱሺ݉ܽ‫ݔ‬ሺ݂ଵ ሺ݊ሻ, ݂ଶ ሺ݊ሻሻሻ Lệnh lặp While: giả sử thời gian thực lệnh S (thân lệnh While) ܱሺ݂ሺ݊ሻሻ ݃ሺ݊ሻ số lần lặp tối ña thực lệnh S Khi thời gian thực lệnh While ܱሺ݂ሺ݊ሻ݃ሺ݊ሻሻ Lệnh lặp Repeat: giả sử thời gian thực khối lệnh Begin S1; S2;…; Sm; End; ܱሺ݂ሺ݊ሻሻ ݃ሺ݊ሻ số lần lặp tối ña Khi thời gian thực lệnh Repeat ܱሺ݂ሺ݊ሻ݃ሺ݊ሻሻ Lệnh lặp For: giả sử thời gian thực lệnh S ܱሺ݂ሺ݊ሻሻ ݃ሺ݊ሻ số lần lặp tối đa Khi thời gian thực lệnh For ܱሺ݂ሺ݊ሻ݃ሺ݊ሻሻ 2.5 Một số ví dụ Ví dụ 1: Phân tích thời gian thực chương trình sau: var i, j, n :longint; s1, s2 :longint; BEGIN {1} readln(n); {2} s1:=0; {3} for i:=1 to n {4} s1:=s1 + i; {5} s2:=0; CuuDuongThanCong.com https://fb.com/tailieudientucntt {6} {7} {8} {9} END for j:=1 to n s2:=s2 + j*j; writeln('1+2+ +',n,'=',s1); writeln('1^2+2^2+ +',n,'^2=',s2); Thời gian thực chương trình phụ thuộc vào số ࢔ Các lệnh {1}, {2}, {4}, {5}, {7}, {8}, {9} có thời gian thực ܱሺ1ሻ Lệnh lặp For {3} có số lần lặp ݊, lệnh {3} có thời gian thực ܱሺ݊ሻ Tương tự lệnh lặp For {6} có thời gian thực ܱሺ݊ሻ Vậy thời gian thực chương trình là: maxሺܱሺ1ሻ, ܱሺ1ሻ, ܱሺ݊ሻ, ܱሺ1ሻ, ܱሺ݊ሻ, ܱሺ1ሻ, ܱሺ1ሻሻ ൌ ܱሺ݊ሻ Ví dụ 2: Phân tích thời gian thực đoạn chương trình sau: {1} {2} {3} {4} {5} {6} c:=0; for i:=1 to 2*n c:=c+1; for i:=1 to n for j:=1 to n c:=c+1; Thời gian thực chương trình phụ thuộc vào số ݊ Các lệnh {1}, {3}, {6} có thời gian thực ܱሺ1ሻ Lệnh lặp For {2} có số lần lặp 2݊, lệnh {2} có thời gian thực ܱሺ݊ሻ Lệnh lặp For {5} có số lần lặp ݊, lệnh {5} có thời gian thực ܱሺ݊ሻ Lệnh lặp For {4} có số lần lặp ݊, lệnh {4} có thời gian thực ܱሺ݊ଶ ሻ Vậy thời gian thực đoạn chương trình là: maxሺܱሺ1ሻ, ܱሺ݊ሻ, ܱሺ݊ଶ ሻሻ ൌ ܱሺ݊ଶ ሻ Ví dụ 3: Phân tích thời gian thực đoạn chương trình sau: {1} {2} {3} for i:=1 to n for j:=1 to i c:=c+1; Thời gian thực chương trình phụ thuộc vào số ݊ Các lệnh {3} có thời gian thực ܱሺ1ሻ 10 CuuDuongThanCong.com https://fb.com/tailieudientucntt ... mà sử dụng ñể dạy học với mong muốn sách phục vụ không cho giáo viên học sinh chuyên PTTH mà cho giáo viên, học sinh chuyên tin học THCS làm tài liệu tham khảo cho việc dạy học Với kinh nghiệm... chương trình; cuối tập Các chuyên ñề sách lựa chọn mang tính hệ thống từ ñến chuyên sâu Với trải nghiệm nhiều năm tham gia giảng dạy, bồi dưỡng học sinh chuyên tin học trường chuyên có truyền thống... -1, 1, 2, 3) Hai số liên tiếp dòng cách dấu cách Kết quả: ðưa file văn MUSHROOM.OUT chứa dòng ghi số ngun kết tốn Ví dụ: MUSHROOM.INP MUSHROOM.OUT 3 3 -1 3 3 2.26 HỆ THỐNG ðÈN MÀU (Tin học trẻ

Ngày đăng: 23/08/2020, 23:34

Mục lục

  • Tài liệu giáo khoa chuyên tin - Quyển 1

    • Lời nói đầu

    • Thuật toán và phân tích thuật toán

    • Các kiến thức cơ bản

      • Hệ đếm

      • Ước số, bội số

      • Lý thuyết tập hợp

      • Xử lý số nguyên lớn

      • Bài tập

      • Sắp xếp

        • Phát biểu bài toán

        • Các thuật toán sắp xếp thông dụng

        • Sắp xếp bằng đếm phân phối

        • Ứng dụng của sắp xếp

        • Bài tập

        • Thiết kế giải thuật

          • Quay lui

          • Nhánh và cận

          • Quy hoạch động

          • Bài tập

          • Các thuật toán trên đồ thị

            • Khái niệm cơ bản

            • Biểu diễn đồ thị

            • Các thuật toán tìm kiếm trên đồ thị

            • Tính liên thông của đồ thị

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

Tài liệu liên quan