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: MH13) được biên soạn bởi chủ biên Trần Thị Mơ, ban hành theo Quyết định số 368ĐT/QĐ-CĐXD1 ngày 10 tháng 08 năm 2021 của Hiệu trưởng Trường Cao đẳng Xây dựng số 1. Tài liệu được thiết kế phục vụ công tác giảng dạy và học tập cho trình độ Cao đẳng chính quy 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, Cấu trúc dữ liệu và giải thuật là môn học cơ sở ngành bắt buộc. Thời lượng môn học được xác định là 60 giờ, phân bổ cụ thể thành: 30 giờ lý thuyết; 27 giờ thực hành, thí nghiệm, thảo luận, bài tập; và 3 giờ kiểm tra định kỳ.

Mục tiêu đào tạo của giáo trình được xác lập trên ba phương diện:

  • Kiến thức: Cung cấp các khái niệm nền tảng về giải thuật, phương pháp đánh giá độ phức tạp tính toán, các kiểu cấu trúc dữ liệu tuyến tính và phi tuyến tính thông dụng cùng các thuật toán thao tác tương ứng.
  • Kỹ năng: Hình thành năng lực thiết kế, cài đặt các giải thuật tìm kiếm, sắp xếp; vận dụng linh hoạt cấu trúc dữ liệu để giải quyết các bài toán kỹ thuật lập trình thực tiễn.
  • Năng lực tự chủ và trách nhiệm: Rèn luyện ý thức kỷ luật lao động, tư duy nghiên cứu chủ động, sáng tạo trong việc tổ chức và tối ưu hóa chương trình.

Cấu trúc giáo trình xây dựng trên 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}$. Cách tiếp cận đi từ việc hình thành tư duy thuật toán, kỹ thuật biểu diễn và đánh giá độ phức tạp đến việc khảo sát chi tiết các cấu trúc dữ liệu cụ thể (danh sách, cây, đồ thị) và các thuật toán xử lý dữ liệu chuẩn tắc.


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

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

Nội dung giáo trình được cấu trúc thành 04 chương chính với tính liên kết logic chặt chẽ:

  • Chương 1: Giải thuật (Trang 1 - 9): Cung cấp các khái niệm tổng quan về giải thuật; 8 đặc trưng tiêu chuẩn của giải thuật (tính xác định, tính khả thi, tính dừng, dữ liệu vào/Input, dữ liệu ra/Output, tính hiệu quả, tính chính xác, tính ứng dụng/hữu hạn); 3 phương pháp biểu diễn giải thuật (ngôn ngữ tự nhiên, sơ đồ khối/lưu đồ, mã giả và ngôn ngữ lập trình); phương pháp thiết kế giải thuật theo mô hình từ trên xuống (Top-down design), kỹ thuật tinh chỉnh từng bước; đánh giá độ phức tạp thuật toán thông qua ký hiệu $O$-lớn ($O(1)$, $O(\log n)$, $O(n)$, $O(P(n))$, $O(a^n)$).
  • Chương 2: Danh sách (Trang 10 - 27): Trình bày tập hợp các cấu trúc dữ liệu tuyến tính gồm mảng một chiều, kiểu ngăn xếp (Stack hoạt động theo cơ chế LIFO - Last In First Out với các thao tác push, pop), kiểu hàng đợi (Queue hoạt động theo cơ chế FIFO - First In First Out với các thao tác put, get), và hệ thống danh sách liên kết (danh sách liên kết đơn - Singly Linked List, danh sách liên kết kép - Doubly Linked List, danh sách liên kết vòng - Circular Linked List). Chương cung cấp toàn bộ định nghĩa cấu trúc dữ liệu struct node, struct dNode, struct sList, struct dList và các hàm cài đặt bằng ngôn ngữ C++: createNode, insertHead, insertTail, insertAfter, processList, searchList, deleteList, List_Selection_Sort, List_Interchange_Sort.
  • Chương 3: Mô hình cây và đồ thị (Trang 28 - 43): Khảo sát cấu trúc phi tuyến tính. Phần Cây phân tích quan hệ cha - con (parenthood), mô hình cây nhị phân, các tính chất toán học ($n \le 2^h - 1$, $n \ge h \ge \log_2(n+1)$) và 3 phương pháp duyệt cây (tiền thứ tự - NLR, trung thứ tự - LNR, hậu thứ tự - LRN). Phần Đồ thị định nghĩa đồ thị có hướng $G = \langle V, E \rangle$ (bậc trong, bậc ngoài), đồ thị vô hướng và đồ thị có trọng số; 2 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ề); 2 phương pháp duyệt đồ thị (duyệt theo chiều rộng - BFS sử dụng hàng đợi, duyệt theo chiều sâu - DFS sử dụng đệ quy và mảng đánh dấu daxet); thuật toán Dijkstra tìm đường đi ngắn nhất và giải thuật Kruskal tìm cây khung nhỏ nhất (MST) dựa trên phương pháp tham lam.
  • Chương 4: Các giải thuật sắp xếp và tìm kiếm (Trang 64): Phân tích các thuật toán sắp xếp đổi chỗ trực tiếp, sắp xếp vun đống (Heap Sort); các thuật toán tìm kiếm tuần tự, tìm kiếm nhị phân và mô hình cấu trúc cây nhị phân tìm kiếm (Binary Search Tree - BST).

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

