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

Giáo trình môn học Cấu trúc dữ liệu và giải thuật (Mã môn học: MH10) là tài liệu học tập thuộc khối kiến thức cơ sở nghề trong chương trình đào tạo trình độ Trung cấp nghề Công nghệ thông tin (chuyên ngành Ứng dụng phần mềm), đồng thời được sử dụng làm tài liệu tham khảo cho các ngành nghề kỹ thuật liên quan. Giáo trình được biên soạn bởi nhóm tác giả: Nguyễn Như Cường (Chủ biên), Nguyễn Thị Nhung và Lưu Thị Thương, ban hành theo Quyết định số 140/QĐ-TCTS ngày 02 tháng 8 năm 2022 của Hiệu trưởng Trường Trung cấp Trường Sơn Đắk Lắk. Trong tiến trình đào tạo, môn học được bố trí giảng dạy sau các môn học chung và trước các mô-đun chuyên môn nghề.

Mục tiêu học tập của giáo trình tập trung vào việc trang bị cho người học mối quan hệ bản chất giữa cấu trúc dữ liệu và giải thuật trong xây dựng phần mềm; cung cấp phương pháp xác định thời gian thực hiện giải thuật và độ phức tạp tính toán thông qua ký hiệu tiệm cận; làm rõ nguyên lý của giải thuật đệ quy; phương pháp biểu diễn và cài đặt các cấu trúc dữ liệu tuyến tính (Mảng, Danh sách liên kết, Ngăn xếp, Hàng đợi) cũng như cấu trúc dữ liệu phi tuyến (Cây, Đồ thị); cùng hệ thống các thuật toán sắp xếp và tìm kiếm thông dụng.

Về cấu trúc và thời lượng, giáo trình được thiết kế với tổng thời lượng 60 giờ, bao gồm 15 giờ lý thuyết, 43 giờ thực hành và 2 giờ kiểm tra định kỳ. Nội dung được triển khai theo hướng kết hợp giữa phân tích cơ sở lý thuyết toán học/logic và hướng dẫn cài đặt cụ thể trên hai ngôn ngữ lập trình C và Pascal. Điểm đặc thù của giáo trình là tỷ trọng thực hành chiếm hơn 71% tổng thời lượng đào tạo (43/60 giờ), chú trọng việc minh họa giải thuật bằng mã giả (pseudo-code) và mã nguồn hoàn chỉnh của các cấu trúc dữ liệu.


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

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

