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

Giáo trình "Cấu trúc dữ liệu và giải thuật" do Phó Giáo sư Đỗ Xuân Lôi biên soạn, Nhà xuất bản Đại học Quốc gia Hà Nội xuất bản (ấn bản lần thứ chín có sửa chữa, năm 2006). Công trình phản ánh nội dung môn học cơ sở trong khung chương trình đào tạo kỹ sư, cử nhân và cao đẳng tin học. Tài liệu được biên soạn dựa trên thực tiễn giảng dạy tại Khoa Tin học, Trường Đại học Bách khoa Hà Nội, cùng ý kiến đóng góp từ GS. Nguyễn Đình Trí (Chủ nhiệm đề tài cấp nhà nước KC01-13), PGS. Nguyễn Xuân Huy (Viện Tin học Việt Nam), PGS. Nguyễn Văn Ba và PTS. Nguyễn Thanh Thủy.

Về vị trí đào tạo, học phần có thời lượng 90 tiết (gồm lý thuyết và bài tập), học sau môn Tin học đại cương. Môn học đóng vai trò nền tảng, chuẩn bị kiến thức phục vụ trực tiếp cho các môn học chuyên ngành tiếp theo như Cơ sở dữ liệu, Trí tuệ nhân tạo, Hệ chuyên gia, Ngôn ngữ hình thức và Chương trình dịch.

Mục tiêu học tập của giáo trình là làm rõ mối liên hệ giữa cấu trúc dữ liệu và giải thuật, nâng cao kỹ thuật lập trình, rèn luyện phương pháp giải bài toán phi số và kỹ năng phân tích độ phức tạp thời gian. Toàn bộ nội dung gồm 11 chương chia làm 3 phần: Phần I nghiên cứu phương pháp thiết kế, phân tích giải thuật và giải thuật đệ qui; Phần II khảo sát các cấu trúc mảng, danh sách, cây, đồ thị; Phần III tập trung vào sắp xếp và tìm kiếm. Điểm đặc sắc của giáo trình là sử dụng "ngôn ngữ tựa PASCAL" linh hoạt, diễn đạt bằng tiếng Việt, giúp người học tập trung vào bản chất thuật toán mà không bị ràng buộc bởi các quy tắc cú pháp cơ học.

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

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

Nội dung tài liệu được triển khai theo trật tự logic chặt chẽ qua các chương trọng tâm:

  • Chương 1 (Mở đầu): Xác định giải thuật là chuỗi câu lệnh xác định thứ tự thao tác trên đối tượng dữ liệu. Tác giả phân tích dữ liệu nguyên tử (atoms), cấu trúc dữ liệu, cấu trúc lưu trữ trong và ngoài, cấu trúc dữ liệu tiền định và tự định nghĩa; đồng thời thiết lập quy tắc cho "ngôn ngữ tựa PASCAL" với các lệnh gán, lệnh ghép, lệnh tuyển (case), vòng lặp (for, while, repeat) và chương trình con (function, procedure).
  • Chương 2 (Thiết kế và phân tích giải thuật): Trình bày chiến lược chia để trị, thiết kế từ đỉnh xuống (top-down) qua bài toán quản lý hồ sơ học bổng; phương pháp tinh chỉnh từng bước (stepwise refinement) qua bài toán sắp xếp SORT và in đường chéo ma trận vuông INCHEO; giải thuật tham ăn (greedy algorithm) giải bài toán tô màu đồ thị điều khiển đèn giao thông. Chương này xác lập lý thuyết độ phức tạp qua ký pháp Big-O, quy tắc cộng, quy tắc nhân và đánh giá hiệu năng trung bình của giải thuật tìm kiếm SEARCH.
  • Chương 3 (Giải thuật đệ qui): Định nghĩa bản chất đệ qui, đệ qui trực tiếp và gián tiếp, vai trò của trường hợp suy biến (degenerate case) qua các bài toán tính giai thừa FACTORIAL, dãy số Fibonacci, Tháp Hà Nội và thuật toán quay lui (backtracking) giải bài toán 8 quân hậu.
  • Phần II và Phần III: Phát triển các cấu trúc mảng, danh sách, cây, đồ thị cùng các giải thuật sắp xếp và tìm kiếm dữ liệu.

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