Giáo trình thiết lập hệ thống kiến thức nền tảng khoa học máy tính thông qua:

  • Hệ thống lý thuyết cơ bản: Nguyên lý tổ chức dữ liệu tuyến tính và phi tuyến tính; bản chất của biến con trỏ và cơ chế cấp phát/giải phóng bộ nhớ động (new, delete) trong C++; lý thuyết đồ thị và cây.
  • Các nguyên lý cốt lõi: Cơ chế lưu trữ và truy xuất theo thứ tự đảo ngược (LIFO) hoặc bảo toàn thứ tự (FIFO); nguyên lý thiết kế mô-đun hóa và chia nhỏ bài toán phức tạp thành các bài toán độc lập; nguyên tắc tối ưu hóa tài nguyên phần cứng (bộ nhớ trong và thời gian tính toán).
  • Khung phân tích thuật toán: Quy chuẩn toán học về độ phức tạp thời gian và không gian $R(n)$ qua tiệm cận $O$-lớn, giúp định lượng tài nguyên xử lý trước khi cài đặt phần mềm.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật: Cài đặt mã nguồn hoàn chỉnh trên ngôn ngữ C/C++ cho các cấu trúc ngăn xếp, hàng đợi, danh sách liên kết đơn/kép/vòng; thực hiện các thao tác quản lý con trỏ head, tail, next, pre; cài đặt thuật toán duyệt đồ thị BFS, DFS và giải thuật Euclid, Dijkstra, Kruskal.
  • Kỹ năng phân tích: Đánh giá ưu điểm và nhược điểm giữa cấu trúc mảng và danh sách liên kết; lựa chọn giữa ma trận kề và danh sách kề tùy theo mật độ cạnh của đồ thị; phân tích độ phức tạp thuật toán để chọn giải pháp tối ưu.
  • Năng lực ứng dụng thực tiễn: Chuyển hóa các bài toán nghiệp vụ (quản lý danh sách sinh viên có tiêu chí lọc điểm $\text{ĐTB} \ge 5$, bài toán quản lý hồ sơ lương cán bộ, bài toán tính nghiệm phương trình bậc hai, bài toán chuyển đổi hệ cơ số 10 sang cơ số 2) thành các chương trình máy tính có cấu trúc dữ liệu phù hợp.

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

Giáo trình áp dụng cách tiếp cận sư phạm đi từ trừu tượng hóa mô hình đến thực thi chi tiết. Tiến trình bài học được thiết kế tuần tự: $$\text{Khái niệm lý thuyết} \longrightarrow \text{Mô hình hóa/Sơ đồ khối} \longrightarrow \text{Mã giả/C++} \longrightarrow \text{Phân tích độ phức tạp} \longrightarrow \text{Bài tập ứng dụng}$$