Giáo trình gồm 6 chương với tiến trình tiếp cận từ lý thuyết phân tích giải thuật, cấu trúc tuyến tính, cấu trúc phi tuyến đến các thuật toán xử lý dữ liệu nâng cao:

  • Chương I: Thiết kế và phân tích giải thuật (7 giờ: 2 lý thuyết, 5 thực hành): Thiết lập phương trình nền tảng $\text{Cấu trúc dữ liệu} + \text{Giải thuật} = \text{Chương trình}$. Giới thiệu phương pháp modul hóa, phương pháp tinh chỉnh từng bước. Phân tích độ phức tạp thuật toán qua độ phức tạp thời gian ($T(n)$) và độ phức tạp bộ nhớ; đánh giá theo các trường hợp: tốt nhất ($T_{min}$), xấu nhất ($T_{max}$), trung bình ($T_{avg}$); chuẩn hóa đánh giá thông qua ký hiệu độ phức tạp Big-O, áp dụng quy tắc cộng và quy tắc nhân.
  • Chương II: Đệ quy và giải thuật đệ quy (5 giờ: 2 lý thuyết, 3 thực hành): Định nghĩa hàm đệ quy, giải thuật và thủ tục đệ quy. Quy trình thiết kế thuật toán đệ quy; cơ chế phân tích thứ tự gọi hàm và quy tắc đánh trả giá trị theo chiều ngược lại. Cài đặt các bài toán mẫu: tính giai thừa $n!$, dãy số Fibonacci ($Fibonacci(n) = Fibonacci(n-1) + Fibonacci(n-2)$), và bài toán Tháp Hà Nội.
  • Chương III: Mảng và danh sách (8 giờ: 2 lý thuyết, 5 thực hành, 1 kiểm tra): Cấu trúc lưu trữ của mảng 1 chiều, mảng 2 chiều theo hàng trong bộ nhớ; định nghĩa kiểu dữ liệu có cấu trúc (struct, typedef struct). Phân tích hai cơ chế lưu trữ danh sách tuyến tính: danh sách đặc (lưu trữ kế tiếp) và danh sách liên kết (đơn, đôi, vòng). Phân tích cấu trúc Ngăn xếp (Stack - LIFO) quản lý qua con trỏ đỉnh SP và ứng dụng trong ký pháp Ba Lan (biểu thức hậu tố); cấu trúc Hàng đợi (Queue - FIFO) quản lý qua hai chỉ số FrontRear, kỹ thuật tổ chức mảng xoay vòng và giải pháp chống tràn hàng đợi.
  • Chương IV: Cây (17 giờ: 4 lý thuyết, 13 thực hành): Định nghĩa cây tổng quát ($N$-phân) theo phương pháp quy nạp đệ quy; các khái niệm nút gốc, cây con, bậc của nút/cây, nút lá, nút trung gian, mức nút, chiều cao cây, chiều dài đường đi trong và ngoài. Khảo sát chi tiết Cây nhị phân (Binary Tree) với các phép duyệt: tiền thứ tự (NLR), trung thứ tự (LNR), hậu thứ tự (LRN). Xây dựng Cây nhị phân tìm kiếm (BST): thuật toán tìm kiếm đệ quy và không đệ quy, thuật toán chèn nút (ChenNut), thuật toán xóa nút (XoaNut qua 3 trường hợp và kỹ thuật tìm nút thế mạng TimNutTheMang), thuật toán giải phóng bộ nhớ (XoaCay). Giới thiệu ứng dụng cây quyết định và mã nén Huffman.
  • Chương V: Đồ thị và một vài cấu trúc phi tuyến (8 giờ: 2 lý thuyết, 6 thực hành): Hệ thống các định nghĩa: đơn đồ thị, đa đồ thị, giả đồ thị, đồ thị có hướng, đồ thị vô hướng nền. Phương pháp biểu diễn đồ thị qua ma trận liền kề $A=(a_{ij})$ và danh sách lân cận. Thuật toán duyệt đồ thị: tìm kiếm theo chiều sâu (DFS - sử dụng Stack, độ phức tạp $O(|V|+|E|)$) và tìm kiếm theo chiều rộng (BFS - sử dụng Queue). Xây dựng cây khung nhỏ nhất thông qua hai giải thuật: giải thuật Kruskal (độ phức tạp $O(p^2)$ hoặc $O(n^2)$) và giải thuật Prim (độ phức tạp $O(n^3)$ trên ma trận trọng số).
  • Chương VI: Sắp xếp và tìm kiếm (15 giờ: 3 lý thuyết, 11 thực hành, 1 kiểm tra): Phân loại sắp xếp nội (trên bộ nhớ trong) và sắp xếp ngoại (trên tệp tin). Trình bày cơ chế và mã cài đặt các thuật toán sắp xếp nội: Sắp xếp nổi bọt (Bubble Sort với công thức tính số phép so sánh $S = \frac{1}{2}N(N-1)$ và số phép hoán vị $H_{avg} = \frac{1}{4}N(N-1)$), Sắp xếp chọn (Selection Sort), Sắp xếp chèn (Insertion Sort), Sắp xếp nhanh (Quick Sort sử dụng hàm phân hoạch Partition và đệ quy), Sắp xếp hòa nhập (Merge Sort).

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 lý thuyết thông qua ba nhóm kiến thức:

  1. Lý thuyết kiểu dữ liệu trừu tượng (ADT): Nguyên lý đóng gói dữ liệu và các thao tác đi kèm, phân biệt giữa cấu trúc logic và cấu trúc vật lý trong bộ nhớ RAM.
  2. Lý thuyết phân tích hiệu năng: Đánh giá tiệm cận hàm thời gian, đo lường số phép so sánh, phép gán, và phép hoán vị để ước lượng tài nguyên tính toán.
  3. Kỹ thuật thiết kế thuật toán cốt lõi: Áp dụng nguyên lý đệ quy, phương pháp phân rã bài toán, kỹ thuật chia để trị (Divide and Conquer) và phương pháp tham lam (Greedy).

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Định nghĩa và thao tác cấu trúc dữ liệu bằng con trỏ, cấp phát và giải phóng bộ nhớ động; cài đặt danh sách liên kết đơn, danh sách liên kết đôi, ngăn xếp, hàng đợi, cây nhị phân tìm kiếm bằng ngôn ngữ C/Pascal.
  • Kỹ năng phân tích (Analytical skills): Khả năng phân tích trường hợp tốt nhất, xấu nhất của thuật toán; so sánh hiệu năng giữa duyệt đồ thị DFS và BFS, giữa giải thuật cây khung Kruskal và Prim trên đồ thị thưa hoặc dày.
  • Năng lực thực hành (Practical competencies): Chuyển đổi biểu thức trung tố sang hậu tố, giải thuật toán khử đệ quy cho QuickSort bằng Stack, chuyển đổi cây nhị phân sang danh sách liên kết đôi, xử lý bài toán Josephus bằng danh sách liên kết vòng.

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