Giáo trình xây dựng ba khối kiến thức nền tảng:

  • Mối quan hệ giữa cấu trúc dữ liệu và giải thuật: Tác giả nhấn mạnh cấu trúc dữ liệu và giải thuật gắn bó chặt chẽ; cấu trúc dữ liệu thay đổi kéo theo giải thuật thay đổi tương ứng. Khi lựa chọn cấu trúc dữ liệu, người học phải đồng thời xác định các phép toán tương ứng tác động trên cấu trúc đó.
  • Nguyên lý thiết kế phần mềm có cấu trúc: Vận dụng mô-đun hóa kết hợp chiến lược chia để trị, phân chia bài toán lớn thành các mô-đun con độc lập; áp dụng quy trình tinh chỉnh từng bước từ ngôn ngữ tự nhiên sang giả mã rồi chuyển đổi về ngôn ngữ lập trình.
  • Khung lý thuyết tiệm cận toán học: Định nghĩa hình thức cấp độ lớn thời gian $f(n) = O(g(n))$ bị chặn trên bởi $c \cdot g(n)$; phân loại các họ hàm thời gian gồm nhóm hàm đa thức ($\log_2 n, n, n \log_2 n, n^2, n^3$) và nhóm hàm mũ ($2^n, n!, n^n$); nguyên lý phân tích phép toán tích cực và mô hình hóa bài toán đồ thị thuộc lớp NP-đầy đủ.

Kỹ năng phát triển

Qua nội dung giáo trình, người học được rèn luyện các nhóm kỹ năng thực hành và tư duy:

  • Kỹ năng kỹ thuật: Khả năng ánh xạ cấu trúc dữ liệu logic sang cấu trúc lưu trữ vật lý trong bộ nhớ; kỹ thuật cài đặt giải thuật đệ qui và giải thuật quay lui lưu vết trạng thái; kỹ năng viết mã giả tựa PASCAL chuẩn hóa để chuyển đổi sang các ngôn ngữ lập trình như PASCAL hoặc C.
  • Kỹ năng phân tích: Năng lực đánh giá độ phức tạp thuật toán độc lập với phần cứng; phân tích thời gian thực hiện trong tình huống tốt nhất, xấu nhất và trung bình dựa trên xác suất; nhận diện bài toán tối ưu tổ hợp phức tạp để lựa chọn giải thuật heuristic phù hợp.
  • Năng lực thực tế: Kỹ năng xử lý các bài toán phi số với dữ liệu lớn và biến động; khả năng mô hình hóa bài toán thực tế thành bài toán đồ thị và ma trận; kỹ năng tổ chức dữ liệu tệp tin và bản ghi trong các ứng dụng quản lý.

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

Phương pháp sư phạm của giáo trình được xây dựng theo nguyên tắc kết hợp giữa lý thuyết hình thức và thực nghiệm lập trình. Tác giả áp dụng cách tiếp cận quy nạp: xuất phát từ những bài toán thực tiễn quen thuộc để dẫn dắt người học đến các khái niệm khoa học trừu tượng. Ví dụ, mối quan hệ giữa cấu trúc dữ liệu và giải thuật được phân tích qua bài toán tra danh bạ điện thoại: từ phương pháp tìm kiếm tuần tự khi danh sách ngắn, đến tìm kiếm từ điển khi dữ liệu đã có thứ tự, và tìm kiếm phân nhóm khi bổ sung bảng mục lục chữ cái đầu.

Tiến trình giải quyết vấn đề tuân thủ phương pháp thiết kế từ đỉnh xuống và tinh chỉnh từng bước. Bài toán quản lý hồ sơ học bổng sinh viên được phân chia thành các nhiệm vụ chính gồm đọc tệp, xử lý tệp, ghi tệp, sau đó chi tiết hóa thành các thao tác tìm kiếm, cập nhật và in ấn. Quy trình tinh chỉnh giả mã đi từ mô tả ngôn ngữ tự nhiên, chuyển sang mã giả với các cấu trúc điều khiển (if-then, case, for, while, repeat, call, return), trước khi hình thành chương trình PASCAL hoàn chỉnh như bài toán INCHEO in các đường chéo ma trận vuông.

