Monday is the President’s Day holiday | |||
The first lab of next week is canceled because of the holiday, but the labs will be open on Tuesday for last-minute help on Proj2b | |||
Next Friday is the second Midterm | |||
A Survey is posted in “Announcements” | |||
Please answer it … it will improve the class |
Solving large problems is tough -- but approach them logically and you will succeed |
Large problems share many properties: | |||
They are daunting -- there’s so much to do! | |||
We don’t know were to begin | |||
Not sure we know all of the tasks that must be done to produce a solution | |||
Not sure we know how to do all of the parts -- new knowledge may be required | |||
Not sure it is within our capability -- maybe an expert is needed |
“Divide and conquer” is a political strategy, military strategy & IT strategy | |||
Top-level Plan -- | |||
1. Describe (in any language) a series of steps that produce a solution | |||
2. For each step, solve it or decompose further | |||
3. For steps needing decomposition, repeat 2 | |||
4. Assemble solutions and test correctness | |||
5. When solution fully assembled, evaluate |
We will step through the process, using Project 2 as an example: | |||
Problem decomposition is | |||
mostly common sense | |||
Process is not algorithmic | |||
Problem decomposition is | |||
to help you, so apply it as | |||
needed |
Specify (in any language) a series of steps that produce a solution | |||
For a huge problem the steps may at first be vague, but they can be (& must be) made more precise as the whole picture emerges | |||
The goal is an algorithm(s), so … | |||
List & describe the inputs | |||
List & describe the outputs | |||
Be guided in figuring out the steps by the need to transform the inputs into the outputs |
Orange Concentrate: | |||
Build Basic GUI | |||
Build mouse-sensed keypad | |||
Build the pattern array | |||
Set up control keys | |||
Write functions for ctrl keys | |||
Set up customizing keys | |||
Primp design & make cool | |||
PERT is Program Evaluation & Review Technique … developed in 1950s | |||
Diagrams show the dependencies visually |
For each step, solve it or decompose it further, i.e. apply same technique | |||
Most “top level” steps can’t be brained out, and need further decomposition | |||
“Top level” steps often seem huge, too | |||
The technique allows one to concentrate on only one problem at a time | |||
As before, focus on inputs, outputs, process to transform inputs into outputs |
“Build mouse-sensed keypad” | |||
“Build mouse-sensed keypad” | |||
Layout GIF 7x7 grid | |||
Build onClick e-handler | |||
Setup to change grid color | |||
… | |||
Define GIF prefetch array | |||
Prefetch brown & orange | |||
Build mouse e-handlers | |||
Update colors in e-handlers |
Assemble Solutions &Test Correctness | |||
Putting solutions together can be tough because of different assumptions made while solving the parts -- it always happens | |||
When working alone it is common to combine parts along the way and to test continuously | |||
Because of the need to test, pick a good order to solve the problems | |||
Proj2 solves & assembles parts together in a ‘good’ order | |||
Proj2 solves & assembles parts together in a ‘good’ order | |||
Most parts of Project 2 can | |||
use the developing solution | |||
for testing -- that’s ‘good’ | |||
Notice step 2B4 in Project 2 | |||
was included simply to test | |||
Parts mismatch is common | |||
problem, but not in Proj2 | |||
Large problems can be solved by the ‘divide and conquer’ technique | |||
The process is “top down” -- get a top level solution even if it is vague, imprecise | |||
Whenever you cannot produce a solution to a step directly, reapply the technique | |||
The start and first several steps will be daunting … but the process works! | |||
Get part of solution working quickly if possible |