Câu hỏi này chỉ đơn thuần là về thuật toán. Trong mã giả là như thế này:Thuật toán nhanh nhất để tìm một chuỗi trong một chuỗi các chuỗi?
A = Array of strings; //let's say count(A) = N
S = String to find; //let's say length(S) = M
for (Index=0; Index<count(A); Index++)
if (A[Index]==S) {
print "First occurrence at index\x20"+Index;
break;
}
này cho vòng lặp đòi hỏi so sánh chuỗi N lần (hoặc byte so sánh N * M lần, O (N * M)). Điều này là xấu khi mảng A có nhiều mục hoặc khi chuỗi S quá dài.
Bất kỳ phương pháp nào tốt hơn để tìm ra sự xuất hiện đầu tiên? Một số thuật toán tại O (K * logK) là OK, nhưng thích hợp hơn ở O (K) hoặc tốt nhất tại O (logK), trong đó K là N hoặc M.
Tôi không ngại thêm vào một số cấu trúc khác hoặc thực hiện một số xử lý dữ liệu trước vòng lặp so sánh.
"Khi chuỗi S quá dài" không liên quan, trừ khi có nhiều chuỗi trong 'A 'với cùng độ dài và một tiền tố dài giống hệt nhau. (Kiểm tra bình đẳng chuỗi có thể chấm dứt ngay lập tức nếu độ dài khác nhau, hoặc ngay sau khi không phù hợp được tìm thấy khi đi qua chúng.) – Dougal
Tại sao bạn sử dụng '\ x20' thay vì một khoảng trắng? Tôi tò mò :-) –
oh có, thời gian so sánh phụ thuộc nhiều hơn vào độ dài của các chuỗi trong mảng A – jondinham