Problem Decomposition and Abstraction
Mar 23, 2016
Problem Decomposition and Abstraction
Problem Solving
Which one is easier: Solving one big problem, or Solving a number of small problems?
Problem Solving
Which one is easier: Solving one big problem, or Solving a number of small problems?
What are the advantages of small problems?
Problem Solving
Which one is easier: Solving one big problem, or Solving a number of small problems?
What are the advantages of small problems? Easier to solve Easier to ensure the solution is correct
In order to have a number of small problems What do we need to do first?
Common Mistake
Dive into the details (e.g. at the level of Java instructions)
Do not consider decomposing the problem first “in English”
Tic-tac-toe
We would like to build a tic-tac-toe game that a human can play against another
How would you decompose the problem?
Problem Decomposition
1. Display the board2. Make a move3. Decide winner
Can these smaller problems be independently solved? tested?
Decide Winner
Seems to be complicated, what can we do?
Decide Winner
Seems to be complicated, what can we do? Decompose!
Decide Winner
Seems to be complicated, what can we do? Decompose!
a. Check 3 rowsb. Check 3 columnsc. Check 2 diagonals
Can they be independently Solved? Tested?
Top-down Decomposition
1. Display the board2. Make a move3. Decide winner
a. Check 3 rowsb. Check 3 columnsc. Check 2 diagonals
Make a Move
Decompose:
Make a Move
Decompose: Ask for a move Update the board
Top-down Decomposition
1. Display the board2. Make a move
a. Ask for a moveb. Update the board
3. Decide winnera. Check 3 rowsb. Check 3 columnsc. Check 2 diagonals
Two levels of abstraction
When to stop decomposing a problem?
When to stop decomposing a problem?
Until you’re confident you can solve the smaller problems correctly Different for different people
Make a Move
Recall there are two human players
Who makes a move?
Make a Move
Do we want To break it down to
2 smaller problems, each for a player
One problem that is flexible for the 2 players
?
Make a Move
Do we want To break it down to
2 smaller problems, each for a player
One problem that is flexible for the 2 players
Prefer one problem that is flexible for 2 situations The 2 smaller problems are very similar Solving 2 similar problems is tedious
Rewriting almost the same instructions
Make a Move
makeAMove(player) Similar to sqrt(x) makeAMove can be used with different players
Problem abstraction via parameters
Summary
Problem decomposition Top-down
Decompose until you’re confident you can solve the small problems correctly.
Summary
Problem decomposition Top-down
Decompose until you’re confident you can solve the small problems correctly.
Problem abstraction Different levels of abstraction in top-down
decomposition More general to more specific
Increase abstraction via parameters Allow the solution to be reused in different situations Avoid repeatedly writing almost the same instructions