DAWG stands for Directed Acrylic Word Graph and in addition to having a cool name they are pretty useful. DAWGs are used for quickly determining whether or not a particular word is in a set of words. In short: very fast set inclusion. An additional side effect is that DAWGs use less memory that a straight dictionary list. There is also a variant of the DAWG called a compact DAWG that further reduces the memory footprint of the structure.
What are the uses of a DAWG? The first thing that comes to mind is spellcheck. A DAWG containing all the words in a dictionary can very quickly tell you if an input word is in that dictionary. However, a DAWG can't help you recommend a corrected spelling to the user since it does exact matching.
Another application might be in protocol parsing. If you were parsing a protocol that had 30 or 40 different commands a DAWG could be useful in determining if a particular packet was well-formed and part of the protocol.
For a completely unscientific reference point I wrote up a quick and dirty DAWG implementation in C++ and did some test with it using a 125,000 word dictionary file. I did both memory and performance tests and compared them to equivalent operations using an std::set. What I found was that the DAWG was about 2x as fast as std::set for word lookups and used about 5% less memory. A correct implementation of a Compact DAWG would see much better gains in memory.
What are your thoughts on how DAWGs could be used?
For more info see:
http://www.wutka.com/dawg.html
http://www.nist.gov/dads/HTML/directedAcyclicWordGraph.html