Giáo trình áp dụng phương pháp tiếp cận sư phạm đi từ mô tả bài toán thực tế, mô hình hóa cấu trúc dữ liệu, phân tích mã giả đến cài đặt mã nguồn chi tiết:

  • Phương pháp giảng dạy: Giảng viên sử dụng phương pháp diễn giải kết hợp phân tích thuật toán từng bước qua bảng theo dõi biến số. Các nội dung phức tạp như duyệt cây đệ quy, xoay vòng hàng đợi hay thuật toán tìm cây khung Prim được minh họa cụ thể qua bảng trạng thái và ma trận trọng số.
  • Bài tập và tình huống thực hành: Giáo trình lồng ghép các bài toán điển hình vào nội dung học tập, ví dụ: bài toán quản lý bản ghi sinh viên (SinhVien, NgayThang), bài toán tổ chức thư mục trên đĩa cứng dưới dạng cây, bài toán Tháp Hà Nội, Tháp Sài Gòn, bài toán xếp tiền (Selection Sort), bài toán chia bài (Insertion Sort).
  • Hệ thống bài tập tự rèn luyện: Cuối mỗi chương đều có hệ thống câu hỏi lý thuyết và bài tập lập trình yêu cầu sinh viên tự thiết kế cấu trúc, cài đặt thuật toán xử lý danh sách liên kết quản lý bằng con trỏ đầu/cuối, tính toán các chỉ số của cây nhị phân (đếm nút lá, nút trung gian, tính chiều dài đường đi), và tối ưu hóa bộ nhớ khi chuyển đổi giữa cây và danh sách.
  • Phương pháp đánh giá: Đánh giá năng lực người học thông qua 43 giờ thực hành trên máy và 2 bài kiểm tra định kỳ (ở Chương III và Chương VI). Tiêu chí đánh giá dựa trên tính đúng đắn của giải thuật, khả năng biên dịch mã nguồn không lỗi, và hiệu quả phân bổ bộ nhớ.
  • Hướng dẫn tự học: Người học được yêu cầu vẽ sơ đồ khối, thực hiện chạy tay (trace code) từng bước với các bộ dữ liệu mẫu trước khi lập trình trên máy tính; phân tích tính tối ưu của từng cấu trúc dữ liệu tương ứng với từng yêu cầu bài toán.

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

  • Chuẩn hóa theo chương trình khung giáo dục nghề nghiệp: Giáo trình được biên soạn và thẩm định theo Quyết định số 140/QĐ-TCTS năm 2022, đáp ứng chương trình khung đào tạo Trung cấp nghề và Cao đẳng nghề Công nghệ thông tin.
  • Tính tường minh trong cài đặt thuật toán: Toàn bộ các giải thuật trọng tâm đều đi kèm nguyên mẫu hàm (prototype) và mã nguồn hoàn chỉnh bằng ngôn ngữ C, ví dụ hàm BubbleSort, InsertionSort, QuickSort, các hàm duyệt cây DuyetNLR, DuyetLNR, DuyetLRN, hàm chèn nút ChenNut, xóa nút XoaNut, tìm phần tử thế mạng TimNutTheMang.
  • Minh họa phân tích toán học chính xác: Cung cấp phương pháp chứng minh quy nạp tính đúng đắn của thuật toán Prim và thuật toán Kruskal; lập bảng theo dõi 7 bước lặp chi tiết khi tìm cây khung nhỏ nhất trên đồ thị 8 đỉnh kèm ma trận trọng số.
  • Gắn kết giữa cấu trúc dữ liệu và ứng dụng thực tế: Giáo trình tích hợp các ứng dụng tiêu biểu như cơ chế hàng đợi xoay vòng tránh tràn bộ nhớ, phương pháp đánh giá biểu thức Ba Lan bằng ngăn xếp, kỹ thuật nén dữ liệu Huffman và mô hình phân loại cây quyết định.

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

  • Sinh viên và học viên: Giáo trình phục vụ trực tiếp cho học sinh, sinh viên theo học hệ Trung cấp và Cao đẳng ngành Công nghệ thông tin (chuyên ngành Ứng dụng phần mềm). Ngoài ra, tài liệu phù hợp cho người học các chuyên ngành kỹ thuật công nghệ cần củng cố kiến thức nền tảng về giải thuật.
  • Yêu cầu tiên quyết (Prerequisites): Người học cần hoàn thành khối kiến thức chung, có hiểu biết về toán học rời rạc cơ bản và nắm vững kỹ thuật lập trình cơ bản bằng ngôn ngữ C hoặc Pascal (cú pháp, câu lệnh điều khiển, mảng, hàm và con trỏ).
  • Đối với giảng viên: Tài liệu đóng vai trò là khung chương trình chuẩn để giảng dạy mô-đun MH10 thời lượng 60 giờ, làm căn cứ thiết kế giáo án lý thuyết, bài giảng thực hành phòng máy và xây dựng đề thi đánh giá kết thúc môn học.
  • Nghiên cứu và tự học: Tài liệu cung cấp hệ thống phân loại danh mục cấu trúc dữ liệu và giải thuật cơ bản, hỗ trợ người tự học tra cứu mã nguồn mẫu và phương pháp tính toán độ phức tạp thuật toán.

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? Tài liệu được thiết kế cho học sinh, sinh viên trình độ Trung cấp và Cao đẳng nghề Công nghệ thông tin (Ứng dụng phần mềm), đồng thời làm tài liệu tham khảo cho sinh viên các ngành kỹ thuật liên quan đến lập trình.

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 hoàn thành các môn học chung, nắm vững kỹ năng lập trình căn bản trên ngôn ngữ C hoặc Pascal, bao gồm thao tác với biến, mảng, con trỏ, hàm và cấu trúc rẽ nhánh/lặp.

