Bối cảnh và vấn đề nghiên cứu

Đề tài "Cấu Trúc Dữ Liệu và Giải Thuật tại Trường Đại Học Tài Chính - Marketing" là bài tập đồ án học phần được thực hiện bởi sinh viên Nguyễn Xuân Tỉnh (Mã số sinh viên: 2121001038, Lớp học phần: 2121112901202) thuộc Khoa Công nghệ Thông tin, Trường Đại học Tài chính - Marketing, dưới sự hướng dẫn chuyên môn của Thạc sĩ Nguyễn Quốc Thanh.

Bối cảnh thực tiễn của đồ án xuất phát từ yêu cầu học tập nền tảng của sinh viên năm nhất ngành Công nghệ Thông tin khi tiếp cận các khái niệm cốt lõi về tổ chức dữ liệu bộ nhớ và các giải thuật xử lý cơ bản. Nhiệm vụ trọng tâm của đề tài là xây dựng chương trình quản lý thông tin môn học, áp dụng trực tiếp các giải thuật tìm kiếm và sắp xếp kinh điển lên hai dạng cấu trúc lưu trữ cơ bản trong bộ nhớ: mảng cấu trúc (cấu trúc dữ liệu tĩnh) và danh sách liên kết đơn (cấu trúc dữ liệu động).

Mục tiêu nghiên cứu và triển khai kỹ thuật được xác định gồm các nhiệm vụ cụ thể sau:

  1. Định nghĩa cấu trúc dữ liệu lưu trữ đối tượng môn học bao gồm các trường thông tin: Mã môn học (MaMH), Tên môn học (TenMH), Số tín chỉ (SoTC), Số giờ lý thuyết (GioLT), Số giờ thực hành (GioTH) và Số giờ tự học (TuHoc).
  2. Thiết kế và cài đặt các hàm thao tác cơ bản (nhập, xuất, đếm phần tử) cùng các thuật toán tìm kiếm (tìm kiếm tuyến tính, tìm kiếm nhị phân) và sắp xếp (Shaker Sort, Selection Sort, Interchange Sort, Bubble Sort, Insertion Sort, Quick Sort, Merge Sort) trên mảng cấu trúc.
  3. Chuyển đổi mô hình quản lý sang danh sách liên kết đơn, tái lập các hàm quản lý nút (Node), các thao tác duyệt danh sách, tìm kiếm và cài đặt các thuật toán sắp xếp thích ứng trên cấu trúc con trỏ động.
  4. Kiểm thử từng hàm chức năng thông qua chương trình điều khiển (main) với tập dữ liệu mẫu và ghi nhận kết quả thực thi.

Đối tượng nghiên cứu là các cấu trúc dữ liệu cơ bản (mảng tĩnh, danh sách liên kết đơn) và thuật toán xử lý dữ liệu môn học. Phạm vi thực nghiệm được giới hạn trong môi trường lập trình C/C++ với bộ dữ liệu mẫu gồm 10 môn học được xây dựng phục vụ việc kiểm thử các giải thuật.


Cơ sở lý thuyết và phương pháp

Khung lý thuyết và mô hình cấu trúc dữ liệu

Đề tài dựa trên các nguyên lý lập trình cấu trúc và tổ chức dữ liệu của ngôn ngữ C/C++:

  • Kiểu dữ liệu cấu trúc (struct): Gom nhóm các thuộc tính có kiểu dữ liệu khác nhau của một thực thể môn học thành một khối thống nhất mang tên MONHOC (hoặc mhType).
  • Mảng tĩnh của cấu trúc: Lưu trữ các bản ghi môn học tại các ô nhớ liên tiếp. Phương pháp này cho phép truy xuất ngẫu nhiên qua chỉ số mảng với độ phức tạp $O(1)$, nhưng cố định dung lượng bộ nhớ cấp phát ban đầu.
  • Danh sách liên kết đơn (Singly Linked List): Mỗi phần tử là một nút (mhnodeType) chứa dữ liệu môn học (infor) và con trỏ liên kết (next) trỏ đến phần tử kế tiếp. Danh sách được quản lý thông qua hai con trỏ đầu (head) và cuối (tail) trong cấu trúc dsmh_List.

