Bài toán chuỗi thường gặp
Ba mẫu bài chuỗi kinh điển — kiểm tra palindrome, anagram, và đếm ký tự — cùng kỹ thuật hai con trỏ và bảng đếm.
Ba mẫu bài chuỗi kinh điển — kiểm tra palindrome, anagram, và đếm ký tự — cùng kỹ thuật hai con trỏ và bảng đếm.
Vì sao bảng băm tra cứu O(1) trung bình, hàm băm biến khóa thành chỉ số như thế nào, và đây là nền của dict/set.
Hai cách lưu đồ thị trong code — ma trận kề và danh sách kề — cùng đánh đổi bộ nhớ và tốc độ.
Khái niệm cây, cây nhị phân, và bốn cách duyệt — tiền/trung/hậu thứ tự (DFS) và theo lớp (BFS).
Vì sao cần tự cân bằng, hệ số cân bằng của AVL, và phép xoay giữ chiều cao cây luôn ~log n.
Cây đỏ-đen là BST tự cân bằng dùng quy tắc tô màu; cân bằng "đủ tốt" với ít xoay hơn AVL, nên được dùng trong nhiều thư viện thực tế.
BST giữ tính chất trái nhỏ hơn gốc nhỏ hơn phải, cho tìm/chèn/xóa O(log n) khi cân bằng — và O(n) khi suy biến.
Chuỗi là mảng của ký tự, tính bất biến (immutable), các thao tác cơ bản và bẫy hiệu năng khi nối chuỗi trong vòng lặp.
Danh sách liên kết đôi (có prev) cho phép đi ngược; danh sách vòng nối đuôi về đầu — ứng dụng và đánh đổi.
Danh sách liên kết đơn là gì, khác mảng ra sao, vì sao không có truy cập ngẫu nhiên và duyệt là O(n).
Deque cho phép thêm/xóa cả hai đầu O(1); bộ đệm vòng (circular buffer) là hàng đợi kích thước cố định ghi đè phần tử cũ nhất.
Hàng đợi hoạt động theo FIFO (vào trước ra trước), vì sao không nên dùng list.pop(0), và cách cài đúng bằng deque.
Hệ số tải đo độ đầy của bảng băm; khi quá đầy thì rehash (mở rộng); vì sao trung bình O(1) nhưng xấu nhất O(n).
Heap là cây nhị phân đầy đủ giữ phần tử nhỏ (hoặc lớn) nhất ở gốc, cho lấy min/max O(1) và thêm/xóa O(log n).
Đồ thị là đỉnh nối bằng cạnh; phân loại có hướng/vô hướng, có trọng số, có chu trình, và ví dụ thực tế.
Chèn và xóa nút bằng cách đổi con trỏ, và thuật toán đảo ngược danh sách liên kết kinh điển với ba con trỏ.
Mảng 2 chiều (ma trận, lưới), cách đánh chỉ số hàng–cột, duyệt và độ phức tạp O(hàng × cột).
Mảng là gì, vì sao truy cập theo chỉ số là O(1), và khác biệt giữa mảng tĩnh (cố định) với mảng động (tự lớn lên).
So sánh toàn diện mảng và danh sách liên kết về truy cập, thêm/xóa, bộ nhớ và tính cục bộ cache để biết khi nào chọn cái nào.
Ngăn xếp hoạt động theo LIFO (vào sau ra trước), các thao tác push/pop/peek đều O(1), và cách cài đặt.
Khi cần vừa truy vấn khoảng vừa cập nhật điểm nhanh, segment tree và Fenwick (BIT) cho cả hai O(log n).
Ba mẫu giải bài dùng set/dict — kiểm tra tồn tại, đếm tần suất, và tra cứu bù (two-sum) — hạ độ phức tạp từ O(n²) xuống O(n).
Độ phức tạp của truy cập, tìm kiếm, chèn, xóa trên mảng — và vì sao chèn/xóa ở đầu hay giữa tốn O(n).
Trie lưu các chuỗi theo cây ký tự, cho tìm kiếm và gợi ý theo tiền tố cực nhanh — nền của autocomplete.