Python
8 bài viết
Nền tảng để chọn giải pháp đúng: ký hiệu Big-O, độ phức tạp thời gian & không gian, các lớp phổ biến (O(1)→O(n!)), cách ước lượng & đo, và vì sao độ phức tạp quyết định khi dữ liệu lớn.
Chọn đúng cấu trúc dữ liệu là nửa lời giải: array/list, hash map & set, stack & queue, linked list — đặc điểm, độ phức tạp thao tác, và use case thực tế (dedup, cache, lookup, hàng đợi xử lý).
Hai nhóm thuật toán nền tảng: các thuật toán sắp xếp (và vì sao O(n log n) là giới hạn so sánh), tìm kiếm nhị phân trên dữ liệu đã sắp, và use case thực tế (top-N, đối soát/merge, ranking, tìm ngưỡng).
Cấu trúc phân cấp & ưu tiên: cây nhị phân & BST, cây cân bằng (và tại sao B-tree là nền của index CSDL), heap/priority queue cho top-K và lập lịch, cùng trie — với use case thực tế.
Mô hình hoá quan hệ bằng đồ thị: biểu diễn (danh sách kề/ma trận), duyệt BFS/DFS, đường đi ngắn nhất (Dijkstra/BFS), thành phần liên thông & phát hiện chu trình, sắp xếp topo — với use case mạng gian lận, DAG pipeline, định tuyến.
Giải bài toán tối ưu bằng chia nhỏ có ghi nhớ: nguyên lý DP (overlapping subproblems, optimal substructure), memoization vs tabulation, so với greedy, và use case thực tế như edit distance cho fuzzy matching, knapsack, tối ưu.
Xử lý chuỗi & băm ở quy mô lớn: khớp mẫu (pattern matching), trie, hàm băm & bảng băm, Bloom filter, consistent hashing — với use case tìm kiếm, khử trùng, phân mảnh (sharding) và định tuyến.
Các thuật toán ít được dạy nhưng cực hữu ích khi làm dữ liệu quy mô lớn: streaming/one-pass, lấy mẫu (reservoir sampling), ước lượng gần đúng (HyperLogLog, Count-Min Sketch), rate limiting, và khi nào tự viết thuật toán vs dùng thư viện/CSDL.