Phương pháp xử lý thuật toán

  1. Thuật toán tìm kiếm:
    • Tìm kiếm tuyến tính (Linear Search): Duyệt tuần tự từ đầu đến cuối tập dữ liệu để so sánh khóa tìm kiếm (Mã môn học hoặc Tên môn học).
    • Tìm kiếm nhị phân (Binary Search): Áp dụng trên tập dữ liệu mảng đã được sắp xếp có thứ tự, liên tục chia đôi khoảng tìm kiếm dựa trên vị trí phần tử giữa (mid).
  2. Thuật toán sắp xếp:
    • Các thuật toán đổi chỗ và lựa chọn cơ bản: Selection Sort, Interchange Sort, Bubble Sort, Shaker Sort, Insertion Sort.
    • Các thuật toán chia để trị (Divide and Conquer): Quick Sort (phân hoạch danh sách dựa trên phần tử chốt) và Merge Sort (chia nhỏ, phân phối vào các mảng phụ rồi trộn lại có thứ tự).

Nguồn dữ liệu thực nghiệm

Tác giả sử dụng tập dữ liệu mẫu chuẩn gồm 10 môn học để kiểm thử tính chính xác của các thuật toán:

Mã môn học Tên môn học Số tín chỉ Giờ lý thuyết Giờ thực hành Tự học
1 Toán 12 5 5 2
2 Van 11 4 3 1
3 Anh 10 6 2 6
4 Su 9 4 3 4
5 Dia 7 5 4 3
6 Tin 15 3 1 5
7 Li 6 6 2 6
8 Hoa 8 4 5 2
9 Sinh 13 5 4 4
10 The duc 4 7 2 1

Thiết kế và triển khai

Hệ thống mã nguồn của đồ án được module hóa thành các hàm con độc lập, kiểm tra đơn vị trực tiếp qua hàm main tương ứng với hai phương thức tổ chức bộ nhớ.

                    +------------------------------------+
                    |        ĐỐI TƯỢNG MÔN HỌC           |
                    |    (MaMH, TenMH, SoTC, GioLT...)   |
                    +-----------------+------------------+
                                      |
              +-----------------------+-----------------------+
              |                                               |
              v                                               v
  +-----------------------+                       +-----------------------+
  |    MẢNG CẤU TRÚC      |                       |  DANH SÁCH LIÊN KẾT   |
  |  (Bộ nhớ tĩnh cố định)|                       |  (Cấp phát động/Node) |
  +-----------+-----------+                       +-----------+-----------+
              |                                               |
      +-------+-------+                               +-------+-------+
      |               |                               |               |
      v               v                               v               v
+-----------+   +-----------+                   +-----------+   +-----------+
| TÌM KIẾM  |   |  SẮP XẾP  |                   | TÌM KIẾM  |   |  SẮP XẾP  |
| - Linear  |   | - Shaker  |                   | - Linear  |   | - Select. |
| - Binary  |   | - Select. |                   |   (MaMH)  |   | - Inter.  |
|           |   | - Inter.  |                   | - Linear  |   | - Bubble  |
|           |   | - Bubble  |                   |   (TenMH) |   | - Insert. |
|           |   | - Insert. |                   |           |   | - Quick   |
|           |   | - Quick   |                   |           |   |           |
|           |   | - Merge   |                   +-----------+   +-----------+
+-----------+   +-----------+

Thiết kế cấu trúc dữ liệu

Định nghĩa kiểu dữ liệu trong chương trình được quy định cụ thể như sau:

  • Đối với mảng cấu trúc:
struct MONHOC {
    char MaMH[10];
    char TenMH[15];
    int SoTC;
    float GioLT;
    float GioTH;
    float Tuhoc;
};
  • Đối với danh sách liên kết đơn:
typedef struct {
    char MaMH[10];
    char TenMH[15];
    int SoTC;
    float GioLT;
    float GioTH;
    float Tuhoc;
} mhType;

typedef struct node {
    mhType infor;
    struct node* next;
} mhnodeType;

typedef struct {
    mhnodeType* head;
    mhnodeType* tail;
} dsmh_List;

Phân loại các module chức năng cài đặt

Các thuật toán được phân bổ trên hai cấu trúc dữ liệu theo bảng tổng hợp sau:

