Trie (cây tiền tố)
Trie (cây tiền tố) lưu một tập từ theo cây ký tự — các từ cùng tiền tố dùng chung đường đi. Nó cho tìm từ và gợi ý theo tiền tố (autocomplete) cực nhanh, không phụ thuộc số lượng từ.
1. Trực quan: cây chia theo từng ký tự
Mỗi cạnh là một ký tự; mỗi đường đi từ gốc tạo thành một tiền tố. Từ kết thúc được đánh dấu (★). Các từ cùng tiền tố chia sẻ phần đầu.
(gốc)
│ a
┌─┴─┐
│ a │
└─┬─┘
│ n
┌─┴─┐
│ an★│ "an" là một từ
└─┬─┘
│ d
┌─┴─┐
│and★│ "and" cũng là từ; dùng chung "an"
└───┘
"an" và "and" dùng chung nhánh "a → n" → tiết kiệm và cho phép tìm theo tiền tố.
2. Cài đặt: mỗi nút là một dict con
3. Chạy debug: tìm "and" trong trie
Tìm = đi theo từng ký tự; tới cuối kiểm tra cờ kết thúc từ. Bước qua tìm "and":
4. Vì sao trie nhanh? O(L), không phụ thuộc N
Tìm/thêm một từ dài L chỉ tốn O(L) — đi L bước theo cây — bất kể trie chứa bao nhiêu từ
(N). So với duyệt danh sách N từ (O(N·L)) thì trie thắng lớn khi N lớn.
| Thao tác | Trie | Duyệt danh sách |
|---|---|---|
| Tìm một từ | O(L) | O(N·L) |
| Gợi ý theo tiền tố | O(L + số kết quả) | O(N·L) |
5. Dùng trie để làm gì?
- Autocomplete / gợi ý gõ (gõ "an" → gợi "an, and, ant").
- Kiểm tra từ điển / chính tả.
- Tìm theo tiền tố (danh bạ, tìm kiếm).
- IP routing, T9 trên điện thoại cũ.
Đánh đổi: trie tốn bộ nhớ hơn (nhiều nút nhỏ), nhưng tra cứu theo tiền tố thì vô địch.
6. Mẫu nhận diện
- "Gợi ý theo tiền tố", "autocomplete", "các từ bắt đầu bằng..." → trie.
- Tập từ lớn + tra cứu/tiền tố nhiều → trie thắng danh sách/set thường.
- Chỉ cần "từ này có trong tập không" (không cần tiền tố) →
setđơn giản là đủ.
7. 🎮 Trò chơi: Hiểu trie
8. Quiz kiểm tra nhanh
📚 Đọc thêm & Luyện tập
- William Fiset — Trie Data Structure — Triển khai Trie đầy đủ: thêm, tìm, xóa
- NeetCode — Trie (implement + bài LeetCode) — Implement & 2 bài kinh điển: Word Search II, Design Add/Search Words
- LeetCode — tag: Trie — Autocomplete, Word Search, Longest Common Prefix
9. Hoàn thành
…☑️ Tiếp theo: 2.5.7 — Segment tree & Fenwick (nâng cao).