Bộ sách giáo khoa chuyên Tin 3 quyển trong 1 - Hồ Sĩ Đàm

  1. Tác giả: LTTK CTV
    Đánh giá: ✪ ✪ ✪ ✪ ✪

    Bộ sách giáo khoa chuyên Tin 3 quyển trong 1 - Hồ Sĩ Đàm

    LTTK Education xin giới thiệu với bạn đọc Bộ sách giáo khoa chuyên Tin 3 quyển trong 1 - Hồ Sĩ Đàm để bạn đọc tham khảo học tập những điều bổ ích mà tài liệu này mang lại nhé! Chúc các em học tập thật tốt và mang lại nhiều kết quả khả quan cho bản thân nhé!

    [​IMG]

    ✪ ✪ ✪ ✪ ✪


    Link tải tài liệu:

    LINK TẢI TÀI LIỆU

    LỜI NÓI ðẦU
    Bộ Giáo dục và ðào tạo ñã ban hành chương trình chuyên tin học cho các
    lớp chuyên 10, 11, 12. Dựa theo các chuyên ñề chuyên sâu trong chương trình
    nói trên, các tác giả biên soạn bộ sách chuyên tin học, bao gồm các vấn ñề cơ
    bản nhất về cấu trúc dữ liệu, thuật toán và cài ñặt chương trình.
    Bộ sách gồm ba quyển, quyển 1, 2 và 3. Cấu trúc mỗi quyển bao gồm: phần
    lí thuyết, giới thiệu các khái niệm cơ 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 các bài toán thường gặp, cách giải và cài ñặt chương
    trình; cuối cùng là các bài tập. Các chuyên ñề trong bộ sách ñược lựa chọn mang
    tính hệ thống từ cơ bản ñế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 của các trường chuyên có truyền thống và uy tín, các tác giả ñã lựa chọn,
    biên soạn các nội dung cơ bản, thiết yếu nhất mà mình ñã sử dụng ñể dạy học
    với mong muốn bộ sách phục vụ không chỉ cho giáo viên và học sinh chuyên
    PTTH mà cả 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 và học của mình.
    Với kinh nghiệm nhiều năm tham gia bồi dưỡng học sinh, sinh viên tham gia
    các 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 Toàn quốc, Kì thi lập trình viên Quốc tế khu vực
    ðông Nam Á, các tác giả ñã lựa chọn giới thiệu các bài tập, lời giải có ñịnh
    hướng phục vụ cho không chỉ học sinh mà cả sinh viên làm tài liệu tham khảo
    khi tham gia các kì thi trên.
    Lần ñầu tập sách ñược biên soạn, thời gian và trình ñộ có hạn chế nên chắc
    chắn còn nhiều thiếu sót, các tác giả mong nhận ñược ý kiến ñóng góp của bạn
    ñọc, các ñồng nghiệp, sinh viên và học sinh ñể bộ sách ñược ngày càng hoàn
    thiện hơn .
    Các tác giả
    3
    4
    Chuyên ñề 1
    THUẬT TOÁN
    VÀ PHN TÍCH THUẬT TOÁN
    1. Thuật toán
    Thuật toán là một trong những khái niệm quan trọng nhất trong 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 có thể hiểu thuật toán là dãy hữu hạn các bước, mỗi bước mô tả
    chính xác các phép toán hoặc hành ñộng cần thực hiện, ñể giải quyết một vấn ñề.
    ðể hiểu ñầy ñủ ý nghĩa của khái niệm thuật toán chúng ta xem xét 5 ñặc trưng sau
    của thuật toán:
    • ðầu vào (Input): Thuật toán nhận dữ liệu vào từ một tập nào ñó.
    • ðầu ra (Output): Với mỗi tập các dữ liệu ñầu vào, thuật toán ñưa ra các
    dữ liệu tương ứng với lời giải của bài toán.
    • Chính xác: Các bước của thuật toán ñược mô tả chính xác.
    • Hữu hạn: Thuật toán cần phải ñưa ñược ñầu ra sau một số hữu hạn (có
    thể rất lớn) bước với mọi ñầu vào.
    • ðơn trị: Các kết quả trung gian của từng bước thực hiện thuật toán ñược
    xác ñịnh một cách ñơn trị và chỉ phụ thuộc vào ñầu vào và các kết quả
    của các bước trước.
    • Tổng quát: Thuật toán có thể áp dụng ñể giải mọi bài toán có dạng
    ñã cho.
    ðể biểu diễn thuật toán có thể biểu diễn bằng danh sách các bước, các bước ñược
    diễn ñạt bằng ngôn ngữ thông thường và các kí hiệu toán học; hoặc có thể biểu
    diễn thuật toán bằng sơ ñồ khối. Tuy nhiên, ñể ñảm bảo tính xác ñịnh của thuật
    toán, thuật toán cần ñược viết bằng các ngôn ngữ lập trình. Một chương trình là sự
    biểu diễn của một thuật toán trong ngôn ngữ lập trình ñã chọn. Trong tài liệu này,
    chúng ta sử dụng ngôn ngữ tựa Pascal ñể trình bày các thuật toán. Nói là tựa
    Pascal, bởi vì nhiều trường hợp, ñể cho ngắn gọn, chúng ta không hoàn toàn tuân
    5
    theo quy ñịnh của Pascal. Ngôn ngữ Pascal là ngôn ngữ ñơn giản, khoa học, ñược
    giảng dạy trong nhà trường phổ thông.
    Ví dụ: Thuật toán kiểm tra tính nguyên tố của một số nguyên dương 2,
    viết trên ngôn ngữ lập trình Pascal.
    function is_prime(n):boolean;
    begin
    for k:=2 to n-1 do
    if (n mod k=0) then exit(false);
    exit(true);
    end;
    2. Phân tích thuật toán
    2.1. Tính hiệu quả của thuật toán
    Khi giải một bài toán, chúng ta cần chọn trong số các thuật toán một thuật toán mà
    chúng ta cho là “tốt” nhất. Vậy dựa trên cơ sở nào ñể ñánh giá thuật toán này “tốt”
    hơn thuật toán kia? Thông thường ta dựa trên hai tiểu chuẩn sau:
    1. Thuật toán ñơn giản, dễ hiểu, dễ cài ñặt (dễ viết chương trình).
    2. Thuật toán hiệu quả: Chúng ta thường ñặc biệt quan tâm ñến thời gian
    thực hiện của thuật toán (gọi là ñộ phức tạp tính toán), bên cạnh ñó
    chúng ta cũng quan tâm tới dung lượng không gian nhớ cần thiết ñể lưu
    giữ các dữ liệu vào, ra và các kết quả trung gian trong quá trình
    tính toán.
    Khi viết chương trình chỉ ñể sử dụng một số ít lần thì tiêu chuẩn (1) là quan trọng,
    nhưng nếu viết chương trình ñể sử dụng nhiều lần, cho nhiều người sử dụng thì
    tiêu chuẩn (2) lại quan trọng hơn. Trong trường hợp này, dù thuật toán có thể phải
    cài ñặt phức tạp, nhưng ta vẫn sẽ lựa chọn ñể nhận ñược chương trình chạy nhanh
    hơn, hiệu quả hơn.
    2.2. Tại sao cần thuật toán có tính hiệu quả?
    Kĩ thuật máy tính tiến bộ rất nhanh, ngày nay các máy tính lớn có thể ñạt tốc ñộ
    tính toán hàng nghìn tỉ phép tính trong một giây. Vậy có cần phải tìm thuật toán
    hiệu quả hay không? Chúng ta xem lại ví dụ bài toán kiểm tra tính nguyên tố của
    một số nguyên dương 2.
    function is_prime(n):boolean;
    begin
    6
    for k:=2 to n-1 do
    if (n mod k=0) then exit(false);
    exit(true);
    end;
    Dễ dàng nhận thấy rằng, nếu là một số nguyên tố chúng ta phải mất 2 phép
    toán . Giả sử một siêu máy tính có thể tính ñược trăm nghìn tỉ 10 phép
    trong một giây, như vậy ñể kiểm tra một số khoảng 25 chữ số mất khoảng
    ~3170 năm. Trong khi ñó, nếu ta có nhận xét việc thử từ 2
    ñến 1 là không cần thiết mà chỉ cần thử từ 2 ñến √ , ta có:
    function is_prime(n):boolean;
    begin
    for k:=2 to trunc(sqrt(n)) do
    if (n mod k=0) then exit(false);
    exit(true);
    end;
    {hàm sqrt(n) là hàm tính √, trunc(x) là hàm làm tròn x }
    !"
    Như vậy ñể kiểm tra một số khoảng 25 chữ số mất khoảng
    ~0.03 giây!
    #
    2.3. ðánh giá thời gian thực hiện thuật toán
    Có hai cách tiếp cận ñể ñánh giá thời gian thực hiện của một thuật toán. Cách thứ
    nhất bằng thực nghiệm, chúng ta viết chương trình và cho chạy chương trình với
    các dữ liệu vào khác nhau trên một máy tính. Cách thứ hai bằng phương pháp lí
    thuyết, chúng ta coi thời gian thực hiện thuật toán như hàm số của cỡ dữ liệu vào
    (cỡ của dữ liệu vào là một tham số ñặc trưng cho dữ liệu vào, nó có ảnh hưởng
    quyết ñịnh ñến thời gian thực hiện chương trình. Ví dụ ñối với bài toán kiểm tra
    số nguyên tố thì cỡ của dữ liệu vào là số cần kiểm tra; hay với bài toán sắp xếp
    dãy số, cỡ của dữ liệu vào là số phần tử của dãy). Thông thường cỡ của dữ liệu
    vào là một số nguyên dương , ta sử dụng hàm số % trong ñó là cỡ của dữ
    liệu vào ñể biểu diễn thời thực hiện của một thuật toán.
    Xét ví dụ bài toán kiểm tra tính nguyên tố của một số nguyên dương (cỡ dữ liệu
    vào là ), nếu là một số chẵn & 2 thì chỉ cần một lần thử chia 2 ñể kết luận
    không phải là số nguyên tố. Nếu & 3 không chia hết cho 2 nhưng lại chia
    hết cho 3 thì cần 2 lần thử (chia 2 và chia 3) ñể kết luận không nguyên tố. Còn
    nếu là một số nguyên tố thì thuật toán phải thực hiện nhiều lần thử nhất.