Tổng quan về giáo trình

Giáo trình Cấu trúc dữ liệu và giải thuật (Mã môn học: MH09) do tác giả Trần Thị Mơ chủ biên, được ban hành chính thức kèm theo Quyết định số 374ĐT/QĐ-CĐXD1 ngày 16 tháng 08 năm 2022 của Hiệu trưởng Trường Cao đẳng Xây dựng số 1 (Hà Nội, 2022). Tài liệu được biên soạn phục vụ công tác giảng dạy và học tập cho trình độ Cao đẳng liên thông ngành Công nghệ thông tin (chuyên ngành Ứng dụng phần mềm).

Trong chương trình đào tạo nghề Công nghệ thông tin, Cấu trúc dữ liệu và giải thuật là môn học bắt buộc thuộc nhóm các môn học cơ sở ngành. Môn học có tổng thời lượng thực hiện là 45 giờ, bao gồm: 15 giờ lý thuyết; 28 giờ thực hành, thí nghiệm, thảo luận, bài tập; và 02 giờ kiểm tra định kỳ.

Mục tiêu học tập của giáo trình được xác định trên ba phương diện cụ thể:

  • Về kiến thức: Cung cấp các khái niệm cơ bản về giải thuật, phương pháp đánh giá độ phức tạp của giải thuật; các kiểu cấu trúc dữ liệu thông dụng (mảng, ngăn xếp, hàng đợi, danh sách liên kết, cây, đồ thị) và các giải thuật thao tác trên các kiểu cấu trúc dữ liệu đó.
  • Về kỹ năng: Giúp người học thiết kế được các giải thuật sắp xếp, tìm kiếm; vận dụng các kiểu cấu trúc dữ liệu thông dụng và giải thuật tương ứng để giải quyết các bài toán thực tiễn bằng ngôn ngữ lập trình.
  • Về năng lực tự chủ và trách nhiệm: Rèn luyện ý thức chấp hành kỷ luật học tập và lao động, phát huy tinh thần chủ động nghiên cứu, khả năng sáng tạo và tính chính xác khoa học trong quá trình thao tác dữ liệu.

Cấu trúc giáo trình được thiết kế gồm 04 chương:

  • Chương 1: Giải thuật
  • Chương 2: Danh sách
  • Chương 3: Mô hình cây và đồ thị
  • Chương 4: Các giải thuật sắp xếp và tìm kiếm

Điểm đặc trưng trong cách tiếp cận của giáo trình là việc kết hợp chặt chẽ giữa lý thuyết hình thức (định nghĩa, tính chất, phân loại) với biểu diễn thuật toán qua sơ đồ khối và cài đặt mã nguồn mẫu bằng ngôn ngữ lập trình C/C++, trong đó thời lượng thực hành và bài tập chiếm tới 62,2% tổng quỹ thời gian đào tạo.


Nội dung kiến thức cốt lõi

Các chương và chủ đề chính

