Thông tin chung
Cấu trúc dữ liệu và giải thuật là một trong những môn học cơ bản của sinh viên ngành Công nghệ thông tin. Các cấu trúc dữ liệu và các giải thuật được xem như là 2 yếu tố quan trọng nhất trong lập trình, đúng như câu nói nổi tiếng của Niklaus Wirth: Chương trình = Cấu trúc dữ liệu + Giải thuật (Programs = Data Structures + Algorithms). Nắm vững các cấu trúc dữ liệu và các giải thuật là cơ sở để sinh viên tiếp cận với việc thiết kế và xây dựng phần mềm cũng như sử dụng các công cụ lập trình hiện đại.
Cấu trúc dữ liệu có thể được xem như là 1 phương pháp lưu trữ dữ liệu trong máy tính nhằm sử dụng một cách có hiệu quả các dữ liệu này. Và để sử dụng các dữ liệu một cách hiệu quả thì cần phải có các thuật toán áp dụng trên các dữ liệu đó. Do vậy, cấu trúc dữ liệu và giải thuật là 2 yếu tố không thể tách rời và có những liên quan chặt chẽ với nhau. Việc lựa chọn một cấu trúc dữ liệu có thể sẽ ảnh hưởng lớn tới việc lựa chọn áp dụng giải thuật nào.
Môn học này cung cấp cho bạn sự hiểu biết về cấu trúc dữ liệu và giải thuật (thuật toán), nắm được một số cấu trúc dữ liệu tuyến tính (linear) và phi tuyến (non-linear), đồng thời triển khai một số giải thuật phổ biến thường dùng trong phần mềm máy tính như tìm kiếm, sắp xếp. Bên cạnh đó, điều quan trọng nhất là bạn cần cố gắng lĩnh hội tư duy về thiết kế cài đặt các cấu trúc dữ liệu giải thuật phù hợp với các vấn đề/bài toán cụ thể bạn sẽ gặp khi làm nghề sau này.
Để bắt đầu, tôi khuyên bạn nên dành một vài phút để khám phá tổng thể môn học. Xem kỹ các tài liệu học của mỗi tuần và xem trước các bài Lab/exercise, bài tập lớn (assignment) và phần Quiz sẽ cần hoàn thành để có kế hoạch học tập phù hợp.
Mục tiêu môn học
Hiểu về khái niệm cấu trúc dữ liệu và giải thuật.
Có thể triển khai các bài toán tìm kiếm và sắp xếp từ cơ bản đến nâng cao.
Nắm được các chiến lược cơ bản về giải thuật như: Tham lam, chia để trị, quy hoạch động.
Có thể triển khai một số cấu trúc dữ liệu cơ bản như: Linked List, Stack và Queue…
Hiểu về các cấu trúc dữ liệu phi tuyến tính như cây, đồ thị và các bài toán tìm kiếm và tối ưu cơ bản trên cây và đồ thị.
Ứng dụng cấu trúc dữ liệu và giải thuật vào giải quyết một số bài toán thực tế.
Trải nghiệm học tập
Phần 1. Giải thuật cơ bản
Bài 1 – Tổng quan về giải thuật
Bài 2 – Giải thuật tham lam
Bài 3 – Giải thuật chia để trị
Bài 4 – Giải thuật quy hoạch động
Bài 5 – Các giải thuật sắp xếp cơ bản
Assignment 1: Sắp xếp_tìm kiếm cơ bản
Phần 2. Cấu trúc dữ liệu tuyến tính
Bài 6 – Mảng và danh sách liên kết
Bài 7 – Ngăn xếp và hàng đợi
Assignment 2: Quản lý sản phẩm
Phần 3. Cấu trúc dữ liệu phi tuyến
Bài 8 – Cây – Các thao tác cơ bản
Bài 9 – Cây tìm kiếm nhị phân: BST
Bài 10 – Đống
Bài 11 – Hàm băm và bảng băm
Bài 12 – Đồ thị – Các thao tác cơ bản
Phần 4. Thuật toán kinh điển
Bài 13 – Bài toán tuyến đường ít chặng nhất
Bài 14 – Bài toán tuyến đường ngắn nhất
Bài 15 – Thuật toán KMP (Knuth-Morris-Pratt Algorithm)
Assignment 3: Quản lý hồ sơ
Nguồn học liệu
Trong thời đại hiện nay, mỗi môn học đều có nhiều nguồn tài liệu liên quan kể cả sách in và online, FUNiX Way không quy định một nguồn học liệu cụ thể mà khuyến cáo để học viên chọn được nguồn phù hợp nhất cho mình. Trong quá trình học từ nhiều nguồn khác nhau theo lựa chọn cá nhân đó, khi sinh viên phát sinh câu hỏi thì sẽ được kết nối nhanh nhất với mentor để được giải đáp. Toàn bộ phần đánh giá bao gồm các câu hỏi trắc nghiệm, bài tập, dự án và thi vấn đáp do FUNiX thiết kế, xây dựng và thực hiện.
Các môn học của FUNiX không quy định bắt buộc tài liệu học tập, sinh viên có thể chủ động tìm và học từ bất kỳ nguồn nào phù hợp, kể cả sách in hay nguồn học liệu online (MOOC) hay các website. Việc sử dụng các nguồn đó do học viên chịu trách nghiệm và đảm bảo tuân thủ các chính sách của chủ sở hữu nguồn, trừ trường hợp họ có sự hợp tác chính thức với FUNiX. Nếu cần hỗ trợ, học viên có thể liên hệ phòng đào tạo FUNiX để được hướng dẫn.
Dưới đây là một số nguồn học liệu của môn học mà học viên có thể tham khảo sử dụng. Việc liệt kê nguồn dưới đây không nhất thiết hàm ý rằng FUNiX có sự hợp tác chính thức với chủ sở hữu của các nguồn học liệu: Coursera, Vietjack, Youtube, Docs.python, Stackoverflow, Codelearn, Tutorialspoint, Programiz, Leetcode, Hackerrank