TỔNG QUAN HỌC THUẬT: GIÁO TRÌNH CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT (MÃ MÔN HỌC: MH10)


Tổng quan về giáo trình (250-300 từ)

Giáo trình Cấu trúc dữ liệu và giải thuật (Mã môn học: MH10) do tác giả Trần Thị Mơ chủ biên, được ban hành chính thức theo Quyết định số 597/QĐ-CĐXD1 ngày 29 tháng 12 năm 2023 của Hiệu trưởng Trường Cao đẳng Xây dựng số 1. 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 độ Trung cấp, ngành Công nghệ thông tin (chuyên ngành Ứng dụng phần mềm). Môn học có tổng thời lượng 60 giờ (bao gồm 30 giờ lý thuyết; 27 giờ thực hành, thí nghiệm, thảo luận, bài tập và 03 giờ kiểm tra), được bố trí giảng dạy tại kỳ học thứ 02 trong chương trình đào tạo và không yêu cầu môn học tiên quyết.

Về mục tiêu học tập, giáo trình trang bị cho người học hệ thống lý thuyết nền tảng về giải thuật, các đặc trưng và phương pháp thiết kế giải thuật; định nghĩa và nguyên lý hoạt động của các cấu trúc dữ liệu thông dụng (danh sách tuyến tính, mảng, ngăn xếp, hàng đợi, danh sách liên kết, cây nhị phân, đồ thị) cùng các giải thuật thao tác tương ứng. Về kỹ năng, người học có khả năng vận dụng các kiểu dữ liệu để cài đặt các chương trình ứng dụng quy mô nhỏ trên ngôn ngữ lập trình cụ thể, đồng thời hình thành năng lực tự chủ, định hướng và thích nghi trong môi trường chuyên môn.

Về cấu trúc, tài liệu được phân chia thành 02 chương trọng tâm: Chương 1 tập trung vào Giải thuật và Chương 2 đi sâu vào Cấu trúc dữ liệu. Điểm đặc sắc trong cách tiếp cận của giáo trình là việc xây dựng tư duy lập trình thông qua đẳng thức kinh điển: $\text{Cấu trúc dữ liệu} + \text{Giải thuật} = \text{Chương trình}$, kết hợp song song giữa phân tích thuật toán bằng lưu đồ khối và cài đặt chi tiết bằng mã lệnh ngôn ngữ lập trình C/Pascal.


Nội dung kiến thức cốt lõi (500-600 từ)

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