Chức năng thao tác Triển khai trên Mảng cấu trúc Triển khai trên Danh sách liên kết
Nhập / Xuất dữ liệu nhap_Mang, xuat_Mang, nhap_o, xuat_o Nhapmonhoc, Print_Listmonhoc, Print_mhNode
Thao tác bổ trợ hoanvi(MONHOC&, MONHOC&) init_dsmh, Get_mhNode, add_last, Countlist_monhoc, swap
Tìm kiếm tuyến tính LinearSearch (MaMH), LinearSearch2 (TenMH) FindList_MaMH (MaMH), FindList_TenMH (TenMH)
Tìm kiếm nhị phân BinarySearch (MaMH), BinarySearch2 (TenMH) Không cài đặt
Shaker Sort ShakerSort (theo MaMH) Không cài đặt
Selection Sort SelectionSort (theo MaMH) SelectionSortList (theo MaMH)
Interchange Sort InterchangeSort (theo TenMH) InterchangeSortList (theo MaMH)
Bubble Sort BubbleSort (theo MaMH) BubbleSortList (theo MaMH)
Insertion Sort InsertionSort (theo TenMH/ĐTB) InsertionSortList (theo MaMH)
Quick Sort QuickSort, QuickSort1 (theo SoTC) QuickSortList (chia danh sách $L_1$, $L_2$ và đệ quy)
Merge Sort MergeSort, Distribute, Merge, min Không cài đặt

Nội dung chính theo từng chương

CHUONG I: GIOI THIEU

Chương I đặt nền tảng định nghĩa bài toán và thiết lập các thông số dữ liệu cho toàn bộ đồ án:

  • Trình bày yêu cầu xây dựng các chức năng quản lý thông tin môn học với 6 trường thuộc tính: Mã môn học (chuỗi ký tự số tối đa 10 ký tự), Tên môn học (chuỗi ký tự tiếng Việt tối đa 15 ký tự), Số tín chỉ (kiểu số nguyên không âm), Giờ lý thuyết, Giờ thực hành và Tự học (các trường kiểu số thực dương).
  • Cung cấp bảng dữ liệu mẫu (Bảng 1.1) gồm 10 bản ghi chuẩn đại diện cho các môn học: Toán, Văn, Anh, Sử, Địa, Tin, Lí, Hóa, Sinh, Thể dục cùng đầy đủ các chỉ số định lượng về số tín chỉ và phân bổ số giờ học.
  • Phác thảo danh mục các chức năng giải thuật cần thực hiện trên hai cấu trúc: 13 chức năng trên mảng cấu trúc và 10 chức năng trên danh sách liên kết đơn.

CHUONG II: TIM KIEM VA SAP XEP TREN MANG CAU TRUC

Chương II tập trung vào việc hiện thực hóa toàn bộ các giải thuật tìm kiếm và sắp xếp trên mảng tĩnh với 14 mục cài đặt chi tiết:

  • Nhập xuất cơ bản: Cài đặt hàm nhap_o và xuat_o thao tác trên một phần tử cấu trúc, kết hợp vòng lặp trong nhap_Mang và xuat_Mang để xử lý mảng $n$ phần tử.
  • Giải thuật tìm kiếm:
    • LinearSearch và LinearSearch2: Duyệt mảng từ chỉ số đầu đến cuối, sử dụng hàm strcmp để so sánh chuỗi mã môn học hoặc tên môn học với khóa $x$.
    • BinarySearch và BinarySearch2: Cài đặt giải thuật tìm kiếm nhị phân với 3 biến chỉ số left, right, mid. Vùng tìm kiếm được thu hẹp về bên trái hoặc bên phải sau mỗi phép so sánh chuỗi.
  • Giải thuật sắp xếp cơ bản và nâng cao:
    • hoanvi: Hàm phụ trợ đổi chỗ trực tiếp hai bản ghi MONHOC.
    • ShakerSort: Cải tiến Bubble Sort bằng cách duyệt hai chiều (từ phải sang trái và ngược lại), thu hẹp dần hai biên left và right.
    • SelectionSort: Tìm chỉ số phần tử nhỏ nhất (min) từ vị trí $i+1$ đến cuối mảng để hoán vị với phần tử tại $i$.
    • InterchangeSort: So sánh trực tiếp phần tử $i$ với mọi phần tử $j$ đứng sau nó, thực hiện đổi chỗ ngay khi phát hiện nghịch thế chuỗi tên môn học.
    • BubbleSort: Đẩy các phần tử có khóa lớn/nhỏ dần về cuối mảng thông qua các phép so sánh hai phần tử liên kề.
    • InsertionSort: Chèn phần tử $a[i]$ vào đúng vị trí trong đoạn đã sắp xếp từ $0$ đến $i-1$.
    • QuickSort: Giải thuật sắp xếp nhanh theo tiêu chí số tín chỉ (SoTC), chọn phần tử chốt, phân hoạch đoạn mảng thành hai nửa và gọi đệ quy.
    • MergeSort: Phối hợp 4 hàm con (min, Distribute, Merge, MergeSort) để chia mảng thành các mảng phụ $b$ và $c$ với kích thước bước $k$, sau đó trộn có thứ tự trở lại mảng ban đầu.
  • Mỗi mục đều đi kèm khối kiểm tra thông qua hàm main (khởi tạo mảng có số phần tử const int spt = 3), đọc dữ liệu, gọi hàm và chụp ảnh minh chứng kết quả chạy từ console.

