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: MH 12) là tài liệu học tập lưu hành nội bộ do Tổ Bộ môn Tin học thuộc Trường Cao đẳng Công nghiệp Hải Phòng biên soạn, với sự tham gia đóng góp ý kiến từ Khoa Công nghệ thông tin - Trường Cao đẳng nghề Công nghệ Việt - Hàn Bắc Giang. Trong chương trình đào tạo trình độ Cao đẳng và Trung cấp nghề Quản trị mạng máy tính, môn học được xếp vào khối kiến thức kỹ thuật cơ sở, được giảng dạy cho sinh viên năm thứ hai sau khi đã hoàn thành các học phần Tin học và Lập trình căn bản. Tổng thời lượng thực hiện môn học là 77 giờ, bao gồm 22 giờ lý thuyết, 49 giờ thực hành/thảo luận/bài tập và 6 giờ kiểm tra đánh giá.

Mục tiêu học tập của giáo trình tập trung vào ba phương diện:

  • Kiến thức: Trang bị bản chất mối quan hệ giữa cấu trúc dữ liệu và giải thuật trong quy trình xây dựng phần mềm, dựa trên nguyên lý kinh điển "Algorithms + Data Structures = Programs" của nhà khoa học máy tính Niklaus Wirth (1975). Giúp người học trình bày được cấu trúc, cách khai báo và các thao tác cơ bản trên các cấu trúc dữ liệu (mảng, danh sách liên kết, ngăn xếp, hàng đợi, cây, đồ thị).
  • Kỹ năng: Xây dựng cấu trúc dữ liệu thích hợp cho các bài toán ứng dụng cụ thể (tạo lập, hiển thị, tính toán, sắp xếp, tìm kiếm); cài đặt hoàn chỉnh các giải thuật bằng ngôn ngữ lập trình C hoặc Pascal.
  • Năng lực tự chủ và trách nhiệm: Rèn luyện ý thức học tập, tính cẩn trọng trong lập trình và năng lực chủ động nghiên cứu tài liệu kỹ thuật.

Cấu trúc giáo trình gồm 7 chương lý thuyết - thực hành, đi kèm chuyên đề bổ trợ về biến con trỏ, cấp phát động và hệ thống chương trình ứng dụng hoàn chỉnh. Phương pháp tiếp cận đi từ khái niệm lý thuyết, phân tích thuật toán, minh họa qua mã giả và lưu đồ, đến việc cài đặt trực tiếp bằng mã nguồn ngôn ngữ C.


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 7 chương trọng tâm theo tiến trình logic từ cơ bản đến nâng cao:

[Chương 1: Phân tích và thiết kế giải thuật]
                       ↓
[Chương 2: Đệ quy và giải thuật đệ quy]
                       ↓
[Chương 3: Mảng, danh sách & Kiểu dữ liệu trừu tượng (Stack, Queue)]
                       ↓
[Chương 4: Cấu trúc dữ liệu kiểu cây (Tree & Binary Tree)]
                       ↓
[Chương 5: Cấu trúc dữ liệu đồ thị (Graph - DFS, BFS)]
                       ↓
[Chương 6: Các phương pháp sắp xếp (Sorting)]
                       ↓
