Tài Liệu Thư Mục Học Thuật: Giáo Trình Cấu Trúc Dữ Liệu Và Thuật Toán

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

Cấu trúc dữ liệu và thuật toán là giáo trình chuyên ngành do PGS. Hoàng Nghĩa Tý biên soạn, được Nhà xuất bản Xây dựng tái bản năm 2014 (xuất bản lần đầu năm 2006). Công trình được hoàn thiện tại Bộ môn Công nghệ phần mềm, Khoa Công nghệ thông tin, Trường Đại học Xây dựng Hà Nội.

Về vị trí trong chương trình đào tạo, tài liệu xác định môn học Cấu trúc dữ liệu và thuật toán là khối kiến thức cơ sở ngành thuộc phần kết cấu chịu lực nền tảng của ngành Công nghệ thông tin. Giáo trình hướng tới hai mục tiêu học tập cụ thể:

  1. Xây dựng tư duy logic toán học để phân tích và hiểu rõ các thuật toán trừu tượng.
  2. Hình thành kỹ năng lập trình để chuyển đổi các sơ đồ thuật toán thành câu lệnh thực thi trên máy tính thông qua các cấu trúc điều khiển.

Về cấu trúc, tài liệu được phân chia tương ứng với mô hình đào tạo theo hệ thống tín chỉ được áp dụng tại Trường Đại học Xây dựng từ năm 2009. Nội dung môn học được tách thành hai học phần độc lập (mỗi học phần có thời lượng 2 tín chỉ):

  • Học phần "Nhập môn Cấu trúc dữ liệu và thuật toán": Bao gồm Chương 1, Chương 2, các mục 3.3 thuộc Chương 3, Chương 4, Chương 5, mục 7.3 của Chương 7 và mục 8 của Chương 8.
  • Học phần "Cấu trúc dữ liệu và thuật toán nâng cao": Bao gồm phần mở rộng trong mục 3.8 của Chương 3, Chương 6, mục 7.5 của Chương 7 và mục 8 của Chương 8.

Điểm đặc thù của giáo trình là sự kết hợp giữa lý thuyết cấu trúc dữ liệu kinh điển với các bài toán mô phỏng kỹ thuật (như ma trận thưa, đa thức thưa) và việc cung cấp các chương trình mẫu hoàn chỉnh được viết bằng ngôn ngữ lập trình Turbo Pascal.


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

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

Căn cứ vào văn bản giáo trình, các nội dung trọng tâm được triển khai tuần tự theo mức độ phức tạp của cấu trúc dữ liệu:

  • Chương 1: Nhập môn cấu trúc dữ liệu: Thiết lập định nghĩa cơ bản về cấu trúc dữ liệu dựa trên luận điểm của Niklaus Wirth (Cấu trúc dữ liệu + Giải thuật = Chương trình). Chương này phân tích cơ chế lưu trữ dữ liệu dạng mã máy dưới các từ máy (word) 16-bit và 32-bit; các kiểu dữ liệu nguyên thủy (integer, real, char, boolean trong Pascal; int, float, char trong C). Đồng thời, chương 1 giới thiệu hệ thống các mô hình dữ liệu: mô hình quan hệ (do Edgar F. Codd đề xướng năm 1970 với các khái niệm quan hệ, bảng, miền domen, trường field, bản ghi record), mô hình mạng lưới (chuẩn CODASYL 1971 với bản ghi chủ và bản ghi thành viên), mô hình phân cấp (hệ thống IMS/VS trong dự án Apollo), mô hình đối tượng/quan hệ (ORDBMS), mô hình hướng đối tượng (OODB), mô hình nửa cấu trúc, mô hình liên kết, mô hình Thực thể - Thuộc tính - Giá trị (EAV) và mô hình ngữ cảnh.
  • Chương 2: Cấu trúc dữ liệu tuyến tính: Trình bày chi tiết bốn cấu trúc dữ liệu tuyến tính cơ bản:
    1. Mảng (Array): Cơ chế truy nhập trực tiếp, phương pháp tính địa chỉ ô nhớ theo công thức Cơ sở + (i-1)*k, mảng nhiều chiều, mảng của mảng; kỹ thuật xử lý ma trận thưa (tam giác trên, tam giác dưới, ma trận băng, ma trận thưa ngẫu nhiên) qua bảng 3 cột $(q+1)$ hàng cùng thuật toán hoán vị ma trận thưa.
    2. Ngăn xếp (Stack): Cơ chế vào sau - ra trước (LIFO), các phép toán cơ bản (Create, Add/Push, Delete/Pop, Top, IsEmpty), thuật toán đổi cơ số 10 sang cơ số 2 và mã nguồn đơn vị thư viện UNIT STACK (Stack.tpu) sử dụng con trỏ liên kết động.
    3. Hàng đợi (Queue): Cơ chế vào trước - ra trước (FIFO), các phép toán (CreateQ, AddQ, DeleteQ/RemoveQ, Front, IsEmptyQ), kỹ thuật quản lý chỉ số front và rear, mã nguồn đơn vị thư viện UNIT QUEUE (Queue.tpu).
    4. Danh sách (List): Các thao tác chèn (Insert), xóa (Delete) và bài toán ứng dụng cộng hai đa thức thưa bậc cao.
  • Chương 3: Cấu trúc dữ liệu phi tuyến (Phần Bản ghi - Record): Khái niệm bản ghi như một phiếu tin chứa các trường dữ liệu không thuần nhất; cú pháp khai báo type... record... end; kỹ thuật tổ chức bản ghi lồng nhau (như bản ghi hosons chứa trường lichslg có kiểu luong); mảng các bản ghi và câu lệnh cấu trúc with... do để tối ưu hóa việc truy xuất trường.
  • Các nội dung nâng cao tiếp theo: Trình bày các kiến thức chuyên sâu gồm kỹ thuật con trỏ nâng cao, đệ quy, duyệt cây nhị phân, cấu trúc tệp mở và tệp văn bản (file text), danh sách liên kết vòng, danh sách liên kết đôi, đồ thị mạng lưới và thuật toán quy hoạch động.