Cấu trúc tài liệu triển khai theo quy trình logic từ lý thuyết giải thuật đại cương đến việc cài đặt từng cấu trúc dữ liệu cụ thể:

  • Chương 1: Giải thuật: Cung cấp các khái niệm cốt lõi về giải thuật (phương pháp giải quyết vấn đề); 08 đặc trưng cơ bản gồm 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 và tính hữu hạn. Trình bày 03 phương thức diễn đạt giải thuật: ngôn ngữ tự nhiên, ngôn ngữ lưu đồ/sơ đồ khối (gồm nút thao tác, nút điều khiển, nút khởi đầu/kết thúc, cung nối) và ngôn ngữ lập trình/mã giả. Giới thiệu các phương pháp thiết kế giải thuật: thiết kế từ trên xuống (Top-down design) và phương pháp tinh chỉnh từng bước. Các ví dụ minh họa gồm thuật toán Euclid, giải phương trình bậc hai $ax^2 + bx + c = 0$, thuật toán tìm số nguyên tố, phần tử dãy Fibonacci và sắp xếp dãy số.
  • Chương 2: Cấu trúc dữ liệu: Triển khai chi tiết các mô hình dữ liệu chính:
    • Danh sách tuyến tính & Mảng: Khái niệm phần tử, cấu trúc bản ghi (record/struct), ưu/nhược điểm của mảng tĩnh trong truy cập ngẫu nhiên và chi phí dịch chuyển bộ nhớ khi thêm/xóa.
    • Ngăn xếp (Stack): Hoạt động theo nguyên lý LIFO (Last In First Out), các thao tác push, pop, kiểm tra rỗng/đầy, ứng dụng đổi số nguyên sang hệ nhị phân.
    • Hàng đợi (Queue): Hoạt động theo nguyên lý FIFO (First In First Out), các thao tác put, get, kiểm tra rỗng/đầy, mô hình hóa trên danh sách liên kết hoặc mảng một chiều.
    • Danh sách liên kết (Linked List): Khái niệm node (data, con trỏ next), con trỏ HEAD, TAIL. Chi tiết danh sách liên kết đơn (hàm createNode, insertHead, insertTail, insertAfter, processList, searchList, deleteList, List_Selection_Sort); danh sách liên kết kép (struct dNode với con trỏ pre và next, các thao tác chèn/hủy đầu/cuối, List_Interchange_Sort); danh sách liên kết vòng (đơn vòng, đôi vòng).
    • Cây nhị phân (Binary Tree): Định nghĩa, nút con trái/phải, tính chất toán học quan hệ giữa số nút $n$ và chiều cao $h$ ($n \le 2^h - 1$, $n \ge h \ge \log_2(n+1)$), cấu trúc động treenode, ba phép duyệt cây gồm tiền tự (NLR), trung tự (LNR), hậu tự (LRN). Thuật toán tìm kiếm nhị phân (binary_search) độ phức tạp $\lg N$. Cây nhị phân tìm kiếm (BST): quy tắc khóa trái nhỏ hơn gốc, khóa phải lớn hơn hoặc bằng gốc; các hàm tree_search, tree_insert, tree_creation, giải thuật xóa nút lá, nút có 1 con và nút có 2 con.
    • Đồ thị (Graph): Đồ thị có hướng $G=\langle V,E\rangle$ (bán bậc ngoài $A(u)$, bán bậc trong $I(v)$, đường đi, chu trình, tính liên thông), đồ thị vô hướng, đồ thị có trọng số. Hai phương pháp biểu diễn đồ thị: ma trận kề ($n \times n$) và danh sách kề. Hai thuật toán duyệt đồ thị: duyệt theo chiều rộng (BreadthFirstSearch) sử dụng hàng đợi và duyệt theo chiều sâu (DeepFirstSearch) đệ quy sử dụng mảng đánh dấu daxet[].

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 thuật toán, nguyên lý lưu trữ dữ liệu tuyến tính và phi tuyến tính, toán học rời rạc ứng dụng trong cấu trúc cây và đồ thị.
  • Nguyên tắc cốt lõi (Core principles): Cơ chế quản lý bộ nhớ động (malloc/free, new/delete), nguyên tắc LIFO của Stack, FIFO của Queue, tính đối xứng trong ma trận kề của đồ thị vô hướng, tính phân cấp của cây nhị phân.
  • Khung phân tích chuẩn mực (Essential frameworks): Bộ tiêu chuẩn đánh giá cấu trúc dữ liệu (tiết kiệm bộ nhớ trong, phản ánh chính xác thực tế bài toán, thuận tiện trong thao tác); mô hình phân tích bài toán từ trên xuống và quy tắc tinh chỉnh từng bước.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật (Technical skills): Cài đặt cấu trúc dữ liệu bằng mã lệnh C/C++ (struct, con trỏ); hiện thực hóa các giải thuật sắp xếp (Selection Sort, Interchange Sort), giải thuật tìm kiếm tuần tự và nhị phân; xây dựng hàm đệ quy và quản lý con trỏ bộ nhớ.
  • Kỹ năng phân tích (Analytical skills): Khả năng chuyển đổi bài toán thực tế thành sơ đồ khối hoặc mã giả; phân tích ưu - nhược điểm của cấu trúc lưu trữ tĩnh (mảng) so với động (danh sách liên kết); lựa chọn cấu trúc dữ liệu phù hợp dựa trên tiêu chí tài nguyên và tốc độ xử lý.
  • Kỹ năng thực hành (Practical competencies): Xây dựng các mô đun phần mềm xử lý dữ liệu hồ sơ; mô hình hóa bài toán đồ thị mạng lưới bằng ma trận kề/danh sách kề; lập trình duyệt các thành phần liên thông trên đồ thị.

Phương pháp giảng dạy và học tập (300-350 từ)

Giáo trình áp dụng phương pháp sư phạm kết hợp chặt chẽ giữa truyền thụ lý thuyết và rèn luyện kỹ năng thực hành theo tỷ lệ cân đối: 30 giờ lý thuyết, 27 giờ thực hành/thảo luận/bài tập và 03 giờ kiểm tra. Tiến trình giảng dạy tuân thủ phương pháp đi từ trừu tượng đến cụ thể: bắt đầu bằng định nghĩa hình thức, mô hình hóa qua sơ đồ khối trực quan, chuyển thể sang mã giả và hoàn thiện bằng mã nguồn C/C++ có thể biên dịch.

