State Machines - PowerPoint PPT Presentation

1 / 18
About This Presentation
Title:

State Machines

Description:

A state machine is a different way of thinking about computation ... A 'pure' state machine only knows which state it is in--it has no other memory or knowledge ... – PowerPoint PPT presentation

Number of Views:58
Avg rating:3.0/5.0
Slides: 19
Provided by: DavidMa5
Category:

less

Transcript and Presenter's Notes

Title: State Machines


1
State Machines
2
What is a state machine?
  • A state machine is a different way of thinking
    about computation
  • A state machine has some number of states, and
    transitions between those states
  • Transitions occur because of inputs
  • A pure state machine only knows which state it
    is in--it has no other memory or knowledge

3
State machine I/O
  • State machines are designed to respond to a
    sequence of inputs, such as
  • The individual characters in a string
  • A series of external events
  • State machines may produce output (often as a
    result of transitions)
  • Alternatively, the result of a state machine
    may be the state it ends up in

4
Example I Even or odd
  • The following machine determines whether the
    number of As in a string is even or odd
  • Circles represent states arrows represent
    transitions
  • Inputs are the characters of a string
  • The output is the resultant state

5
Error states
  • Some state machines may have a error state with
    the following characteristics
  • An unexpected input will cause a transition to
    the error state
  • All subsequent inputs cause the state machine to
    remain in the error state

6
Simplifying drawings I
  • State machines can get pretty complicated
  • We can simplify the drawing by leaving out the
    error state
  • The error state is still part of the machine
  • Any input without a transition on our drawing is
    assumed to go to the error state
  • Another simplification use to indicate all
    other characters

7
Example II Nested parenthesis
  • The following example tests whether parentheses
    are properly nested (up to 3 deep)
  • How can we extend this machine to handle
    arbitrarily deep nesting?

8
Nested parentheses II
  • Question How can we use a state machine to check
    parenthesis nesting to any depth?
  • Answer We cant (with a finite number of states)
  • We need to count how deep we are into a
    parenthesis nest 1, 2, 3, ..., 821, ...
  • The only memory a state machine has is which
    state it is in
  • However, if we arent required to use a pure
    state machine, we can add memory (such as a
    counter) and other features

9
Nested parentheses III
  • This machine is based on a state machine, but it
    obviously is not just a state machine

10
The states of a Thread
  • A Thread is an object that represents a single
    flow of execution through a program
  • A Threads lifetime can be described by a state
    machine

11
German vocabulary tutor I
  • I once wrote a program to provide memorization
    drill on English-German vocabulary
  • Words were presented in English
  • The user had to type in the German translation
  • A word was considered learned when the user
    answered correctly three times in a row
  • Each word pair could be thought of as a state
    machine

12
German vocabulary tutor II
  • Whats the value in thinking of this as a state
    machine?
  • Answer By measuring the percentage correct from
    each state, I was better able to adjust the
    difficulty of the study session

13
Example Making numbers bold
  • In HTML, you indicate boldface by surrounding the
    characters with ltbgt ... lt/bgt

14
State machines in Java
  • In a state machine, you can have transitions from
    any state to any other state
  • This is difficult to implement with Javas loops
    and if statements
  • The trick is to make the state a variable, and
    to embed a switch (state) statement inside a loop
  • Each case is responsible for resetting the
    state variable as needed to represent
    transitions

15
Outline of the bold program
void run() int state NORMAL
for (int i 0 i lt testString.length() i)
char ch testString.charAt(i)
switch (state) case
NORMAL not inside a number
case NUMBER inside a number
if (state NUMBER)
result.append("lt/bgt")
16
The two states
case NORMAL if (Character.isDigit(ch))
result.append("ltbgt" ch) state
NUMBER break else
result.append(ch) break
17
Conclusions
  • A state machine is a good model for a number of
    problems
  • You can think of the problem in terms of a state
    machine but not actually do it that way (e.g.
    German vocabulary)
  • You can implement the problem as a state machine
    (e.g. making integers bold)
  • Best done as a switch inside some kind of loop
  • Pure state machines have some severe limitations
  • Java lets you do all kinds of additional tests
    and actions you can ignore these limitations

18
The End
Write a Comment
User Comments (0)
About PowerShow.com