I guess if we're talking about this kind of powerset (because why not) a really, really simple way of generating all subsets of an N-element set is to iterate an int/long/whatever from 0 to (2^N)-1 and convert the bitmap at each step into a subset, where a 1 bit indicates inclusion and 0 bit indicates exclusion.
Although the powerset discussed in the article is different than the one being discussed here, the most elegant powerset construction I've ever seen uses a method similar to what you described but abstracted away by the List monad in Haskell. The full implementation is:
You clearly didn't understand the article. The powerset construction you implemented turns a set into all subsets. The construction in the article turns one type of regular expression engine into another.
The terminology is a little confusing. It's better to call the NFA to DFA algorithm the "subset construction". The power set is a term which is used to denote the set of all subsets of a set. The states of a DFA are not all the possible subsets of the NFA; just those subsets which are generated by epsilon-closures on the state transitions. I.e. the set of DFA states consists of a subset of the power set of the NFA states.
10 comments
[ 3.1 ms ] story [ 38.7 ms ] thread