I am working on finite state machine pruning, a problem that requires me to build finite state machines (in the manner of the Aho Corasic algorithm) to match an evolving input string against a set of suffixes. If a match occurs, the search is aborted (i.e. we don't care about outgoing transitions from accepting states). The alphabet size is small with $|\Sigma|=4$ in the model problem I am working with. The pattern length is bounded at a length of about 30 and the number of suffixes is very large with up to $10^9$ suffixes to match against in the cases I am interested in.
If the algorithm of Aho and Corasick or a variant of it is used to construct this DFA, a suboptimal DFA results that is frequently much larger than it could be. Is there an efficient algorithm to directly generate a minimal DFA from the set of input patterns?
I have considered using Hopcroft's algorithm to minimise the DFA, but the amount of extra storage required to hold the set data structures seems prohibitive. Ideally an approach that consumes at most $n|\Sigma|+o(n)$ words of storage for an input of suffixes totalling $n$ characters could be found.