CHUONG III: TIM KIEM VA SAP XEP TREN DSLK

Chương III trình bày quá trình thích ứng hóa các giải thuật trên cấu trúc dữ liệu động danh sách liên kết đơn:

  • Xây dựng khung danh sách: Khởi tạo danh sách rỗng (init_dsmh), tạo nút mới bằng toán tử cấp phát động new trong Get_mhNode, và chèn nút vào cuối danh sách liên kết (add_last).
  • Thao tác quản lý danh sách: Cài đặt hàm Nhapmonhoc, điều khiển vòng lặp nhập dữ liệu bằng ký tự xác nhận (C/K), xuất danh sách qua Print_Listmonhoc, và đếm số lượng nút hiện hữu qua hàm Countlist_monhoc.
  • Giải thuật tìm kiếm trên DSLK:
    • FindList_MaMH và FindList_TenMH: Duyệt con trỏ p từ head đến cuối danh sách (NULL), trả về địa chỉ con trỏ nút tìm thấy hoặc NULL nếu không tồn tại khóa tìm kiếm.
  • Giải thuật sắp xếp trên DSLK:
    • swap: Hàm hoán vị nội dung dữ liệu (infor) giữa hai biến mhType.
    • SelectionSortList: Sử dụng con trỏ p, q, min duyệt qua danh sách để tìm nút có mã môn học nhỏ nhất và hoán đổi dữ liệu với nút p.
    • InterchangeSortList và BubbleSortList: Cài đặt hai vòng lặp lồng nhau qua các con trỏ i và j duyệt tuần tự các nút, thực hiện swap dữ liệu infor khi gặp nghịch thế về chuỗi mã môn học.
    • InsertionSortList: Duyệt nút hiện tại và tìm kiếm vị trí thích hợp từ đầu danh sách để hoán đổi giá trị trường mã môn học.
    • QuickSortList: Phân tách danh sách ban đầu thành hai danh sách con độc lập $l_1$ và $l_2$ dựa trên nút chốt $x$ (lấy từ phần tử đầu), đệ quy sắp xếp $l_1$ và $l_2$, sau đó nối các danh sách $l_1 \rightarrow x \rightarrow l_2$ để tái lập danh sách hoàn chỉnh.
  • Mọi giải thuật đều có hàm main kiểm thử độc lập và chụp ảnh kết quả màn hình (từ Hình 3.1 đến Hình 3.10).

Kết quả và đóng góp

Kết quả chính

  • Báo cáo đã xây dựng thành công bộ chương trình nguồn C++ hoàn chỉnh gồm 26 hàm chức năng xử lý dữ liệu môn học.
  • Triển khai thành công 7 thuật toán sắp xếp trên mảng cấu trúc (Shaker, Selection, Interchange, Bubble, Insertion, Quick, Merge Sort) và 5 thuật toán sắp xếp trên danh sách liên kết đơn (Selection, Interchange, Bubble, Insertion, Quick Sort).
  • Thực nghiệm kiểm tra từng thuật toán thông qua hàm main với các bộ dữ liệu thử nghiệm ($n=3$ và tập dữ liệu mẫu $n=10$), hiển thị kết quả tìm kiếm và danh sách sau sắp xếp trên màn hình console, được chụp lại bằng 23 hình ảnh minh chứng trong tài liệu (Hình 2.1 đến Hình 2.13 và Hình 3.1 đến Hình 3.10).

