Bài viết mới nhất

Tổng 2300 bài
Lập trình 22/09/2026 6 phút

Tối ưu regex: bốn mẹo đo được, và một mẹo biến 2 giây thành 0.33 micro-giây

Regex chậm hiếm khi vì máy yếu — thường vì mẫu viết chưa khéo. Bài này đo thật bốn kỹ thuật: biên dịch một lần (nhanh 1.84x), lớp phủ định thay lazy (chênh nhỏ nhưng an toàn hơn), atomic/possessive chặn backtracking (2222ms xuống 0.33µs), và neo để loại sớm (68ms xuống 0.21µs, nhanh hơn 329 nghìn lần). Kèm nguyên tắc quan trọng nhất: đo trước khi tối ưu.

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

Regex thực chiến: phân tích log bằng grep -P, ripgrep và awk — và khi nào nên dừng

Regex sáng nhất khi mổ log. Bài này đo thật trên 500 dòng access.log: grep -oP trích IP và status code, pipe qua sort|uniq -c xếp hạng (200 chiếm 359, 404 chiếm 75), ripgrep lọc request chậm và POST lỗi, awk tính latency trung bình 405ms. Và ripgrep quét 40MB nhanh gấp đôi grep. Kèm nguyên tắc quan trọng nhất và tổng kết cả loạt 12 phần.

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

Entropy và giới hạn nén: vì sao dữ liệu ngẫu nhiên không thể nén được

Mọi thuật toán nén đều đụng một bức tường toán học: entropy Shannon. Bài này đo thật: chuỗi lặp một ký tự (entropy 0) gzip vụt còn 123 byte từ 90.000; nhưng 90.000 byte ngẫu nhiên (entropy 7.998 bit/byte) gzip làm nó phình lên 90.048 byte — không nén nổi. Và vì sao gzip nén text xuống dưới cả giới hạn entropy order-0: nó khai thác thêm sự lặp lại.

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

Run-length encoding: thuật toán nén đơn giản nhất, thắng đậm và thua thảm

RLE thay một dãy ký tự lặp bằng cặp (số lần, ký tự) — đơn giản đến mức viết trong vài dòng. Bài này tự cài RLE và đo thật: nó nén chuỗi lặp 90.000 byte còn 708 byte (127x), bitmap còn 93.5x, nhưng làm text tiếng Anh PHÌNH gấp đôi (93.800 thành 184.800 byte). Vì sao — và vì sao RLE vẫn là viên gạch nền của JPEG và nhiều thuật toán hiện đại.

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

Huffman coding: gán mã ngắn cho ký tự phổ biến, tiến sát giới hạn entropy

Vì sao dùng 8 bit cho mọi ký tự khi 'e' xuất hiện nhiều hơn 'z' hàng trăm lần? Huffman gán mã ngắn cho ký tự phổ biến, mã dài cho ký tự hiếm. Bài này tự cài Huffman bằng heap và đo thật: ký tự phổ biến nhất (khoảng trắng) được mã 2 bit, ký tự hiếm 7 bit; và tổng thể đạt 4.3507 bit/byte — chỉ hơn sàn entropy order-0 (4.3244) đúng 0.026 bit. Vì sao nó không chạm đúng entropy, và arithmetic coding làm gì tốt hơn.

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

LZ77 và cửa sổ trượt: nén bằng cách trỏ về đoạn đã thấy, không viết lại

Huffman khai thác tần suất nhưng mù với lặp lại. LZ77 lo phần đó: gặp đoạn đã xuất hiện, nó thay bằng tham chiếu ngược (lùi N byte, chép M byte). Bài này tự cài LZ77 và đo thật: trên một đoạn văn lặp câu, một token thay được nguyên 51 byte (distance=49, length=51), 9 tham chiếu nuốt 119/184 byte. Đây là chữ L và Z của gzip, zstd và gần như mọi thuật toán nén hiện đại.