Blumer et al6 first defined terminology Directed Acyclic Word Graph (DAWG) in 1983. Appel and Jacobsen7 used the same naming for a different data structure in 1988. Independent of earlier work, Daciuk et al8 rediscovered the latter data structure in 2000 but called it DAFSA.
By allowing the same vertices to be reached by multiple paths, a DAFSA may use significantly fewer vertices than the strongly related trie data structure. Consider, for example, the four English words "tap", "taps", "top", and "tops". A trie for those four words would have 12 vertices, one for each of the strings formed as a prefix of one of these words, or for one of the words followed by the end-of-string marker. However, a DAFSA can represent these same four words using only six vertices vi for 0 ≤ i ≤ 5, and the following edges: an edge from v0 to v1 labeled "t", two edges from v1 to v2 labeled "a" and "o", an edge from v2 to v3 labeled "p", an edge v3 to v4 labeled "s", and edges from v3 and v4 to v5 labeled with the end-of-string marker. There is a tradeoff between memory and functionality, because a standard DAFSA can tell you if a word exists within it, but it cannot point you to auxiliary information about that word, whereas a trie can.
The primary difference between DAFSA and trie is the elimination of suffix and infix redundancy in storing strings. The trie eliminates prefix redundancy since all common prefixes are shared between strings, such as between doctors and doctorate the doctor prefix is shared. In a DAFSA common suffixes are also shared, for words that have the same set of possible suffixes as each other. For dictionary sets of common English words, this translates into major memory usage reduction.
Because the terminal nodes of a DAFSA can be reached by multiple paths, a DAFSA cannot directly store auxiliary information relating to each path, e.g. a word's frequency in the English language. However, if for each node we store the number of unique paths through that point in the structure, we can use it to retrieve the index of a word, or a word given its index.9 The auxiliary information can then be stored in an array.
Jan Daciuk, Stoyan Mihov, Bruce Watson and Richard Watson (2000). Incremental construction of minimal acyclic finite state automata. Computational Linguistics 26(1):3-16. ↩
Appel, Andrew; Jacobsen, Guy (1988). The World's Fastest Scrabble Program. Communications of the ACM, 31 (5): 572–578 ↩
Anselm Blumer, Janet Blumer, Andrzej Ehrenfeucht, David Haussler, Ross M. McConnell (1983). Linear size finite automata for the set of all subwords of a word - an outline of results. Bull Europ. Assoc. Theoret. Comput. Sci, 21: 12-20 ↩
Kowaltowski, T.; CL Lucchesi (1993). "Applications of finite automata representing large vocabularies". Software-Practice and Experience. 1993: 15–30. CiteSeerX 10.1.1.56.5272. /wiki/CiteSeerX_(identifier) ↩