CS30 - Spring 2015 - Class 23
Lecture notes
admin
- assignment 10
- lab tomorrow
- will play NIM a bit
- then work on assignment
- NIM tournament in class next Tuesday
talk at a high level about theoretical models of computation
deterministic finite automata (DFA)
- defined by 5 components
1) a set of states Q
2) the alphabet \sigma
3) q_0 \in Q, the start state
4) F subset Q, the accepting (or final) states
5) the transitions between states
- (Q x \sigma -> Q)
- a transition for each state for each letter in the alphabet to some other state
- a simple (but fairly powerful) model of computation
some DFA examples (found in
DFA_examples
)
- no_a: Strings of a's and b's with no a's
- b*
- even_a: Strings of a's with an even number of a's
- (aa)*
- 5a: Strings with a's that are multiples of 5
- (aaaaa)*
- one_a: Strings with only one a
- b*ab*
- start_a: all strings that start with a
- a(a|b)*
- start_end: Strings that start and end with the same letter
- (a(a|b)*a)|(b(a|b)*b)|a|b
- odd: odd length strings
- (a|b)((a|b)(a|b))*
- two_a: strings with two or more a's
- (a|b)*a(a|b)*a(a|b)*
- two_exact_a: strings with exactly two a's
- b*ab*ab*
- ab: some number of repetitions of ab
- (ab)*
non-deterministic finite automata (NFA)
- almost identical definition to DFA except:
- can have epsilon (or sometimes called lambda) transitions from one state to another
- doesn't read anything from the input, just transitions
- for a given state and input, can go to two or more states (rather than just a single one for DFAs)
- do not require that there is a transition for every alphabet letter for every state
- if you encounter a state without a transition for a particular letter, it does not accept
- tend to be a bit easier to work with than DFAs
- NFA's do not actually have any more expressive power
- in particular, for any NFA, there is a corresponding DFA that accepts the same language (i.e. same set of strings)
some NFA examples (found in
NFA_examples
)
- start_end_a: start and end with a
- a(a|b)*a
- 2_or_3_a: strings of a's that have lengths divisible by 2 OR 3
- (aa)*|(aaa)*
- end_aa: ends in two a's
- (a|b)*aa
- aa_bb: has either aa or bb as a substring
- (a|b)*(aa|bb)(a|b)*
regular language
- any language that can be described by a DFA (or an NFA)
- any language that can be described by a regular expression!