Q

Quản trị viên

Là một lập trình viên yêu công nghệ, thích viết blog để chia sẻ kiến thức, kinh nghiệm lập trình và những điều thú vị trong thế giới tech.

2300 bài viết · Website
Giải thuật 03/09/2026 8 phút

Hash nhanh hơn cây 32 lần — nhưng thua 7000 lần ở range query

O(1) < O(log n), nên hash luôn hơn cây? Tôi đo thử: tra cứu điểm hash nhanh hơn cây đỏ-đen 32 lần (16ns vs 518ns). Nhưng range query — tìm mọi phần tử >= x theo thứ tự — cây làm trong 7,8µs còn hash phải sort lại toàn bộ, 54,2ms. 'Cái nào nhanh hơn' là câu hỏi sai; chọn theo loại truy vấn.

Giải thuật 03/09/2026 9 phút

Vì sao mọi CSDL dùng B-tree chứ không cây nhị phân — dù cùng O(log n)

Cây nhị phân và B-tree đều O(log n) — vậy sao mọi cơ sở dữ liệu dùng B-tree? Tôi đo thử: tra cứu 4 triệu khóa, cây nhị phân đi 22 tầng (887ns), B-tree fanout 64 chỉ 4 tầng (153ns) — nhanh 5,8 lần. Mỗi tầng là một lần chạm bộ nhớ (hay một lần đọc đĩa), nên ít tầng thắng. Cùng O(log n), khác cơ số log.

Giải thuật 03/09/2026 8 phút

Chạy một lần rồi so là sai: cùng thao tác đo ra 99,8 hay 197,9 ns tùy nhiễu

Tưởng chạy một lần trước/sau là đủ biết một tinh chỉnh có tác dụng? Tôi đo thử: cùng một getpid không đổi gì, một phép đo có thể ra 99,8 hoặc 197,9 ns (chênh 2 lần) tùy nhiễu; chỉ min-của-nhiều-lần mới tái lập, và phải cô lập đúng một biến. Đây là nền của mọi con số trong sê-ri.