I'm on a senior level theory course, majoring in Computer Science, and was tasked with designing an NFA. If I'm not mistaken, an NFA accepts an input if any path within the NFA can take the string and get to an accepting state. I understand and can create DFAs quite well, and understand the need for NFAs to express problems that would be significantly larger in an equivalent DFA. But I am slightly confused on how specific a NFA has to be to accept something.
For example, one of my homework problems is as follows:
Give an NFA for {w x w^R | x ∈ {0, 1}∗, w ∈ {0, 1}^2},
where, if I interpreted this correctly w^R is the reverse of the string w, x is some binary string of arbitrary length, and w is either "00", "01", "10, "11".
So essentially the NFA would accept a string that starts with w, has some string x, then ends in the reverse of w.
I already designed correctly, albeit very large DFA for this in a previous homework, but the exercise I'm sure is to teach me that NFAs are simpler to use in some contexts than DFAs. I came up with something like this for the answer:
http://s1056.photobucket.com/user/pcd132/media/Untitled_zps4317347c.jpg.html
This NFA accepts pretty much any non-empty binary string, so does it satisfy the question? I'm just confused about the concept of if it somehow, someway accepts something, it should be accepted. Or should I construct it in a way that only accepts the condition somehow, but nothing else? Thanks for the help and clarification if I'm not understanding this.