Hệ thống bài tập và nghiên cứu tình huống được xây dựng chi tiết ở cuối mỗi chương:

  • Bài tập tư duy giải thuật (Chương 1): Viết giải thuật kiểm tra số nguyên tố, tìm số hạng thứ $n$ của dãy Fibonacci, mô hình hóa hệ thống chương trình quản lý bảo trì hồ sơ lương cán bộ theo sơ đồ phân rã Top-down.
  • Bài tập thực hành cấu trúc dữ liệu (Chương 2): Bao gồm 08 câu hỏi lý thuyết đối chiếu ưu/nhược điểm và 07 bài tập lập trình hoàn chỉnh. Tiêu biểu là bài tập thiết kế danh sách liên kết đơn quản lý sinh viên (mã sinh viên, họ tên, năm sinh, điểm trung bình) với đầy đủ các hàm chức năng: nhập/xuất, lọc điểm $\ge 5$, sắp xếp giảm theo điểm, sắp xếp tăng theo mã, tìm kiếm theo mã/họ tên và thêm phần tử; các bài tập thao tác trên danh sách liên kết kép; bài tập biểu diễn và xác định thứ tự duyệt cây nhị phân (tiền tự, trung tự, hậu tự); bài tập lập ma trận kề, danh sách kề và mô phỏng từng bước thuật toán BFS/DFS trên đồ thị cho trước.

Phương pháp đánh giá kết quả học tập gồm đánh giá quá trình thông qua các bài thực hành viết mã trên máy, bài tập giải thuật cá nhân/nhóm và bài kiểm tra định kỳ 03 giờ theo quy định. Đối với việc tự học, giáo trình yêu cầu người học tự thực hiện lại các bước tinh chỉnh giải thuật, cài đặt độc lập toàn bộ các cấu trúc dữ liệu mẫu và hoàn thành 100% hệ thống câu hỏi trắc nghiệm/tự luận cuối mỗi chương.


Điểm nổi bật và cập nhật (250-300 từ)

  • Tính chuẩn hóa theo khung chương trình đào tạo nghề nghiệp: Giáo trình được ban hành năm 2023 theo Quyết định số 597/QĐ-CĐXD1 của Hiệu trưởng Trường Cao đẳng Xây dựng số 1, bám sát các yêu cầu thực tiễn của trình độ Trung cấp CNTT, đảm bảo lượng kiến thức vừa đủ, không mang tính trừu tượng quá mức mà tập trung vào khả năng ứng dụng.
  • Minh họa bằng mã nguồn thực thi cụ thể: Khác với các tài liệu thuần lý thuyết, giáo trình cung cấp đầy đủ các khai báo kiểu dữ liệu (struct node, struct sList, struct dNode, struct dList, treenode) và định nghĩa hàm xử lý hoàn chỉnh bằng ngôn ngữ C/C++, kèm các điều kiện biên như xử lý danh sách rỗng, tràn bộ nhớ (NULL), giải phóng bộ nhớ (delete, free).
  • Tích hợp bài toán ứng dụng thực tế: Mỗi cấu trúc dữ liệu đều đi kèm với ngữ cảnh ứng dụng rõ ràng trong đời sống và kỹ thuật:
    • Ngăn xếp: Cơ chế đảo ngược dữ liệu, bài toán chuyển đổi cơ số từ hệ thập phân sang nhị phân.
    • Hàng đợi: Bài toán điều phối công việc trong máy tính (hàng đợi in ấn, xử lý tiến trình) hoặc điều phối đường băng sân bay.
    • Danh sách liên kết: Ứng dụng quản lý danh bạ điện thoại, danh mục sách thư viện, hồ sơ nhân sự/sinh viên.
    • Đồ thị: Ứng dụng mô tả mạng lưới giao thông, khoảng cách giữa các thành phố trên bản đồ số, sơ đồ chuyển trạng thái máy.
  • Phân tích đối chiếu ưu - nhược điểm hệ thống: Cung cấp các mục phân tích so sánh trực tiếp giữa các cấu trúc dữ liệu tương đồng (mảng tĩnh đối chiếu danh sách liên kết động; Stack LIFO đối chiếu Queue FIFO; ma trận kề đối chiếu danh sách kề), giúp người học định hình tiêu chí lựa chọn cấu trúc tối ưu cho từng bài toán cụ thể.

