Wiki › Thuật toán › Thuật toán xâu

Thuật toán xâu

huunguyen huunguyen Updated Tháng 9. 29, 2026 Đọc 2 phút 4 lượt xem

Trang này là điểm xuất phát cho nhóm thuật toán xâu. Mỗi kỹ thuật có trang riêng với trực giác, ví dụ chạy tay, lỗi thường gặp và bài tập (kể cả đề VOI nếu có).

Lộ trình học gợi ý

  1. Nền tảng so khớp: Hash xâu để so sánh hai xâu con trong O(1), Hàm tiền tố và KMP và Z-function để tìm pattern, chu kỳ, border trong thời gian tuyến tính.
  2. Tập xâu và từ điển: Trie cho tập từ và XOR lớn nhất, Aho-Corasick khi cần tìm nhiều pattern cùng lúc.
  3. Palindrome: Manacher cho palindrome dài nhất tại mọi tâm, Palindrome Tree cho mọi palindrome con phân biệt.
  4. Cấu trúc hậu tố: Suffix Array (kèm LCP) và Suffix Automaton cho các bài đếm xâu con, xâu con chung dài nhất.

Chọn kỹ thuật nào?

  • Chỉ cần so sánh hai xâu con nhiều lần, hoặc xâu có cập nhật: hash (ghép với Fenwick hoặc segment tree khi có cập nhật điểm).
  • Tìm một pattern, chu kỳ ngắn nhất, border: KMP hoặc Z-function; cả hai đều tất định, không lo đụng độ như hash.
  • Nhiều pattern trên một văn bản: Aho-Corasick.
  • Câu hỏi về mọi xâu con (đếm xâu con phân biệt, thứ tự từ điển, xâu con chung): suffix array hoặc suffix automaton.

Các trang trong nhóm

Thuật toán Thời gian Ứng dụng Trang
Hash xâu O(N) dựng, O(1) mỗi truy vấn So sánh xâu con, LCP bằng chặt nhị phân, hash có cập nhật Hash xâu
Hàm tiền tố, KMP O(N+M) Tìm pattern, chu kỳ, automaton KMP KMP
Z-function O(N) Tìm pattern, chu kỳ, so tiền tố Z-function
Trie O(‖s‖) mỗi thao tác Từ điển, XOR lớn nhất Trie
Aho-Corasick O(∑‖pi‖+‖text‖) Tìm nhiều pattern đồng thời Aho-Corasick
Manacher O(N) Palindrome dài nhất Manacher
Palindrome Tree O(N) Mọi palindrome con phân biệt Palindrome Tree
Suffix Array O(NlogN) Xâu con, LCP, thứ tự từ điển Suffix Array
Suffix Automaton O(N) Đếm xâu con phân biệt, số lần xuất hiện, LCS Suffix Automaton
Trang này có hữu ích không? Đăng nhập để trả lời

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0