Hệ thống bài tập cuối mỗi chương được thiết kế ở mức độ trung bình, giúp người học củng cố lý thuyết và tiếp cận các kiến thức mở rộng không trình bày trực tiếp trên lớp. Bài tập bao gồm câu hỏi lý thuyết phân tích (so sánh thiết kế top-down và bottom-up), bài toán đồ thị tổ hợp (xếp lịch thi đấu 6 đội bóng A, B, C, D, E, F trong số tuần ít nhất), và bài tập xác định độ phức tạp Big-O qua các vòng lặp lồng nhau.

Đối với hoạt động tự học, giáo trình đặt ra hệ thống câu hỏi định hướng tư duy giúp người học tự thẩm định tính đúng đắn của giải thuật, rèn luyện kỹ năng đánh giá thời gian thực thi qua phép toán tích cực và chủ động chuyển đổi các thuật toán mẫu sang các ngôn ngữ lập trình hiện đại.

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

Giáo trình "Cấu trúc dữ liệu và giải thuật" ghi nhận quá trình chỉnh lý qua nhiều lần xuất bản. Từ bản in đầu tiên vào tháng 8 năm 1993 đến lần tái bản thứ chín năm 2006 (hiệu chỉnh từ lần thứ bảy), tác giả Đỗ Xuân Lôi đã bổ sung nhiều chuyên đề lý thuyết và bài tập dựa trên kinh nghiệm giảng dạy tại Trường Đại học Bách khoa Hà Nội, giúp nội dung phù hợp với nhiều hệ đào tạo khác nhau.

Về mặt khoa học, điểm nổi bật của giáo trình là việc tập trung vào các bài toán phi số (non-numerical problems). Khác với bài toán khoa học kỹ thuật truyền thống chỉ thao tác trên vectơ hay ma trận số học, bài toán phi số xử lý khối lượng dữ liệu lớn, đa dạng và có cấu trúc liên tục biến động. Giáo trình phân định rành mạch giữa cấu trúc dữ liệu và cấu trúc lưu trữ (trong và ngoài), đồng thời xác lập các phép toán chuyên biệt gồm tạo lập, hủy bỏ, truy cập, bổ sung và loại bỏ phần tử.

Bên cạnh đó, tài liệu tích hợp các phương pháp giải quyết bài toán công nghiệp thực tế. Điển hình là việc mô hình hóa hệ thống 13 tuyến đường giao nhau tại một giao lộ thành đồ thị vô hướng. Nhận diện đây là bài toán tô màu đồ thị thuộc lớp bài toán NP-đầy đủ, giáo trình đưa vào giải thuật heuristic "tham ăn" (greedy algorithm) để đạt được phân hoạch 4 pha đèn tín hiệu tối ưu về mặt thực tiễn trong thời gian ngắn. Ngoài ra, việc tổ chức dữ liệu dạng bản ghi (record) và trường (field) phản ánh trực tiếp cấu trúc của các hệ thống cơ sở dữ liệu hiện đại.

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