Đối tượng sử dụng giáo trình (200-250 từ)

  • Sinh viên/Người học mục tiêu: Tài liệu được thiết kế chuyên biệt cho sinh viên trình độ Trung cấp ngành Công nghệ thông tin (Ứng dụng phần mềm) tại học kỳ thứ 02. Ngoài ra, giáo trình phù hợp cho học sinh, sinh viên các ngành kỹ thuật liên quan có nhu cầu trang bị kiến thức cơ sở về lập trình và giải thuật.
  • Kiến thức tiên quyết (Prerequisites): Theo khung chương trình đào tạo của môn học MH10, môn học không yêu cầu môn học tiên quyết bắt buộc. Tuy nhiên, để tiếp thu tốt nội dung giáo trình, người học cần có kiến thức cơ bản về tin học đại cương và hiểu biết ban đầu về cú pháp lệnh lập trình cơ bản (C/Pascal).
  • Giảng viên và cán bộ giảng dạy: Tài liệu là căn cứ chuẩn hóa dùng để xây dựng đề cương bài giảng chi tiết, kế hoạch giảng dạy lý thuyết (30 giờ), phân bổ nội dung thực hành/thảo luận (27 giờ) và thiết kế ngân hàng đề kiểm tra đánh giá (03 giờ).
  • Người tự học và tham khảo chuyên môn: Là tài liệu tự học có hệ thống dành cho lập trình viên mới bắt đầu, người chuẩn bị ôn thi chuyển cấp hoặc người làm việc trong lĩnh vực phần mềm cần củng cố lại các giải thuật tìm kiếm, sắp xếp và thao tác trên cấu trúc dữ liệu động.

Câu hỏi thường gặp (250-300 từ)

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ụ chính thức cho sinh viên trình độ Trung cấp ngành Công nghệ thông tin (Ứng dụng phần mềm). Đồng thời, tài liệu phù hợp cho bất kỳ cá nhân nào bắt đầu học lập trình và muốn nắm vững bản chất của việc tổ chức dữ liệu và thuật toán xử lý.

2. Cần kiến thức nền nào để học?

Môn học không quy định môn học tiên quyết. Người học chỉ cần có tư duy logic cơ bản và đã làm quen với các khái niệm lập trình nhập môn như biến, kiểu dữ liệu nguyên thủy, cấu trúc rẽ nhánh (if-else), vòng lặp (for, while).

3. Điểm khác biệt với giáo trình khác?

Tài liệu tập trung cô đọng trong 02 chương trọng tâm (Giải thuật và Cấu trúc dữ liệu), giảm thiểu các chứng minh toán học phức tạp, thay vào đó tập trung trực tiếp vào giải thuật dưới dạng mã lệnh C/C++, bảng so sánh ưu/nhược điểm thực tế và các bài tập mô phỏng cụ thể.

4. Làm sao để tự học hiệu quả?

Người học nên tuân thủ quy trình 4 bước: (1) Đọc hiểu đặc trưng và nguyên lý hoạt động của cấu trúc; (2) Tự vẽ lại sơ đồ khối/lưu đồ giải thuật; (3) Gõ và chạy thử các đoạn mã C mẫu trong giáo trình; (4) Tự giải quyết trọn vẹn 07 bài tập lập trình lớn ở cuối Chương 2.

5. Có tài liệu bổ trợ nào kèm theo?

Giáo trình được xây dựng dựa trên sự kế thừa từ các tài liệu tham khảo học thuật chính thức được liệt kê tại trang 47:

  1. Đỗ Xuân Lôi (2012), Cấu trúc dữ liệu và giải thuật, Nhà xuất bản Đại học Quốc gia Hà Nội.
  2. Nguyễn Đình Hóa (2010), Cấu trúc dữ liệu và giải thuật, Nhà xuất bản Đại học Quốc gia Hà Nội.
  3. Lê Hữu Lập, Nguyễn Duy Phương (2013), Giáo trình Kỹ thuật lập trình, Học viện Công nghệ Bưu chính Viễn thông.

Kết luận (150 từ)

Giáo trình 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 phần cơ sở ngành cung cấp toàn diện hệ thống tri thức nền tảng từ khái niệm giải thuật, phương pháp thiết kế từ trên xuống đến các 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) và phi tuyến tính (cây nhị phân, đồ thị).

Lộ trình học tập đề xuất cho người học gồm 3 giai đoạn: bắt đầu từ việc nắm vững lý thuyết đặc trưng và ngôn ngữ diễn đạt giải thuật tại Chương 1; tiến hành thực hành cài đặt cấu trúc dữ liệu động trên ngôn ngữ C tại Chương 2; và hoàn thiện năng lực chuyên môn bằng việc giải quyết hệ thống bài toán quản lý dữ liệu ứng dụng. Để mở rộng kiến thức chuyên sâu, người học có thể kết hợp tham khảo các giáo trình của tác giả Đỗ Xuân Lôi, Nguyễn Đình Hóa và Lê Hữu Lập được nêu trong danh mục tài liệu tham khảo.