Nội dung giáo trình được triển khai qua 04 chương chuyên đề theo tiến trình logic từ tổng quan lý thuyết giải thuật đến các cấu trúc dữ liệu cụ thể và thuật toán xử lý:

  • Chương 1: Giải thuật: Trình bày định nghĩa giải thuật và thiết lập mối quan hệ nền tảng: $\text{Cấu trúc dữ liệu} + \text{Giải thuật} = \text{Chương trình}$. Phân tích các đặc trưng bắt buộc của giải thuật bao gồm: tính xác định, tính khả thi và tính dừng (minh họa qua giải thuật Euclid). Chương 1 cũng quy định các hình thức diễn đạt giải thuật qua ngôn ngữ tự nhiên, sơ đồ khối (với các nút thao tác, nút điều khiển, nút khởi đầu/kết thúc, cung liên kết) và ngôn ngữ lập trình (mã giả, C/Pascal). Hai phương pháp thiết kế giải thuật trọng tâm được giới thiệu gồm: thiết kế từ trên xuống (Top-down design) và phương pháp tinh chỉnh từng bước (Stepwise refinement).

  • Chương 2: Danh sách: Khảo sát các cấu trúc dữ liệu tuyến tính.

    • Kiểu mảng: Đánh giá ưu điểm truy cập ngẫu nhiên qua chỉ số và nhược điểm cố định kích thước bộ nhớ, tốn chi phí dời phần tử khi thêm/xóa.
    • Kiểu ngăn xếp (Stack): Hoạt động theo cơ chế LIFO (Last In First Out - Vào sau ra trước), với các thao tác push (đẩy vào đỉnh), pop (lấy ra từ đỉnh), kiểm tra rỗng, kiểm tra đầy; ứng dụng đổi cơ số 10 sang cơ số 2.
    • Kiểu hàng đợi (Queue): Hoạt động theo cơ chế FIFO (First In First Out - Vào trước ra trước), với các thao tác put (thêm vào đuôi), get (lấy ra từ đầu).
    • Danh sách liên kết: Gồm danh sách liên kết đơn (Singly linked list), danh sách liên kết kép (Doubly linked list) có thêm con trỏ pre, và danh sách liên kết vòng (Circular linked list). Chương này cung cấp mã nguồn C++ chi tiết cho các thao tác: createList(), createNode(), insertHead(), insertTail(), insertAfter(), processList(), searchList(), deleteList(), DeleteFirst(), DeleteEnd(), List_Selection_Sort(), List_Interchange_Sort().
  • Chương 3: Mô hình cây và đồ thị: Giới thiệu các cấu trúc dữ liệu phi tuyến.

    • Mô hình cây và cây nhị phân: Định nghĩa quan hệ cha - con, nút gốc (root), cây con. Khảo sát cây nhị phân với tính chất: số nút ở mức $i \le 2^{i+1}$, số nút tối đa $2^h - 1$, chiều cao $n \ge h \ge \log_2(n+1)$. Triển khai cấu trúc động với hai con trỏ Lchild và Rchild. Ba phép duyệt cây nhị phân gồm: Duyệt tiền thứ (Node-Left-Right), Duyệt trung thứ (Left-Node-Right), và Duyệt hậu thứ (Left-Right-Node).
    • Mô hình đồ thị: Định nghĩa đồ thị có hướng $G = \langle V,E \rangle$, đồ thị vô hướng, đồ thị có trọng số, khái niệm bậc trong $|I(v)|$, bậc ngoài $|A(u)|$, đường đi, chu trình và tính liên thông. Hai phương pháp biểu diễn đồ thị: Ma trận kề kích thước $n \times n$ và Danh sách kề. Hai thuật toán duyệt đồ thị cơ bản: Duyệt theo chiều sâu (DeepFirstSearch - DFS sử dụng đệ quy và mảng đánh dấu daxet[]), Duyệt theo chiều rộng (BreadthFirstSearch - BFS sử dụng hàng đợi Queue).
  • Chương 4: Các giải thuật sắp xếp và tìm kiếm: Phân tích bản chất bài toán sắp xếp, khóa sắp xếp, tính ổn định (stability) của giải thuật, và hai nhóm thuật toán theo độ phức tạp thời gian ($O(N^2)$ và $O(N\log N)$). Cài đặt và phân tích các giải thuật: Sắp xếp đổi chỗ trực tiếp (Exchange Sort), Sắp xếp kiểu chèn (Insertion Sort với độ phức tạp trung bình $O(N^2)$), Sắp xếp kiểu chọn (Selection Sort), giới thiệu Sắp xếp vun đống (Heap Sort) và Sắp xếp nhanh (Quick Sort). Trình bày các giải thuật tìm kiếm: Tìm kiếm tuần tự, Tìm kiếm nhị phân và Cây nhị phân tìm kiếm.

Kiến thức nền tảng được xây dựng

