Abstract
Practice designing and working with NFAs.
Review the Finite Automata section of the Tutorial, specifically the sections titled “Construct and Run”, “Manipulating Transitions”, and "“Add a Trap State to DFA”. Also read “Convert to DFA”.
Look back at the example I gave of an NFA for the union of two languages.
Here is the NFA for the union.
Note: By default, JFLAP marks instantaneous transitions with a $\lambda$ instead of the $\epsilon$ used in your textbook. Both conventions are quite common. But for the sake of consistency, change the option in the JFLAP settings to use $\epsilon$.
Run this NFA on the following inputs, “Step” by step, observing how transitions take us to multiple states at once. Take note of which inputs are accepted.
Use JFlap to convert this to a DFA. Compare the results and the steps with what we went through in the lecture notes.
Run the same inputs as the previous step through this new DFA. Convince yourself that it does accept the inputs that the NFA did.
Revisit some of the DFA problems that you worked in the final step of the earlier JFLAP exercise. Try rewriting some of them as NFAs.
In many cases, an NFA will use fewer states and transitions than the corresponding DFA. Certainly, it should never need more states or transitions than a DFA (because every DFA is also an NFA that just happens to not use non-determinism).
You can think of this simplification as the pay-off for the slightly more complicated conceptual effort involved in understanding non-determinism.
Exercise 2.3.4 at the end of section 2.3 2 of your text suggests drawing a number of NFAs. Pick one or two of these and create them in JFLAP. Run a handful of inputs through each one to convince yourself that you have done so correctly.