Lập trình 22/09/2026 8 phút

Dijkstra với heap: vì sao đổi cách tìm đỉnh gần nhất biến 3,5 giây thành 17 mili giây

Dijkstra tìm đường đi ngắn nhất, nhưng tốc độ của nó phụ thuộc vào một chi tiết: tìm đỉnh gần nguồn nhất bằng cách nào. Bài này đo thật trong go-lab: bản quét mảng O(V²) mất 3,55 giây trên đồ thị thưa 50.000 đỉnh, còn bản dùng heap O((V+E)log V) chỉ 16,9 ms — nhanh hơn 210 lần, cùng kết quả. Nhưng trên đồ thị dày, bản mảng lại cạnh tranh.

Lập trình 22/09/2026 7 phút

Cùng O(n²) nhưng chậm hơn 14 lần: phần hiệu năng mà Big-O không nhìn thấy

Hai vòng lặp cùng số phép tính, cùng độ phức tạp O(n²), nhưng một cái chậm hơn cái kia 14 lần — chỉ vì thứ tự truy cập bộ nhớ. Bài này đo thật trong go-lab: duyệt mảng 2D theo cột chậm hơn theo hàng tới 13,9 lần vì cache. Nhưng cũng trung thực: AoS vs SoA và truy cập ngẫu nhiên lại gần như không khác, vì CPU hiện đại giỏi giấu độ trễ cho mẫu đều đặn.

Lập trình 22/09/2026 7 phút

Big-O không phải lý thuyết suông: đo thật để thấy nó hiện ra

Ai cũng học Big-O rồi quên, vì nó nghe như toán hàn lâm. Nhưng Big-O là thứ ĐO được. Bài này chạy thật trong go-lab: khi N tăng gấp đôi, O(n) ×2, O(n²) ×4, còn O(log n) gần như đứng yên. Chính tỉ lệ 'nhân đôi N' đó là cách nhận ra độ phức tạp của code bạn — và lý do một hàm O(n²) chạy ngon lúc dev lại làm sập hệ thống lúc scale.

Lập trình 22/09/2026 6 phút

Tổng kết: khung tư duy chọn thuật toán — khi nào Big-O quyết định, khi nào thực tế thắng

Mười một bài, mười một phép đo thật trong Docker. Bài tổng kết này nối tất cả thành một bảng số liệu và một checklist thực dụng: cần gì thì dùng cấu trúc nào, khi nào Big-O là yếu tố sống còn (heap top-k 247 lần, Dijkstra 210 lần, memo 4 triệu lần), và khi nào hằng số với cache mới là thứ quyết định (insertion thắng quicksort ở N nhỏ, duyệt cột chậm 14 lần dù cùng O(n²)).

Lập trình 22/09/2026 7 phút

Inverted index: vì sao Elasticsearch tìm toàn văn nhanh hơn LIKE của SQL

LIKE '%từ%' trong SQL phải quét từng dòng — chậm dần khi dữ liệu lớn. Elasticsearch lật ngược bài toán bằng inverted index: mỗi từ trỏ thẳng tới danh sách tài liệu chứa nó. Bài này đo thật trên es-lab với 100.000 tài liệu: truy vấn match dùng inverted index chạy 1 ms, còn wildcard quét từ điển term mất 8-10 ms — cùng kết quả, và khoảng cách lớn dần theo quy mô.

Lập trình 22/09/2026 7 phút

Analyzer trong Elasticsearch: vì sao tìm 'fox jump' lại khớp 'The foxes are jumping'

Inverted index tra theo từ, nhưng 'từ' là gì do analyzer quyết định — và nó quyết luôn truy vấn của bạn khớp hay trượt. Bài này đo thật trên es-lab: standard analyzer tách và hạ chữ thường, english analyzer còn stemming (foxes thành fox), keyword giữ nguyên cả chuỗi. Xem token thật sinh ra, vì sao Email khớp email, và cách edge_ngram tạo autocomplete.