Giáo trình hình thành nền tảng khoa học máy tính thông qua các khối kiến thức:

  • Lý thuyết giải thuật và độ phức tạp: Khái niệm bước toán học, điều kiện dừng, đánh giá hiệu quả thuật toán thông qua số lượng thao tác và dung lượng bộ nhớ.
  • Nguyên lý cấu trúc dữ liệu trừu tượng (ADT): Phân định rõ ràng giữa cấu trúc lưu trữ vật lý (mảng, con trỏ động) và hành vi logic của kiểu dữ liệu trừu tượng (LIFO của Stack, FIFO của Queue).
  • Lý thuyết cấu trúc phân cấp và mạng lưới: Nền tảng toán rời rạc về cây phân cấp và đồ thị liên thông ($V$ đỉnh, $E$ cạnh).
  • Mô hình thiết kế phần mềm có cấu trúc: Nguyên lý phân rã Top-down và phương pháp tinh chỉnh từng bước trong lập trình hàm.

Kỹ năng phát triển

Thông qua hệ thống bài học và bài tập thực hành, người học được rèn luyện các nhóm kỹ năng:

  • Kỹ năng kỹ thuật (Technical skills): Cài đặt cấu trúc dữ liệu bằng con trỏ và struct trong C/C++; quản lý cấp phát (new) và giải phóng (delete) vùng nhớ động; xây dựng các hàm đệ quy và cấu trúc dữ liệu lồng nhau.
  • Kỹ năng phân tích (Analytical skills): Phân tích ưu/nhược điểm giữa mảng tĩnh và danh sách liên kết; lựa chọn cấu trúc biểu diễn đồ thị phù hợp (ma trận kề cho đồ thị dày, danh sách kề cho đồ thị thưa); so sánh chi phí thời gian thực hiện giữa các thuật toán sắp xếp và tìm kiếm.
  • Kỹ năng ứng dụng thực tế (Practical competencies): Xây dựng các chương trình quản lý dữ liệu cụ thể (như quản lý danh sách hồ sơ sinh viên với các trường mã SV, họ tên, năm sinh, điểm trung bình; thực hiện tìm kiếm, sắp xếp theo nhiều tiêu chí).

Phương pháp giảng dạy và học tập

Phương pháp tiếp cận sư phạm

Giáo trình áp dụng mô hình sư phạm kết hợp giữa diễn dịch lý thuyết và quy nạp thực hành:

  1. Hình thành khái niệm: Đưa ra định nghĩa toán học và mô hình trừu tượng.
  2. Mô hình hóa trực quan: Diễn giải quy trình hoạt động bằng lưu đồ khối (Flowchart) hoặc sơ đồ trạng thái từng bước (Trace table).
  3. Hiện thực hóa mã nguồn: Chuyển đổi thuật toán thành các hàm/thủ tục hoàn chỉnh bằng ngôn ngữ C/C++.
  4. Hệ thống hóa kiến thức: Bảng tổng kết yêu cầu lý thuyết và bài tập ở cuối mỗi chương.

Hệ thống bài tập và thực hành

Mỗi chương đều đi kèm hệ thống bài tập đa dạng:

  • Bài tập lý thuyết: Câu hỏi tự luận kiểm tra khả năng phân biệt cơ chế hoạt động (so sánh Stack và Queue, phân tích ưu nhược điểm của mảng so với danh sách liên kết, tính chất cây nhị phân, phân loại đồ thị).
  • Bài tập thuật toán: Viết thuật toán kiểm tra số nguyên tố, tìm số hạng thứ $n$ của dãy Fibonacci, xác định thứ tự thăm nút trong các phép duyệt cây (tiền thứ, trung thứ, hậu thứ) và duyệt đồ thị (DFS, BFS).
  • Bài tập lập trình thực hành: Cài đặt các ứng dụng cụ thể như đổi số nguyên sang hệ nhị phân bằng Stack; xây dựng chương trình quản lý danh sách liên kết đơn/kép chứa cấu trúc dữ liệu sinh viên; thực hiện các thao tác chèn nút, xóa nút, tìm kiếm theo tên/mã, sắp xếp tăng/giảm theo điểm trung bình và giải phóng toàn bộ bộ nhớ.