Tiến trình nội dung:
[Biểu diễn dữ liệu & Mô hình hóa] 
       ↓
[Cấu trúc tuyến tính: Mảng, Stack, Queue, Danh sách] 
       ↓
[Cấu trúc phi tuyến: Bản ghi (Record), Cây nhị phân, Đồ thị] 
       ↓
[Cấu trúc động & Thuật toán nâng cao: Con trỏ, Đệ quy, File, Quy hoạch động]

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

Giáo trình hình thành ba khối kiến thức lý thuyết cơ sở:

  1. Lý thuyết trừu tượng hóa dữ liệu: Phân tách rõ ràng giữa dữ liệu thuần túy (data) và ngữ nghĩa dữ liệu (semantic); phân loại cấu trúc tĩnh (kích thước cố định khi biên dịch) và cấu trúc động (thay đổi kích thước trong quá trình thực thi thông qua con trỏ).
  2. Nguyên lý tổ chức bộ nhớ vật lý: Cơ chế ánh xạ các cấu trúc dữ liệu nhiều chiều vào không gian bộ nhớ tuyến tính một chiều của máy tính dựa trên địa chỉ cơ sở và độ dài từ máy; cơ chế phân bổ vùng nhớ động bằng các lệnh New và giải phóng vùng nhớ bằng Dispose.
  3. Khuôn khổ mô hình hóa dữ liệu: Cung cấp cơ sở toán học (lý thuyết tập hợp) để cấu trúc hóa thông tin theo các mô hình phân cấp, mạng lưới, quan hệ và hướng đối tượng.

Kỹ năng phát triển

  • Kỹ năng kỹ thuật: Lập trình cấu trúc dữ liệu bằng ngôn ngữ Pascal; kỹ thuật đóng gói và biên dịch các module thư viện đơn vị (.TPU); thao tác trên các biến con trỏ và danh sách liên kết.
  • Kỹ năng phân tích: Khả năng phân tích đặc trưng của dữ liệu để lựa chọn cấu trúc lưu trữ tối ưu (ví dụ: chuyển đổi ma trận thưa từ dạng bảng chữ nhật sang dạng danh sách 3 cột để tiết kiệm bộ nhớ).
  • Năng lực thực hành: Chuyển đổi sơ đồ khối thuật toán thành mã lệnh cụ thể; xử lý các bài toán kỹ thuật và quản lý thực tế như xử lý đa thức, hoán vị ma trận, phân tích số học và quản lý hồ sơ thông tin.

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