[Chương 7: Các phương pháp tìm kiếm (Searching & BST)]
  • Chương 1: Phân tích và thiết kế giải thuật: Trình bày định nghĩa cấu trúc dữ liệu, giải thuật, cấu trúc lưu trữ (bộ nhớ trong và bộ nhớ ngoài); phân loại kiểu dữ liệu cơ bản, kiểu dữ liệu cấu trúc (array, record, file) và kiểu dữ liệu trừu tượng. Giới thiệu các đặc trưng của giải thuật (tính đơn nghĩa, tính dừng, tính đúng đắn, tính phổ dụng, tính hiệu quả), cách biểu diễn giải thuật (ngôn ngữ tự nhiên, lưu đồ khối, mã giả) và phương pháp xác định độ phức tạp tính toán thông qua ký hiệu $O(g(n))$ cùng các quy tắc tính toán (quy tắc tổng, quy tắc nhân, phép toán tích cực).
  • Chương 2: Đệ quy và giải thuật đệ quy: Định nghĩa tính đệ quy, phân tích cấu trúc của chương trình con đệ quy gồm lời gọi chính nó, việc thu nhỏ kích thước bài toán và điều kiện dừng (trường hợp suy biến). Trình bày cơ chế lưu vết trong máy tính (tham số, biến cục bộ, địa chỉ quay lui), phân tích ưu - nhược điểm của đệ quy, kỹ thuật khử đệ quy bằng phương pháp lặp. Minh họa qua các bài toán: tính giai thừa $n!$, thuật toán Euclid tìm ước số chung lớn nhất, dãy số Fibonacci, đảo ngược số nguyên và bài toán Tháp Hà Nội.
  • Chương 3: Mảng, danh sách và các kiểu dữ liệu trừu tượng: Trình bày danh sách tuyến tính; cài đặt danh sách bằng mảng tĩnh (lưu trữ kế tiếp) với các thao tác khởi tạo, kiểm tra rỗng/đầy, tìm kiếm, chèn, xóa, sắp xếp. Phân tích cấu trúc danh sách liên kết (móc nối) nhằm khắc phục nhược điểm của mảng, bao gồm danh sách liên kết đơn, danh sách liên kết kép, danh sách nối vòng. Trình bày cấu trúc và thao tác của hai dạng danh sách đặc biệt: Ngăn xếp (Stack - LIFO) và Hàng đợi (Queue - FIFO) cài đặt bằng mảng và bằng danh sách liên kết đơn.
  • Chương 4: Cấu trúc dữ liệu kiểu cây: Khái niệm cây tổng quát và cây nhị phân, các tính chất của cây nhị phân; biểu diễn cây bằng mảng kế tiếp và bằng danh sách liên kết; các phép duyệt cây nhị phân: duyệt theo thứ tự trước (Preorder Traversal), duyệt theo thứ tự giữa (Inorder Traversal) và duyệt theo thứ tự sau (Postorder Traversal).
  • Chương 5: Đồ thị: Định nghĩa đồ thị vô hướng, đồ thị có trọng số; phương pháp biểu diễn đồ thị bằng ma trận kề và danh sách kề; các giải thuật duyệt đồ thị: duyệt theo chiều sâu (Depth First Search - DFS) và duyệt theo chiều rộng (Breadth First Search - BFS).
  • Chương 6: Sắp xếp: Định nghĩa bài toán sắp xếp nội; nguyên lý hoạt động, mô tả thuật toán và cài đặt mã nguồn C cho các giải thuật sắp xếp cơ bản: Sắp xếp chèn (Insertion sort), Sắp xếp chọn (Selection sort), Sắp xếp đổi chỗ (Interchange sort), Sắp xếp nổi bọt (Bubble sort) và giải thuật Sắp xếp nhanh (Quick sort).
  • Chương 7: Tìm kiếm: Bài toán tìm kiếm dữ liệu; phân tích cơ chế, mô tả và cài đặt giải thuật Tìm kiếm tuyến tính (Linear search), Tìm kiếm nhị phân (Binary search) và 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

  • Lý thuyết nền tảng (Fundamental theories): Lý thuyết về độ phức tạp thuật toán và đánh giá hiệu năng hệ thống qua thời gian thực hiện $T(n)$ trong các trường hợp tốt nhất, xấu nhất và trung bình; lý thuyết về đệ quy và nguyên lý ngăn xếp hệ thống khi thực thi hàm.
  • Nguyên lý cốt lõi (Core principles): Tiêu chuẩn đánh giá một cấu trúc dữ liệu (phản ánh đúng thực tế, phù hợp với các thao tác, tiết kiệm tài nguyên CPU và bộ nhớ); nguyên lý con trỏ, tham chiếu (&), giải tham chiếu (*), cấp phát và giải phóng bộ nhớ động trong C.
  • Mô hình cấu trúc dữ liệu chuẩn (Essential frameworks): Toàn bộ các cấu trúc dữ liệu tuyến tính (List, Stack, Queue) và phi tuyến (Tree, Graph), cùng các mô hình trừu tượng hóa kiểu dữ liệu thông qua cấu trúc bản ghi (struct) và cấu trúc tự trỏ (self-referential structure).

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Kỹ năng vẽ lưu đồ giải thuật; viết mã giả; khai báo cấu trúc dữ liệu phức hợp; thao tác trực tiếp với con trỏ; cài đặt thuật toán bằng ngôn ngữ C chuẩn.
  • Kỹ năng phân tích (Analytical skills): Phân tích và lựa chọn cấu trúc dữ liệu tối ưu cho từng bài toán; xác định độ phức tạp tính toán $O(1), O(n), O(n^2), O(n\log_2 n)$; so sánh hiệu năng giữa giải thuật đệ quy và giải thuật lặp.
  • Năng lực ứng dụng thực tiễn (Practical competencies): Xây dựng các chương trình xử lý dữ liệu hoàn chỉnh, bao gồm quản lý hồ sơ sinh viên, chuyển đổi hệ đếm (cơ số 10 sang cơ số 2) bằng Stack, và triển khai các thuật toán sắp xếp/tìm kiếm trên tập dữ liệu thực tế.

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