Giáo trình "Cấu trúc dữ liệu và giải thuật" được biên soạn phục vụ các nhóm đối tượng trong hệ thống giáo dục đại học và nghiên cứu công nghệ thông tin:

  • Sinh viên đại học và cao đẳng: Tài liệu là giáo trình chính khóa cho sinh viên hệ kỹ sư tin học, cử nhân tin học và cao đẳng tin học. Chương trình học được thiết kế cho thời lượng 90 tiết học gồm cả lý thuyết và bài tập.
  • Kiến thức tiên quyết (Prerequisites): Sinh viên trước khi học cần hoàn thành môn Tin học đại cương, nắm vững các cấu trúc dữ liệu tiền định cơ bản (biến, mảng, bản ghi), cú pháp lập trình cơ bản và các khái niệm đại số, giải tích nền tảng.
  • Học viên cao học và nghiên cứu sinh: Giáo trình cung cấp nội dung mở rộng làm tài liệu tham khảo cho sinh viên cao học, nghiên cứu sinh, đặc biệt trong các chủ đề đánh giá độ phức tạp thời gian trung bình bằng xác suất, lớp bài toán NP-đầy đủ, giải thuật heuristic và thuật toán quay lui.
  • Giảng viên và cán bộ tin học: Cuốn sách là tài liệu tham khảo giảng dạy cho giảng viên tin học, đồng thời giúp các cán bộ kỹ thuật củng cố phương pháp luận thiết kế chương trình, chuẩn hóa kỹ thuật mô-đun hóa và tối ưu hóa giải thuật trong phát triển phần mềm.

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 phù hợp làm tài liệu học tập chính thức cho sinh viên hệ kỹ sư, cử nhân, cao đẳng tin học; đồng thời là tài liệu tham khảo cho học viên cao học, nghiên cứu sinh, giảng viên và cán bộ kỹ thuật muốn nâng cao năng lực thiết kế giải thuật.

  2. Cần kiến thức nền nào để học? Người học cần hoàn thành môn Tin học đại cương, hiểu biết về cú pháp của một ngôn ngữ lập trình bậc cao (như PASCAL, C), nắm được các cấu trúc dữ liệu tiền định cơ bản và có kiến thức toán học về logic, hàm số, giải tích và xác suất cơ bản.

  3. Điểm khác biệt với giáo trình khác? Giáo trình phân định rõ ràng giữa cấu trúc dữ liệu logic và cấu trúc lưu trữ vật lý trong bộ nhớ; sử dụng "ngôn ngữ tựa PASCAL" tiếng Việt độc lập với cú pháp máy móc; đồng thời tích hợp lý thuyết phân tích độ phức tạp tiệm cận Big-O với các giải thuật heuristic giải bài toán NP-đầy đủ trên đồ thị.

  4. Làm sao để tự học hiệu quả? Người học nên áp dụng phương pháp tinh chỉnh từng bước: phân tích bài toán bằng ngôn ngữ tự nhiên, chuyển thể sang mã giả tựa PASCAL, sau đó cài đặt trực tiếp trên trình biên dịch để kiểm thử; đồng thời hoàn thành toàn bộ hệ thống bài tập lý thuyết và bài toán thuật toán cuối mỗi chương.

  5. Có tài liệu bổ trợ nào kèm theo? Giáo trình tích hợp sẵn hệ thống bài tập chọn lọc cuối chương (gồm bài tập lý thuyết, phân tích Big-O và lập lịch đồ thị), các chương trình PASCAL mẫu hoàn chỉnh (như INCHEO) và các sơ đồ cấu trúc phân cấp, mô hình đồ thị trực quan.

Kết luận

Giáo trình "Cấu trúc dữ liệu và giải thuật" của PGS. Đỗ Xuân Lôi là tài liệu khoa học hệ thống về tổ chức dữ liệu và phương pháp thiết kế giải thuật trong chương trình đào tạo kỹ sư tin học. Giá trị cốt lõi của cuốn sách thể hiện ở tính sư phạm, sự gắn kết giữa lý thuyết toán học hình thức và khả năng giải quyết các bài toán phi số trong thực tiễn.

Về lộ trình học tập, tài liệu định hướng người học tiếp cận từ nhận thức về mối quan hệ giữa dữ liệu và giải thuật, kỹ thuật phân tích tiệm cận thời gian Big-O và giải thuật đệ qui ở Phần I; tiến tới làm chủ các cấu trúc dữ liệu tuyến tính và phi tuyến ở Phần II; sau đó hoàn thiện kỹ năng cài đặt qua các giải thuật sắp xếp, tìm kiếm ở Phần III trước khi bước vào các môn học chuyên ngành.

Hệ thống bài tập phân loại cùng các mã giả tựa PASCAL trong tài liệu là nguồn tài nguyên học thuật nền tảng hỗ trợ sinh viên và cán bộ kỹ thuật phát triển năng lực tư duy lập trình chuyên sâu.