Về mặt thực hành và tình huống (case studies), giáo trình tích hợp các ví dụ minh họa gắn với bài toán cụ thể:

  • Ví dụ về thuật toán Euclid tìm ước chung lớn nhất để giải thích tính dừng của thuật toán.
  • Lưu đồ và mã giả giải phương trình bậc hai $ax^2 + bx + c = 0$ minh họa cho cấu trúc rẽ nhánh và các nút điều khiển trong sơ đồ khối.
  • Bài toán quản lý hệ thống bảo trì hồ sơ lương cán bộ phục vụ minh họa phương pháp thiết kế từ trên xuống (Top-down design).
  • Thuật toán sắp xếp dãy $n$ số nguyên theo thứ tự tăng dần minh họa cho kỹ thuật tinh chỉnh từng bước.
  • Bài toán chuyển đổi số nguyên dương (ví dụ số 23) sang hệ nhị phân minh họa cơ chế hoạt động của Stack (LIFO).
  • Bài toán quản lý danh sách sinh viên gồm các trường thông tin: mã SV, họ tên, năm sinh, điểm trung bình, yêu cầu thực hiện các thao tác chèn, xóa, sắp xếp theo điểm/mã SV, tìm kiếm và lọc dữ liệu.

Phương pháp đánh giá kết quả học tập được xác định qua cơ cấu 60 giờ đào tạo: đánh giá thường xuyên qua 27 giờ thực hành/thảo luận trên lớp, hệ thống câu hỏi lý thuyết và bài tập lập trình cuối mỗi chương, cùng 3 giờ dành riêng cho kiểm tra định kỳ. Đối với việc tự học, giáo trình cung cấp hệ thống câu hỏi ôn tập và bài tập lập trình có đáp án mã nguồn khung ở cuối các Chương 1, Chương 2 và Chương 3 để người học tự kiểm tra và củng cố kiến thức.


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

  • Căn cứ pháp lý và chuẩn đào tạo mới: Giáo trình được ban hành năm 2021 theo Quyết định số 368ĐT/QĐ-CĐXD1 của Hiệu trưởng Trường Cao đẳng Xây dựng số 1, được biên soạn chuẩn hóa theo đề cương chi tiết học phần Cấu trúc dữ liệu và giải thuật (MH13) trình độ Cao đẳng Công nghệ thông tin.
  • Phương pháp diễn đạt đa tầng: Tài liệu kết hợp đồng thời ba hình thức biểu diễn giải thuật: ngôn ngữ tự nhiên, sơ đồ khối chuẩn tắc (với quy ước rõ ràng về nút thao tác, nút điều khiển, nút khởi đầu/kết thúc, cung nối) và mã lập trình thực thi bằng C/C++.
  • Mã nguồn cài đặt chi tiết: Các thao tác trên cấu trúc dữ liệu động (danh sách liên kết đơn, danh sách liên kết kép) được viết bằng mã C++ hoàn chỉnh, có xử lý tường minh các điều kiện biên: kiểm tra tràn bộ nhớ (if (p == NULL)), kiểm tra danh sách rỗng (l.head == NULL), thao tác giải phóng bộ nhớ động bằng lệnh delete, hạn chế tối đa việc sử dụng mã giả thuần túy.
  • Mô phỏng từng bước các giải thuật kinh điển: Các giải thuật phức tạp như thuật toán tìm đường đi ngắn nhất Dijkstra và giải thuật tìm cây khung nhỏ nhất Kruskal được mô tả qua từng bước biến đổi trạng thái (bước loại bỏ vòng/cạnh song song, bước sắp xếp trọng số cạnh, bước kiểm tra chu trình và bổ sung từng cạnh vào cây khung nhỏ nhất MST).
  • Gắn kết thực tế kỹ thuật: Các cấu trúc dữ liệu trừu tượng được đối sánh với các hiện tượng kỹ thuật và đời sống thực tế: cơ chế đảo chiều toa xe lửa/ngăn kéo tài liệu/hộp băng đạn đối với Stack; hàng đợi in ấn/dãy máy bay chờ trên đường băng đối với Queue; bản đồ giao thông liên tỉnh đối với đồ thị có trọng số; danh mục sách thư viện/danh bạ điện thoại đối với danh sách liên kết.

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

  • Sinh viên chuyên ngành: Giáo trình được thiết kế trực tiếp cho sinh viên hệ Cao đẳng chính quy ngành Công nghệ thông tin (định hướng Ứng dụng phần mềm). Tài liệu được sử dụng trong giai đoạn học các môn cơ sở ngành (năm thứ nhất hoặc đầu năm thứ hai).
  • Điều kiện tiên quyết (Prerequisites): Người học cần hoàn thành học phần Nhập môn lập trình/Kỹ thuật lập trình cơ bản, nắm vững cú pháp lập trình C/C++ hoặc Pascal cơ bản, các cấu trúc điều khiển (rẽ nhánh if-else, vòng lặp for, while), khái niệm mảng dữ liệu và kiểu bản ghi (struct/record).
  • Giảng viên và công tác giảng dạy: Giảng viên sử dụng tài liệu làm khung bài giảng chuẩn cho học phần MH13 (60 giờ), làm căn cứ phân bổ nội dung giảng dạy lý thuyết (30 giờ), thiết kế giáo án thực hành phòng máy (27 giờ) và xây dựng ngân hàng đề kiểm tra/đánh giá (3 giờ).
  • Tự học và tài liệu tham khảo: Tài liệu là nguồn tham khảo nền tảng cho lập trình viên muốn củng cố bản chất hoạt động của bộ nhớ máy tính, sinh viên các ngành kỹ thuật liên quan cần tài liệu tra cứu về các cấu trúc dữ liệu căn bản và các thuật toán tìm kiếm, sắp xếp, duyệt đồ thị.

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

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

