Nếu regexps của bạn không phải là tầm thường đơn chuỗi, và bạn chăm sóc cho hiệu quả, bạn muốn để đại diện cho họ trong một đơn NFA (nondeterministic finite-state automaton, với giá trị trong trạng thái cuối. Nếu có thể cho một đầu vào khớp với nhiều hơn một regexp, thì các trạng thái cuối cùng sẽ cần một tập các giá trị.
Tại thời điểm này, bạn đã sẵn sàng xem xét tối ưu hóa automaton. Nếu nó có thể được xác định thực tế (điều này cho bạn một DFA có thể lớn hơn theo cấp số nhân so với NFA), thì bằng mọi cách làm điều đó. Một khi bạn có DFA, bạn có thể hiệu quả (và duy nhất đến đẳng cấu) giảm thiểu nó (nhưng vì bạn có giá trị trong trạng thái cuối cùng của bạn, cần phải sửa đổi rõ ràng usual algorithm).
Ngoài ra còn có các kỹ thuật để giảm thiểu NFA trực tiếp. Ví dụ, nếu hai trạng thái có cùng một bộ hậu tố ({(phần còn lại của chuỗi, giá trị)}) chúng tương đương nhau và có thể được kết hợp. Tương đương trong một NFA tuần hoàn có thể được thực hiện thông qua hash-consing bắt đầu từ các trạng thái cuối cùng.
Nguồn
2009-09-10 23:07:48
Dựa trên câu trả lời cho đến giờ, bạn có thể muốn cung cấp thêm chi tiết trong câu hỏi của bạn về ứng dụng cụ thể của bạn. –
Khoảng bao nhiêu biểu thức trong một tấn? Văn bản họ sẽ so khớp bao nhiêu? Văn bản mới sẽ được cung cấp thường xuyên như thế nào? Làm thế nào nhanh chóng làm kết quả cần phải được trả lại? – TrueWill