Giáo trình được thiết kế theo định hướng tích hợp lý thuyết với thực hành, trong đó thời lượng thực hành, thảo luận và bài tập chiếm 63,6% tổng quỹ thời gian môn học (49/77 giờ).

Phân bổ thời lượng Số giờ Tỷ lệ (%)
Lý thuyết 22 28,6%
Thực hành / Bài tập / Thảo luận 49 63,6%
Kiểm tra 6 7,8%
Tổng cộng 77 100%
  • Tiếp cận sư phạm (Pedagogical approach): Mỗi chủ đề được trình bày tuần tự qua 4 bước: (1) Nêu định nghĩa và ý nghĩa thực tế; (2) Mô tả giải thuật qua ngôn ngữ tự nhiên và lưu đồ khối; (3) Cung cấp mã giả/mã nguồn cài đặt bằng C; (4) Phân tích đánh giá độ phức tạp và nêu ví dụ áp dụng.
  • Bài tập và Case studies: Hệ thống bài tập cuối chương được chia theo các cấp độ dễ, vừa và ứng dụng tổng hợp:
    • Bài tập phân tích: Đánh giá độ phức tạp các đoạn mã lặp lồng nhau, chuyển đổi hàm đệ quy sang hàm lặp (như bài toán Fibonacci, đảo chuỗi).
    • Case study quản lý thực tế: Xây dựng ứng dụng quản lý hồ sơ nhân viên/sinh viên sử dụng struct gồm các trường mã, họ tên, ngày sinh (Date), điểm thành phần (LaptrinhCB, KientrucMT, MangMT) và tính điểm trung bình (DiemTB).
  • Hình thức kiểm tra, đánh giá (Assessment methods): Khung đánh giá được phân định cụ thể trong tiến trình 77 giờ:
    • Bài kiểm tra số 1 (1 giờ): Đánh giá kiến thức Chương 1, 2 và Chương 3 (Mảng, danh sách tuyến tính, Stack, Queue).
    • Bài kiểm tra số 2 (1 giờ): Đánh giá kiến thức Chương 4 (Cấu trúc cây và duyệt cây nhị phân).
    • Bài kiểm tra số 3 (2 giờ): Đánh giá kỹ năng cài đặt các thuật toán sắp xếp thuộc Chương 6.
    • Kiểm tra hết môn (2 giờ): Đánh giá tổng hợp toàn bộ kiến thức và kỹ năng thực hành môn học.
  • Hướng dẫn tự học (Self-study guidelines): Giáo trình phân chia rõ ràng các nội dung giảng viên giảng dạy trực tiếp trên lớp và các phần sinh viên tự đọc (như chi tiết cài đặt danh sách liên kết kép, danh sách nối vòng, một số biến thể duyệt cây). Cuối mỗi chương đều có hệ thống câu hỏi lý thuyết để người học tự củng cố kiến thức.

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

  • Tính liên kết trong chương trình đào tạo: Giáo trình liên kết trực tiếp các kiến thức lập trình cơ sở với các bài toán chuyên ngành Quản trị mạng máy tính (như cấu trúc hàng đợi xử lý gói tin, biểu diễn cấu trúc liên kết mạng qua đồ thị, quản lý bảng chuyển tiếp).
  • Cung cấp mã nguồn cài đặt chi tiết: Khác với các tài liệu thuần túy lý thuyết toán học, giáo trình cung cấp đầy đủ các đoạn mã cài đặt bằng ngôn ngữ C có chú thích chi tiết, minh họa rõ ràng cơ chế quản lý bộ đệm bàn phím (fflush(stdin)), nhập xuất chuỗi ký tự (gets(), strcpy()), thao tác trỏ bản ghi và phân bổ bộ nhớ.
  • Biểu diễn giải thuật đa dạng: Thuật toán được diễn giải đồng thời bằng ba công cụ: văn bản tự nhiên, lưu đồ khối trực quan (sử dụng các khối chức năng xử lý, vào/ra dữ liệu, rẽ nhánh điều kiện) và mã giả tựa C/Pascal, giúp người học dễ dàng chuyển đổi giải thuật sang bất kỳ ngôn ngữ lập trình nào.
  • Tích hợp các chương trình ứng dụng mẫu hoàn chỉnh: Giáo trình dành riêng các mục thực hành chuyên sâu (trang 156-176) cung cấp mã nguồn hoàn chỉnh có cấu trúc menu tương tác cho 3 bài toán:
    1. Chương trình quản lý điểm sinh viên cài đặt bằng danh sách liên kết đơn (bao gồm đầy đủ các hàm: khởi tạo, chèn, xóa, tìm kiếm theo tên, sắp xếp theo họ tên và sắp xếp theo điểm trung bình).
    2. Chương trình chuyển đổi số nguyên hệ thập phân (hệ 10) sang hệ nhị phân (hệ 2) sử dụng ngăn xếp (Stack) cài đặt bằng danh sách liên kết đơn.
    3. Chương trình cài đặt các giải thuật sắp xếp và tìm kiếm trên danh sách sinh viên lưu trữ bằng mảng.

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

  • Sinh viên: Giáo trình phục vụ trực tiếp cho sinh viên năm thứ hai thuộc hệ Cao đẳng và Trung cấp nghề Quản trị mạng máy tính tại Trường Cao đẳng Công nghiệp Hải Phòng, cũng như sinh viên các ngành Công nghệ thông tin, Kỹ thuật phần mềm tại các trường cao đẳng kỹ thuật.
  • Điều kiện tiên quyết (Prerequisites): Người học cần hoàn thành các học phần Tin học đại cương và Lập trình căn bản (nắm vững cú pháp cơ bản của ngôn ngữ C hoặc Pascal, các kiểu dữ liệu nguyên thủy, câu lệnh điều kiện if-else, vòng lặp for, while, mảng một chiều và kỹ thuật viết hàm).
  • Giảng viên: Tài liệu cung cấp đề cương chi tiết 77 giờ, phân chia tỷ lệ lý thuyết, thực hành và các mốc kiểm tra định kỳ, làm căn cứ chuẩn để xây dựng giáo án, bài giảng và đề thi đánh giá năng lực người học.
  • Tự học và tham khảo: Phù hợp làm tài liệu tra cứu cho kỹ thuật viên, lập trình viên muốn củng cố nền tảng về tổ chức dữ liệu, thao tác con trỏ và thuật toán xử lý dữ liệu cơ bản.

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