Đóng góp kỹ thuật của đồ án

  • Hệ thống hóa phương pháp chuyển đổi thuật toán từ cấu trúc lưu trữ mảng tĩnh (truy xuất qua chỉ số mảng) sang cấu trúc con trỏ động danh sách liên kết (truy xuất qua liên kết con trỏ next).
  • Minh họa rõ nét hai kỹ thuật hoán đổi trên danh sách liên kết: hoán đổi trực tiếp vùng dữ liệu chứa trong nút (infor) bằng hàm swap (đối với Selection, Interchange, Bubble, Insertion Sort) và kỹ thuật ngắt/nối liên kết con trỏ vật lý để chia tách - sáp nhập danh sách (đối với Quick Sort trên DSLK).

Hạn chế và hướng nghiên cứu tiếp

Dựa trên các nội dung và phạm vi nghiên cứu được trình bày trong tài liệu:

  • Hạn chế:
    • Mã nguồn trong văn bản còn tồn tại một số lỗi cú pháp in ấn hoặc lỗi biên dịch phát sinh trong quá trình soạn thảo (ví dụ: việc dùng cin.MaMH thay vì toán tử nhập chuẩn cin >>, thiếu đối số thứ hai trong hàm strcmp ở một vài đoạn code mẫu như trong ShakerSort, BubbleSort, InsertionSort).
    • Phạm vi kiểm thử trong các hàm main đa số thực hiện trên tập kích thước nhỏ ($spt = 3$) và nhập thủ công từ bàn phím, chưa thực hiện đo đạc thời gian thực thi cụ thể (Execution Time / Benchmarking) trên tập dữ liệu lớn.
    • Chương III chưa triển khai thuật toán Merge Sort và thuật toán Binary Search trên cấu trúc danh sách liên kết đơn.
  • Hướng mở rộng được đề xuất theo phạm vi đề tài:
    • Hoàn thiện xử lý ngoại lệ và chuẩn hóa cú pháp các thao tác chuỗi tiếng Việt.
    • Mở rộng cài đặt các giải thuật tìm kiếm và sắp xếp nâng cao trên các cấu trúc cây (Cây nhị phân tìm kiếm - BST, Cây AVL) và danh sách liên kết đôi.

Giá trị tham khảo

Đồ án có giá trị thực tiễn và tính tham khảo cao trong môi trường học thuật:

  • Đối tượng sử dụng: Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm, Hệ thống Thông tin đang theo học các học phần Cấu trúc Dữ liệu và Giải thuật, Lập trình C/C++ nâng cao.
  • Nội dung tham khảo hữu ích:
    • Mẫu cài đặt thuật toán Quick Sort trên danh sách liên kết đơn bằng phương pháp phân rã danh sách con ($l_1, l_2$) và ghép nối con trỏ.
    • Kỹ thuật xây dựng các hàm phân phối (Distribute) và trộn mảng (Merge) trong thuật toán Merge Sort không đệ quy trên mảng cấu trúc.
    • Cách thức tổ chức một báo cáo đồ án kỹ thuật theo từng bước: Khai báo cấu trúc $\rightarrow$ Xây dựng chương trình con $\rightarrow$ Cài đặt hàm Main kiểm thử $\rightarrow$ Chụp kết quả chạy thực tế.

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

1. Đối tượng môn học trong đồ án được định nghĩa gồm những thuộc tính nào và kiểu dữ liệu tương ứng là gì?

Đối tượng môn học (MONHOC hoặc mhType) được thiết kế với 6 trường thông tin:

  • Mã môn học (MaMH): Mảng ký tự char[10] (chuỗi ký tự số dài tối đa 10 ký tự).
  • Tên môn học (TenMH): Mảng ký tự char[15] (chuỗi ký tự tên môn học dài tối đa 15 ký tự).
  • Số tín chỉ (SoTC): Kiểu số nguyên không âm int.
  • Giờ lý thuyết (GioLT): Kiểu số thực dương float.
  • Giờ thực hành (GioTH): Kiểu số thực dương float.
  • Tự học (Tuhoc): Kiểu số thực dương float.

2. Bảng dữ liệu mẫu (Bảng 1.1) trong Chương I chứa những dữ liệu môn học nào?