3. Điểm khác biệt của giáo trình này so với các tài liệu lý thuyết khác là gì? Giáo trình tập trung vào thực hành (chiếm 43/60 giờ), cung cấp đầy đủ mã nguồn C thực tế cho từng thao tác dữ liệu, kèm theo bảng mô phỏng từng bước lặp thay vì chỉ trình bày thuật toán dưới dạng lý thuyết thuần túy.

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 kết hợp đọc hiểu lý thuyết phân tích độ phức tạp, tự viết mã nguồn theo các prototype được cung cấp trong giáo trình, chạy thử nghiệm trên trình biên dịch và hoàn thành các bài tập nâng cao ở cuối mỗi chương.

5. Giáo trình có cung cấp các giải thuật tối ưu trên đồ thị không? Có. Chương V của giáo trình trình bày chi tiết hai thuật toán tìm cây khung nhỏ nhất là Kruskal và Prim, bao gồm cả chứng minh toán học, đánh giá độ phức tạp tính toán và bảng theo dõi từng bước lặp trên ma trận trọng số.


Kết luận

Giáo trình Cấu trúc dữ liệu và giải thuật (MH10) do Trường Trung cấp Trường Sơn Đắk Lắk ban hành là tài liệu học thuật chuẩn hóa, cung cấp hệ thống tri thức hoàn chỉnh từ phân tích độ phức tạp giải thuật, cấu trúc tuyến tính, cấu trúc phi tuyến đến các thuật toán sắp xếp và tìm kiếm.

Tiến trình học tập đề xuất cho người học bao gồm: tiếp cận phương pháp phân tích độ phức tạp Big-O và đệ quy (Chương I, II); làm chủ kỹ thuật tổ chức bộ nhớ trên Mảng, Danh sách liên kết, Stack, Queue (Chương III); mở rộng sang cấu trúc phi tuyến Cây và Đồ thị (Chương IV, V); và hoàn thiện kỹ năng tối ưu xử lý với Sắp xếp và Tìm kiếm (Chương VI). Tài liệu bổ trợ cần thiết bao gồm môi trường thực hành biên dịch ngôn ngữ C/Pascal và hệ thống bài tập lập trình mở rộng được nêu chi tiết trong toàn bộ giáo trình.