@techtipsvn
Thuật toán sắp xếp · Counting sort

Counting sort phá giới hạn n log n bằng cách không so sánh gì cả

Giới hạn đó chỉ áp cho thuật toán so sánh. Counting sort thì đếm.

2026-08-1908 slide2 phút đọcGiải thích
Slide bìa: Counting sort phá giới hạn n log n bằng cách không so sánh gì cảSlide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8
cuộn, vuốt, hoặc phím ←→01 / 08

Cùng một bài, đọc bằng chữ. Nhanh hơn và tìm lại được bằng Ctrl+F.

Đếm, rồi rải lại

Có 1000 sinh viên, điểm từ 0 đến 10. Đi một lượt đếm mỗi mức điểm có bao nhiêu người, rồi rải lại theo thứ tự điểm. Không có phép so sánh nào giữa hai sinh viên.

Ví dụ

1000 phần tử, 11 ô đếm. Một lượt đếm, một lượt rải.

Vì sao nó vượt được giới hạn

Định lý n log n nói về thuật toán chỉ hỏi được một câu: a có trước b không. Counting sort nhìn thẳng vào giá trị và dùng nó làm chỉ số mảng, nên định lý không áp cho nó.

k là độ rộng, không phải n

k bằng giá trị lớn nhất trừ nhỏ nhất cộng một. Điểm 0 đến 10 thì k bằng 11, dù có một triệu sinh viên. Chi phí là O(n + k), nên k nhỏ mới là chỗ nó thắng.

Khi nào đừng dùng

Khoá là ID người dùng chạy tới hàng tỉ: k lớn hơn n hàng nghìn lần, và bạn cấp phát một mảng đếm khổng lồ gần như rỗng. k xấp xỉ n thì vẫn tốt.

Nó là nền của radix sort

Radix sort sắp theo từng chữ số, mỗi vòng gọi counting sort trên đúng một chữ số. Vòng nào cũng phải ổn định, nếu không thứ tự các vòng trước bị phá mất.

Counting sort: được gì, mất gì

Ưu điểm

O(n + k), thắng khi khoảng giá trị hẹp

Ổn định nếu cài đúng, dùng được cho radix

Không đệ quy, code ngắn và đọc thẳng

Nhược điểm

Chỉ dùng được khi khoá là số nguyên

Tốn bộ nhớ O(k), khoảng rộng là hỏng

Không sắp được theo thứ tự tự định nghĩa

Lưu lại để chạy tay sau

Loạt bài thuật toán sắp xếp cho dev Việt Nam.

techtipstechtipsvnthuattoanlaptrinhhoclaptrinh
Đọc tiếp

Bài khác cùng chủ đề

Slide bìa: Hai lỗi Critical cho người lạ chạy code trên server Next.js: lên 16.4.1 hoặc 15.5.2809

Hai lỗi Critical cho người lạ chạy code trên server Next.js: lên 16.4.1 hoặc 15.5.28

Tin2′ đọc16.10
Slide bìa: Caveman: một lệnh để Claude Code trả lời ngắn, và lúc nào thì không đáng cài08

Caveman: một lệnh để Claude Code trả lời ngắn, và lúc nào thì không đáng cài

tutorial1′ đọc16.10
Slide bìa: Code Go không đọc body chậm gần 5 lần qua HTTP/1, Go 1.27 tự sửa10

Code Go không đọc body chậm gần 5 lần qua HTTP/1, Go 1.27 tự sửa

Giải thích2′ đọc15.10
Slide bìa: Node.js vá lỗi bảo mật mức HIGH ngày 21/10: máy bạn đang chạy bản nào?07

Node.js vá lỗi bảo mật mức HIGH ngày 21/10: máy bạn đang chạy bản nào?

Tin1′ đọc15.10

Mỗi ngày một bài mới.

Mẹo, giải thích và tin công nghệ cho sinh viên và dev mới đi làm. Một người viết, đăng đều.

Bài cũng được đăng lên TikTok, ở dạng slide.

TikTok@techtipsvn