Phương pháp đánh giá và hướng dẫn tự học

  • Đánh giá học tập: Kết quả môn học được đánh giá qua 28 giờ thực hành/thảo luận trên lớp và 02 giờ làm bài kiểm tra chính thức nhằm đo lường khả năng tư duy thuật toán độc lập và kỹ năng viết code chuẩn xác.
  • Hướng dẫn tự học: Người học cần thực hiện đầy đủ tiến trình: đọc hiểu các đặc trưng thuật toán -> tự vẽ sơ đồ khối của bài toán -> viết mã chương trình trên môi trường C/C++ -> đối chiếu kết quả thực thi với các ca kiểm thử mẫu được cung cấp trong giáo trình.

Điểm nổi bật và cập nhật

  • Tính pháp lý và chuẩn hóa đào tạo: Giáo trình được biên soạn dựa trên đề cương môn học chính thức và ban hành theo Quyết định số 374ĐT/QĐ-CĐXD1 ngày 16/08/2022 của Hiệu trưởng Trường Cao đẳng Xây dựng số 1, đáp ứng chuẩn đầu ra của chương trình đào tạo nghề trong giai đoạn mới.
  • Chuẩn hóa ngôn ngữ cài đặt C/C++: Giáo trình chuyển hóa toàn bộ các thuật toán kinh điển sang mã nguồn C/C++ tường minh, sử dụng đầy đủ các cú pháp quản lý bộ nhớ hiện đại (new, delete), con trỏ cấu trúc (node *next, node *pre), và các thao tác xuất nhập luồng (cin, cout).
  • Tích hợp đa dạng phương thức biểu diễn giải thuật: Mọi giải thuật chính đều được trình bày song song qua ba lớp biểu diễn: ngôn ngữ tự nhiên, sơ đồ khối với các hình khối quy chuẩn (khối thao tác, khối điều kiện, khối bắt đầu/kết thúc), và mã nguồn thực thi, giúp người học nắm bắt thuật toán ở nhiều mức độ trừu tượng khác nhau.
  • Gắn kết trực tiếp với các bài toán thực tiễn: Hệ thống ví dụ và bài tập được liên hệ trực tiếp với các ứng dụng thực tế trong công nghệ thông tin: cấu trúc Stack trong đảo chuỗi/chuyển đổi cơ số, cấu trúc Queue trong điều phối hàng đợi in ấn và máy bay cất cánh, danh sách liên kết trong quản lý danh bạ và hồ sơ nhân sự, mô hình đồ thị trong bài toán mạng lưới giao thông và chuyển đổi trạng thái máy móc.

Đối tượng sử dụng giáo trình

  • Sinh viên đào tạo chính quy: Sinh viên hệ Cao đẳng liên thông ngành Công nghệ thông tin (chuyên ngành Ứng dụng phần mềm) tại Trường Cao đẳng Xây dựng số 1 và sinh viên các trường Cao đẳng, Đại học kỹ thuật có cùng khung chương trình cơ sở ngành.
  • Điều kiện tiên quyết (Prerequisites): Người học cần hoàn thành môn học Tin học cơ sở hoặc Nhập môn lập trình, nắm vững các cấu trúc điều khiển cơ bản (rẽ nhánh if-else, vòng lặp for, while), khái niệm mảng, hàm, và kiến thức toán logic cơ bản.
  • Giảng viên chuyên ngành: Sử dụng giáo trình làm tài liệu giảng dạy chuẩn, phân bổ kế hoạch bài giảng theo khung 45 giờ (15 lý thuyết, 28 thực hành, 02 kiểm tra), xây dựng đề cương bài tập lớn và thiết kế ngân hàng đề thi học phần.
  • Người tự học và tham khảo: Kỹ thuật viên, lập trình viên chuyển ngành cần củng cố kiến thức nền tảng về tổ chức bộ nhớ, quản lý con trỏ và thuật toán xử lý dữ liệu phục vụ phát triển phần mềm ứng dụng.