Giáo trình phục vụ trực tiếp cho sinh viên trình độ Cao đẳng ngành Công nghệ thông tin (Ứng dụng phần mềm) theo học học phần Cấu trúc dữ liệu và giải thuật (MH13), đồng thời phù hợp cho người bắt đầu nghiên cứu về cấu trúc dữ liệu và giải thuật trong lập trình.

2. Người học cần chuẩn bị kiến thức nền tảng nào trước khi tiếp cận giáo trình?

Người học cần nắm vững kiến thức lập trình cơ sở bằng ngôn ngữ C/C++ hoặc Pascal, bao gồm các kiểu dữ liệu cơ bản, cấu trúc điều khiển rẽ nhánh, vòng lặp, kiểu cấu trúc (struct) và khái niệm cơ bản về con trỏ.

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

Giáo trình phân bổ thời lượng cân bằng giữa lý thuyết và thực hành (30 giờ lý thuyết, 27 giờ thực hành), tập trung vào các giải thuật thông dụng và cung cấp mã nguồn C++ có thể biên dịch trực tiếp, lược bỏ các chứng minh toán học phức tạp để ưu tiên khả năng cài đặt ứng dụng.

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

Người học nên tiếp cận theo trình tự: đọc hiểu định nghĩa giải thuật $\rightarrow$ vẽ lại sơ đồ khối/lưu đồ giải thuật $\rightarrow$ tự gõ và thực thi các đoạn mã C++ minh họa trong giáo trình $\rightarrow$ giải toàn bộ các câu hỏi lý thuyết và bài tập lập trình quản lý dữ liệu ở cuối mỗi chương.

5. Giáo trình cung cấp những dạng bài tập và tài liệu bổ trợ nào?

Giáo trình tích hợp hệ thống câu hỏi kiểm tra lý thuyết (so sánh ưu/nhược điểm các cấu trúc dữ liệu) và bài tập lập trình thực tế (bài toán quản lý hồ sơ sinh viên, biểu diễn cây nhị phân, vẽ ma trận kề, duyệt đồ thị theo BFS/DFS, áp dụng Dijkstra và Kruskal) ở cuối các chương 1, 2 và 3.


Kết luận

Giáo trình Cấu trúc dữ liệu và giải thuật (MH13) của Trường Cao đẳng Xây dựng số 1 là tài liệu học thuật cơ sở ngành, cung cấp toàn diện các kiến thức về giải thuật, 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 dữ liệu phi tuyến (cây, đồ thị) và các thuật toán xử lý dữ liệu chuẩn tắc.

Lộ trình học tập được thiết kế mạch lạc: bắt đầu từ phương pháp thiết kế và đánh giá độ phức tạp giải thuật (Chương 1), phát triển sang các cấu trúc dữ liệu tuyến tính (Chương 2), mở rộng lên các mô hình phi tuyến tính phức tạp cây và đồ thị (Chương 3), hoàn thiện bằng các giải thuật tìm kiếm và sắp xếp nâng cao (Chương 4).

Người học kết hợp nội dung giáo trình với môi trường thực hành lập trình C++ để rèn luyện kỹ năng cài đặt thuật toán, đáp ứng chuẩn đầu ra của chương trình đào tạo Cao đẳng Công nghệ thông tin.