Giáo trình triển khai phương pháp sư phạm mang tính quy nạp và thực nghiệm:

  • Tiếp cận từ bản chất bộ nhớ đến biểu diễn ngôn ngữ: Bắt đầu từ cách tổ chức bit, byte, từ máy và địa chỉ ô nhớ vật lý, sau đó mới tiến hành định nghĩa kiểu dữ liệu trong ngôn ngữ lập trình bậc cao.
  • Kết hợp sơ đồ thuật toán và mã nguồn mẫu: Mỗi cấu trúc dữ liệu đều đi kèm mô tả cơ chế hoạt động bằng hình vẽ/sơ đồ trạng thái ô nhớ (như diễn biến các bước nạp/xóa phần tử trong Stack và Queue), sau đó đối chiếu trực tiếp với mã nguồn cài đặt bằng Pascal.
Mô hình diễn giải:
Khái niệm/Cơ chế vật lý → Sơ đồ biến thiên ô nhớ → Khai báo cấu trúc Type/Var → Cài đặt thủ tục/hàm

Hệ thống bài tập và ca thực hành được xây dựng cụ thể cuối mỗi phần:

  • Bài tập thiết lập công thức toán học: Yêu cầu người học tự xây dựng công thức tính toán địa chỉ phần tử $a_{ij}$ cho các cấu trúc đặc thù như ma trận tam giác dưới, ma trận tam giác trên và ma trận 3 đường chéo (tridiagonal matrix) khi lưu trữ tuần tự trong bộ nhớ.
  • Bài tập cài đặt giải thuật: Viết chương trình hoán vị ma trận thưa; chương trình kiểm tra tính chất ma trận vuông; sử dụng cấu trúc Stack để phân tích một số nguyên thành tích các thừa số nguyên tố hiển thị theo thứ tự giảm dần; dùng phép toán cơ bản của Queue và Stack để đảo ngược hàng đợi.
  • Bài tập xử lý ứng dụng: Ghép nối và hoàn thiện chương trình cộng hai đa thức thưa sử dụng mảng các bản ghi (Node = record coef, exp end).

Về phương pháp tự học và đánh giá, tài liệu cung cấp sẵn mã nguồn hoàn chỉnh của các đơn vị chương trình (UNIT STACK, UNIT QUEUE), cho phép người học trực tiếp biên dịch ra đĩa (Destination => Disk) trên môi trường Turbo Pascal để kiểm thử và tái sử dụng cho các bài toán phức hợp.


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

So với lần xuất bản đầu tiên vào năm 2006, bản tái bản năm 2014 có những điều chỉnh kỹ thuật và nội dung sau:

  • Cấu trúc lại đề cương theo học chế tín chỉ: Phân định ranh giới kiến thức rõ ràng giữa hai học phần "Nhập môn Cấu trúc dữ liệu và thuật toán" (2 tín chỉ) và "Cấu trúc dữ liệu và thuật toán nâng cao" (2 tín chỉ) nhằm phục vụ các chương trình đào tạo chuyên ngành khác nhau trong Khoa Công nghệ thông tin.
  • Chuẩn hóa sơ đồ và mã nguồn: Viết lại chương trình thực thi cho một số thuật toán; chuẩn hóa lại các sơ đồ thuật toán về hoán vị ma trận thưa, danh sách liên kết và thuật toán sắp xếp theo kiểu chèn.
  • Mở rộng nội dung nâng cao: Bổ sung hệ thống lý thuyết và bài tập về con trỏ nâng cao, giải thuật đệ quy, kỹ thuật duyệt cây nhị phân, cấu trúc tệp mở, tệp văn bản (file text), danh sách liên kết vòng và danh sách liên kết đôi.
  • Tích hợp các bài toán thực tế từ đề tài nghiên cứu lịch sử: Tác giả đưa vào giáo trình các chương trình tổng hợp được đúc kết từ quá trình nghiên cứu ứng dụng thực tế:
    1. Chương trình quản lý tiền lương: Phát triển từ phần mềm tính lương cho Phòng Tài vụ Trường Đại học Xây dựng những năm 1990.
    2. Chương trình sơ đồ mạng: Được viết trong giai đoạn 1980–1981, vận hành trên hệ thống máy tính điện tử Minsk-32.
    3. Chương trình quy hoạch động: Diễn giải giải thuật tối ưu hóa trong đề tài "Thiết kế tối ưu kết cấu mặt đường mềm nhiều lớp" (thực hiện giai đoạn 1975–1977).
    4. Chương trình quản lý thi trắc nghiệm: Trích xuất từ đề tài "Xây dựng Ngân hàng đề thi và phần mềm phục vụ thi trắc nghiệm môn Tin học đại cương" năm 2001.

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

Giáo trình được thiết kế cho các nhóm đối tượng học thuật cụ thể:

Nhóm đối tượng Mục đích sử dụng Phạm vi nội dung tương ứng
Sinh viên chuyên ngành CNTT Học phần bắt buộc cơ sở ngành Toàn bộ giáo trình (Học phần Nhập môn 2 tín chỉ + Học phần Nâng cao 2 tín chỉ)
Sinh viên các ngành kỹ thuật khác (Xây dựng, Cơ khí...) Học phần tin học ứng dụng Học phần Nhập môn (Chương 1, 2, mục 3.3, 4, 5, 7.3, 8)
Học viên cao học Tài liệu ôn tập kiến thức nền tảng Các chương lý thuyết mô hình hóa dữ liệu, cây nhị phân, quy hoạch động
Giảng viên Biên soạn bài giảng và đề cương Khung phân bổ 2 tín chỉ cơ bản và 2 tín chỉ nâng cao

Yêu cầu điều kiện tiên quyết đối với người học:

  • Kiến thức toán học logic cơ sở.
  • Kỹ năng lập trình căn bản trên một ngôn ngữ lập trình có cấu trúc (nắm vững các kiểu dữ liệu cơ bản, mảng, biến và các cấu trúc rẽ nhánh, vòng lặp).

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 phục vụ sinh viên và học viên cao học ngành Công nghệ thông tin; sinh viên các ngành kỹ thuật công trình (xây dựng, cơ khí) có học phần tin học ứng dụng; cũng như giảng viên cần tài liệu tham khảo để giảng dạy môn Cấu trúc dữ liệu và thuật toán.

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 toán học logic và đã hoàn thành học phần lập trình cơ sở (đặc biệt là ngôn ngữ Pascal hoặc C), nắm được cú pháp câu lệnh điều khiển, hàm, thủ tục và khái niệm biến/mảng.

3. Điểm khác biệt của giáo trình này so với các tài liệu cùng chủ đề là gì?

Tài liệu phân chia nội dung trực tiếp thành hai học phần tín chỉ độc lập (Nhập môn và Nâng cao); tập trung vào việc mô tả cơ chế lưu trữ vật lý trong bộ nhớ (địa chỉ cơ sở, từ máy); tích hợp các bài toán đặc thù của khối kỹ thuật (ma trận thưa, đa thức thưa) và đưa vào các chương trình ứng dụng thực tế từ các đề tài nghiên cứu của tác giả (tính lương, sơ đồ mạng Minsk-32, quy hoạch động mặt đường).

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 tiếp cận tuần tự theo lộ trình học phần Nhập môn trước: đọc hiểu lý thuyết bộ nhớ, vẽ lại sơ đồ biến thiên ô nhớ của thuật toán, sau đó gõ và biên dịch trực tiếp các đoạn mã mẫu (program doicoso, program hvmt_thua, UNIT STACK, UNIT QUEUE) trên Turbo Pascal để kiểm chứng kết quả trước khi giải các bài tập cuối chương.

5. Giáo trình có cung cấp các thư viện mẫu có sẵn không?

Có. Giáo trình cung cấp mã nguồn đầy đủ của hai thư viện đơn vị độc lập là UNIT STACK (trong tệp Stack.pas) và UNIT QUEUE (trong tệp Queue.pas), được cài đặt bằng kỹ thuật cấp phát bộ nhớ động qua con trỏ (PointerType = ^StackNode, QueuePtr = ^QueueNode), sẵn sàng để biên dịch thành tệp .tpu dùng cho các chương trình ứng dụng.


Kết luận

Giáo trình Cấu trúc dữ liệu và thuật toán của PGS. Hoàng Nghĩa Tý cung cấp hệ thống kiến thức nền tảng về tổ chức dữ liệu và thiết kế giải thuật từ mức độ biểu diễn bộ nhớ vật lý đến cài đặt phần mềm thực tế.

Lộ trình học tập khuyến nghị bắt đầu từ việc nắm vững kiểu dữ liệu và các mô hình dữ liệu ở Chương 1, thực hành các cấu trúc tuyến tính (mảng, ngăn xếp, hàng đợi, danh sách) ở Chương 2 và cấu trúc bản ghi ở Chương 3. Người học sau đó tiếp tục mở rộng sang các nội dung nâng cao về con trỏ, đệ quy, cây nhị phân, xử lý tệp và quy hoạch động. Tài liệu hỗ trợ thực hành thông qua hệ thống bài toán kỹ thuật và mã nguồn thư viện đóng gói trên môi trường Turbo Pascal.