Câu hỏi thường gặp

1. Giáo trình này phù hợp với đối tượng nào?

Giáo trình được biên soạn chuyên biệt cho sinh viên hệ Cao đẳng liên thông ngành Công nghệ thông tin (Ứng dụng phần mềm), đồng thời phù hợp cho sinh viên các khối ngành kỹ thuật phần mềm cần tài liệu cô đọng, thiên về thực hành cấu trúc dữ liệu và giải thuật.

2. Cần chuẩn bị kiến thức nền tảng nào trước khi học?

Người học cần có kiến thức cơ bản về lập trình cấu trúc bằng ngôn ngữ C hoặc C++, bao gồm: cú pháp khai báo biến, các kiểu dữ liệu cơ sở, cấu trúc điều kiện, vòng lặp, mảng một chiều và kỹ năng viết hàm.

3. Giáo trình này có điểm gì khác biệt so với các tài liệu thuần lý thuyết?

Tài liệu chú trọng tính thực hành với tỷ lệ giờ bài tập và thực hành chiếm hơn 62% thời lượng môn học (28/45 giờ). Toàn bộ các cấu trúc dữ liệu (Stack, Queue, Singly/Doubly Linked List, Cây nhị phân, Đồ thị) đều đi kèm mã nguồn cài đặt chi tiết bằng C/C++, có xử lý đầy đủ việc cấp phát và giải phóng bộ nhớ.

4. Phương pháp tự học giáo trình này như thế nào để đạt hiệu quả?

Người học nên tuân thủ phương pháp tinh chỉnh từng bước: nắm chắc định nghĩa -> tự vẽ sơ đồ khối thuật toán -> gõ và biên dịch lại mã nguồn C++ trên máy tính -> hoàn thành toàn bộ câu hỏi ôn tập và bài tập lập trình quản lý dữ liệu ở mục Hệ thống kiến thức cuối mỗi chương.

5. Giáo trình có cung cấp tài liệu bổ trợ nào không?

Giáo trình tích hợp sẵn hệ thống câu hỏi lý thuyết, các sơ đồ minh họa từng bước chạy của thuật toán, khung mã nguồn mẫu cho từng thao tác dữ liệu và danh mục bài tập thực hành lập trình ứng dụng ở cuối cả 4 chương.


Kết luận

Giáo trình Cấu trúc dữ liệu và giải thuật (Trần Thị Mơ chủ biên, CĐXD1, 2022) cung cấp hệ thống kiến thức chuẩn mực về các kiểu cấu trúc dữ liệu tuyến tính (mảng, ngăn xếp, hàng đợi, danh sách liên kết), cấu trúc phi tuyến (cây nhị phân, đồ thị) cùng các thuật toán sắp xếp và tìm kiếm thông dụng.

Lộ trình học tập đề xuất:

  1. Giai đoạn 1 (Chương 1): Nắm vững bản chất giải thuật, đánh giá độ phức tạp và phương pháp thiết kế Top-down / tinh chỉnh từng bước.
  2. Giai đoạn 2 (Chương 2): Thành thạo kỹ thuật con trỏ và cài đặt các cấu trúc dữ liệu danh sách tuyến tính trên C++.
  3. Giai đoạn 3 (Chương 3): Làm chủ cấu trúc phân cấp cây nhị phân, mô hình đồ thị và các thuật toán duyệt DFS/BFS.
  4. Giai đoạn 4 (Chương 4): Phân tích, lựa chọn và cài đặt các giải thuật sắp xếp, tìm kiếm tối ưu cho từng bài toán thực tế.

Tài nguyên bổ sung cho người học bao gồm hệ thống bài tập lập trình C++ cuối mỗi chương và đề cương chi tiết môn học MH09 ban hành kèm Quyết định 374ĐT/QĐ-CĐXD1.