1. Giáo trình này phù hợp với ai?

Giáo trình được biên soạn phục vụ sinh viên năm thứ hai trình độ Cao đẳng và Trung cấp nghề Quản trị mạng máy tính, đồng thời phù hợp cho người học khối ngành kỹ thuật công nghệ thông tin cần tài liệu học tập thực hành về cấu trúc dữ liệu và giải thuật.

2. Cần kiến thức nền nào trước khi học giáo trình này?

Người học cần có kiến thức cơ bản về tin học và đã học qua một ngôn ngữ lập trình (ưu tiên C hoặc Pascal), nắm được các cấu trúc điều khiển cơ bản (rẽ nhánh, vòng lặp), kỹ thuật xây dựng hàm và thao tác với mảng một chiều.

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 tính thực hành với tỷ trọng 49/77 giờ dành cho thực hành/thảo luận/bài tập, cung cấp mã nguồn C đầy đủ có menu điều khiển cho các bài toán quản lý cụ thể, và kết hợp minh họa thuật toán qua cả lưu đồ khối lẫn mã giả.

4. Làm thế nào để tự học giáo trình này hiệu quả?

Người học nên đọc kỹ phần phân tích nguyên lý và theo dõi vết hoạt động của thuật toán qua lưu đồ khối; sau đó tự viết lại mã nguồn trên máy tính dựa trên mã giả, thực thi và kiểm tra các trường hợp biên; cuối cùng hoàn thành toàn bộ bài tập và câu hỏi ôn tập ở cuối mỗi chương.

5. Giáo trình có cung cấp mã nguồn mẫu và tài liệu tham khảo không?

Có. Giáo trình tích hợp sẵn 3 chương trình nguồn hoàn chỉnh ở các trang 156–176 (chương trình quản lý điểm sinh viên, đổi hệ cơ số bằng Stack, sắp xếp/tìm kiếm bằng mảng) và danh mục tài liệu tham khảo chuyên ngành tại trang 177.


Kết luận

Giáo trình Cấu trúc dữ liệu và giải thuật của Trường Cao đẳng Công nghiệp Hải Phòng là tài liệu giảng dạy và học tập mang tính chuẩn hóa, tập trung cung cấp nền tảng vững chắc về cách thức tổ chức dữ liệu và phương pháp thiết kế giải thuật cơ bản trong khoa học máy tính.

Lộ trình học tập được thiết kế xuyên suốt: bắt đầu từ kỹ năng phân tích độ phức tạp thuật toán và kỹ thuật đệ quy, tiến tới làm chủ các cấu trúc dữ liệu tuyến tính (Mảng, Danh sách liên kết, Stack, Queue), cấu trúc phi tuyến (Cây, Đồ thị), và thuần thục các giải thuật sắp xếp, tìm kiếm kinh điển. Tài liệu giúp người học hình thành tư duy lập trình cấu trúc và kỹ năng tối ưu hóa mã nguồn, tạo tiền đề tiếp thu các học phần chuyên sâu trong lĩnh vực mạng máy tính và phát triển phần mềm.