Bảng dữ liệu mẫu gồm 10 môn học với các thông số:

  • 1: Toán (12 tín chỉ, 5 giờ LT, 5 giờ TH, 2 giờ tự học).
  • 2: Van (11 tín chỉ, 4 giờ LT, 3 giờ TH, 1 giờ tự học).
  • 3: Anh (10 tín chỉ, 6 giờ LT, 2 giờ TH, 6 giờ tự học).
  • 4: Su (9 tín chỉ, 4 giờ LT, 3 giờ TH, 4 giờ tự học).
  • 5: Dia (7 tín chỉ, 5 giờ LT, 4 giờ TH, 3 giờ tự học).
  • 6: Tin (15 tín chỉ, 3 giờ LT, 1 giờ TH, 5 giờ tự học).
  • 7: Li (6 tín chỉ, 6 giờ LT, 2 giờ TH, 6 giờ tự học).
  • 8: Hoa (8 tín chỉ, 4 giờ LT, 5 giờ TH, 2 giờ tự học).
  • 9: Sinh (13 tín chỉ, 5 giờ LT, 4 giờ TH, 4 giờ tự học).
  • 10: The duc (4 tín chỉ, 7 giờ LT, 2 giờ TH, 1 giờ tự học).

3. Những thuật toán sắp xếp nào được cài đặt trong Chương II (trên mảng cấu trúc)?

Trong Chương II, tác giả đã cài đặt 7 thuật toán sắp xếp:

  1. Shaker Sort (sắp xếp theo MaMH).
  2. Selection Sort (sắp xếp theo MaMH).
  3. Interchange Sort (sắp xếp theo TenMH).
  4. Bubble Sort (sắp xếp theo MaMH).
  5. Insertion Sort (sắp xếp theo TenMH / ĐTB).
  6. Quick Sort (sắp xếp theo SoTC).
  7. Merge Sort (sắp xếp theo MaMH, sử dụng các hàm phụ trợ min, Distribute, Merge).

4. Nút và danh sách liên kết đơn được định nghĩa như thế nào trong Chương III?

Cấu trúc quản lý danh sách liên kết đơn gồm 2 kiểu dữ liệu:

  • Nút danh sách (mhnodeType): Gồm phần thông tin dữ liệu infor có kiểu mhType và một con trỏ next kiểu struct node* trỏ tới nút kế tiếp.
  • Quản lý danh sách (dsmh_List): Gồm hai con trỏ head và tail kiểu mhnodeType* trỏ tới nút đầu và nút cuối của danh sách.

5. Thuật toán Quick Sort trên danh sách liên kết đơn trong đồ án được cài đặt theo cơ chế nào?

Hàm QuickSortList chia danh sách ban đầu $l$ thành hai danh sách con $l_1$ và $l_2$ dựa trên nút chốt $x$ (lấy nút đầu danh sách $x = l \rightarrow head$). Các nút còn lại trong danh sách $l$ được duyệt và đưa vào cuối danh sách $l_1$ hoặc $l_2$ tùy thuộc vào khóa so sánh. Sau đó, hàm gọi đệ quy sắp xếp QuickSortList(l1) và QuickSortList(l2), rồi thực hiện nối danh sách theo thứ tự: toàn bộ danh sách $l_1$, nút chốt $x$, và toàn bộ danh sách $l_2$.


Kết luận

Báo cáo đồ án "Cấu Trúc Dữ Liệu và Giải Thuật tại Trường Đại Học Tài Chính - Marketing" của sinh viên Nguyễn Xuân Tỉnh đã hiện thực hóa đầy đủ các thao tác cơ bản, các giải thuật tìm kiếm tuyến tính/nhị phân cùng nhiều thuật toán sắp xếp kinh điển trên cả hai nền tảng mảng cấu trúc và danh sách liên kết đơn. Tài liệu trình bày chi tiết từ khâu khai báo kiểu dữ liệu, thiết kế thuật toán con, viết chương trình kiểm thử đơn vị qua hàm main đến việc ghi nhận hình ảnh kết quả thực thi. Đây là một tài liệu học tập và thực hành cơ sở hữu ích cho sinh viên chuyên ngành Công nghệ Thông tin trong việc nắm vững bản chất cài đặt cấu trúc dữ liệu và giải thuật bằng ngôn ngữ C/C++.