Title: Problem Solving and Algorithm Design
1Chapter 6
- Problem Solving and Algorithm Design
2Chapter Goals
- Determine whether a problem is suitable for a
computer solution - Describe the computer problem-solving process and
relate it to Polyas How to Solve It list - Distinguish between following an algorithm and
developing one - Describe the pseudocode constructs used in
expressing an algorithm - Use pseudocode to express an algorithm
3Chapter Goals
- Apply top-down design methodology to develop an
algorithm to solve a problem - Define the key terms in object-oriented design
- Apply object-oriented design methodology to
develop a collection of interacting objects to
solve a problem - Discuss the following threads as they relate to
problem solving information hiding, abstraction,
naming things, and testing
4Problem Solving
- Problem solving
- The act of finding a solution to a perplexing,
distressing, vexing, or unsettled question - How do you define problem solving?
5Problem Solving
- How to Solve It A New Aspect of Mathematical
Method by George Polya - "How to solve it list" written within the context
of mathematical problems - But list is quite general
We can use it to solve computer related problems!
6Problem Solving
- How do you solve problems?
- Understand the problem
- Devise a plan
- Carry out the plan
- Look back
7Strategies
- Ask questions!
- What do I know about the problem?
- What is the information that I have to process in
order the find the solution? - What does the solution look like?
- What sort of special cases exist?
- How will I recognize that I have found the
solution?
8Strategies
- Ask questions! Never reinvent the wheel!
- Similar problems come up again and again in
different guises - A good programmer recognizes a task or subtask
that has been solved before and plugs in the
solution - Can you think of two similar problems?
9Strategies
- Divide and Conquer!
- Break up a large problem into smaller units and
solve each smaller problem - Applies the concept of abstraction
- The divide-and-conquer approach can be applied
over and over again until each subtask is
manageable
10Algorithms
- Algorithm
- A set of unambiguous instructions for solving a
problem or subproblem in a finite amount of time
using a finite amount of data - Why must instructions be unambiguous?
- Why must time and data be finite?
11Computer Problem-Solving
Analysis and Specification Phase Analyze Specifi
cation Algorithm Development Phase Develop
algorithm Test algorithm Implementation
Phase Code algorithm Test algorithm Maintenance
Phase Use Maintain
Can you name a recurring theme?
12Phase Interactions
Should we add another arrow? (What happens if
the problem is revised?)
13Pseudocode
- Pseudocode
- A mixture of English and formatting to make the
steps in an algorithm explicit - Algorithm to Convert base-10 number to other bases
While ( the quotient is not zero ) Divide the
decimal number by the new base Make the
remainder the next digit to the left in the
answer Replace the original decimal number with
the quotient
14Following an Algorithm
Figure 6.4 A recipe for Hollandaise sauce
15Following an Algorithm
- Algorithm for preparing a Hollandaise sauce
If concerned about cholesterol Put butter
substitute in a pot Else Put butter in a
pot Turn on burner Put pot on the burner While
(NOT bubbling) Leave pot on the burner Put other
ingredients in the blender Turn on blender While
(more in pot) Pour contents into lender in slow
steam Turn off blender
16Developing an Algorithm
- Two methodologies used to develop computer
solutions to a problem - Top-down design focuses on the tasks to be done
- Object-oriented design focuses on the data
involved in the solution - But first, let's look at a way to express
algorithms pseudocode
17Pseudocode
- Pseudocode
- A way of expressing algorithms that uses a
mixture of English phrases and indention to make
the steps in the solution explicit - There are no grammar rules in pseudocode
- Pseudocode is not case sensitive
18Following Pseudocode
While ( the quotient is not zero ) Divide the
decimal number by the new base Make the
remainder the next digit to the left in the
answer Replace the original decimal number with
What is 93 in base 8? 93/8 gives 11 remainder
5 11/6 gives 1 remainder 3 1/ 8 gives 0
remainder 1 answer 1 3 5
19Following Pseudocode
Easier way to organize solution
20Pseudocode for Complete Computer Solution
- Write "Enter the new base"
- Read newBase
- Write "Enter the number to be converted"
- Read decimalNumber
- Set quotient to 1
- While (quotient is not zero)
- Set quotient to decimalNumber DIV newBase
- Set remainder to decimalNumber REM newBase
- Make the remainder the next digit to the left
in the answer - Set decimalNumber to quotient
- Write "The answer is "
- Write answer
21Pseudocode Functionality
- Variables
- Names of places to store values
- quotient, decimalNumber, newBase
- Assignment
- Storing the value of an expression into a
- variable
- Set quotient to 64
- quotient lt-- 64
- quotient lt-- 6 10 4
22Pseudocode Functionality
- Output
- Printing a value on an output device
- Write, Print
- Input
- Getting values from the outside word and storing
them into variables - Get, Read
23Pseudocode Functionality
- Repetition
- Repeating a series of statements
- Set count to 1
- While ( count lt 10)
- Write "Enter an integer number"
- Read aNumber
- Write "You entered " aNumber
- Set count to count 1
-
-
How many values were read?
24Pseudocode Functionality
- Selection
- Making a choice to execute or skip a statement
(or group of statements) - Read number
- If (number lt 0)
- Write number " is less than zero."
- or
- Write "Enter a positive number."
- Read number
- If (number lt 0)
- Write number " is less than zero."
- Write "You didn't follow instructions."
25Pseudocode Functionality
- Selection
- Choose to execute one statement (or group of
statements) or another statement (or group of
statements) - If ( age lt 12 )
- Write "Pay children's rate"
- Write "You get a free box of popcorn"
- else If ( age lt 65 )
- Write "Pay regular rate"
- else
- Write "Pay senior citizens rate"
-
26Pseudocode Example
- Write "How many pairs of values are to be
entered?" - Read numberOfPairs
- Set numberRead to 0
- While (numberRead lt numberOfPairs)
- Write "Enter two values separated by a blank
press return" - Read number1
- Read number2
- If (number1 lt number2)
- Print number1 " " number2
- Else
- Print number2 " " number1
- Increment numberRead
27Walk Through
- Data Fill in values during each iteration
- 3 numberRead number1 number2
- 55 70
- 2 1
- 33 33
- numberOfPairs
What is the output?
28Top-Down Design
- Top-Down Design
- Problem-solving technique in which the problem is
divided into subproblems the process is applied
to each subproblem - Modules
- Self-contained collection of steps, that solve a
problem or subproblem - Abstract Step
- An algorithmic step containing unspecified
details - Concrete Step
- An algorithm step in which all details are
specified
29Top-Down Design
Figure 6.5 An example of top-down design
- Process continues for as many levels as it takes
to make every step concrete - Name of (sub)problem at one level becomes a
module at next lower level
30A General Example
Figure 6.6 Subdividing the party planning
31A Computer Example
- Problem
- Create a list that includes each persons name,
telephone number, and e-mail address - This list should then be printed in alphabetical
order - The names to be included in the list are on
scraps of paper and business cards
32A Computer Example
Main Level 0 Enter names and numbers into
list Put list into alphabetical order Print
list Enter names and numbers into list Level
1 While ( more names) Enter name Enter
telephone number Enter email address Insert
information into list
Which steps are abstract? Which steps are
concrete? What is missing?
33A Computer Example
Enter names and numbers into list
(revised) Level 1 Set moreNames to true While
(moreNames) Prompt for and enter name Prompt
for and enter telephone number Prompt for and
enter email address Insert information into
list Write "Enter a 1 to continue or a 0 to
stop." Read response If (response 0) Set
moreNames to false
Which steps are concrete? Which steps are
abstract?
34A Computer Example
Prompt for and enter name Level 2 Write
"Enter last name press return." Read
lastName Write "Enter first name press
return." Read firstName Prompt for and enter
telephone number Level 2 Write "Enter area
code and 7-digit number press return." Read
telephoneNumber Prompt for and enter email
address Level 2 Write "Enter email address
press return." Read emailAddress
35A Computer Example
Put list into alphabetical order
Concrete or abstract?
Print the list Level 1 Write "The list of
names, telephone numbers, and email addresses
follows" Get first item from the list While
(more items) Write item's firstName " "
lastName Write item's telephoneNumber Write
item's emailAddress Write a blank line Get next
item from the list
36A Computer Example
Note Insert information is within the loop
37Testing the Algorithm
- Important distinction
- Mathematics
- We tests the answer
- Programs
- We test the process
38Testing the Algorithm
- Desk checking
- Working through a design at a desk with a pencil
and paper - Walk-through
- Manual simulation of the design by team members,
taking sample data values and simulating the
design using the sample data - Inspection
- One person (not the designer) reads the design
(handed out in advance) line by line while the
others point out errors
39Object-Oriented Design
- Object-oriented Design
- A problem-solving methodology that produces a
solution to a problem in terms of self-contained
entities called objects - Object
- A thing or entity that makes sense within the
context of the problem - For example, a student, a car, time, date
40Object-Oriented Design
- World View of OOD
- Problems are solved by
- isolating the objects in a problem,
- determining their properties and actions
(responsibilities), and - letting the objects collaborate to solve a problem
What? Say again!
41Object-Oriented Design
- An analogy You and your friend fix dinner
- Objects you, friend, dinner
- Class you and friend are people
- People have name, eye color,
- People can shop, cook,
- Instance of a class you and friend are instances
of class People, you each have your own name and
eye color, you each can shop and cook - You collaborate to fix dinner
42Object-Oriented Design
- Class (or object class)
- A description of a group of similar objects
- Object (instance of a class)
- A concrete example of the class
- Classes contain fields that represent the
- properties (name, eye color) and
- behaviors (responsibilities) (shop, cook) of the
class - Method
- A named algorithm that defines behavior (shop,
cook)
43Object-Oriented Design
- Top-Down Design
- decomposes problems into tasks
- Object-Oriented Design
- decomposes problems into
- collaborating objects
Yes, but how?
44Object-Oriented Design
- Steps
- isolate the real-world objects in the problem
- abstract the objects with like properties into
groups (classes) - determine the responsibilities of the group in
interacting with other groups
45Object-Oriented Design
- Think of design as a mapping from real world
objects to classes of objects
birth date
Date class
marriage date
dog's birth date
Objects Classes of objects
46Object-Oriented Design
- Program World simulates these groups
dogBirthdate
class Date
birthdate
marriageDate
Description
Instances
47Object-Oriented Design
Date's Actions in real world ?
We call an object's interactions with other
objects its responsibilities
Create itself Know the state of its
fields Compare itself to another date Return a
date days hence
48Object-Oriented Design
- Responsibilities become methods in the Program
World
dogBirthdate
class Date getMonth getDay getYear
birthdate
marriageDate
49Object-Oriented Design Methodology
- Four stages to the decomposition process
- Brainstorming to locate possible classes
- Filtering the classes to find duplicates or
remove unnecessary ones - Scenarios are tried to be sure we understand
collaborations - Responsibility algorithms are designed for all
actions that classes must exhibit
50CRC Cards
CRC cards are a notational device to record
information about a class, what is must do and
with whom it must collaborate
51Brainstorming
- A group problem-solving technique that involves
the spontaneous contribution of ideas from all
members of the group - All ideas are potential good ideas
- Think fast and furiously first, and ponder later
- A little humor can be a powerful force
- Brainstorming is designed to produce a list of
candidate classes
52Filtering
- Determine which are the core classes in the
problem solution - There may be two classes in the list that have
many common attributes and behaviors - There may be classes that really dont belong in
the problem solution
53Scenarios
- Assign responsibilities to each class
- There are two types of responsibilities
- What a class must know about itself (knowledge
responsibilities) - What a class must be able to do (behavior
responsibilities)
54Scenarios
- Encapsulation
- The bundling of data and actions in such a way
that the logical properties of the data and
actions are separated from the implementation
details - Each class encapsulates its data but shares their
values through knowledge responsibilities
55Responsibility Algorithms
- The algorithms must be written for the
responsibilities - Knowledge responsibilities usually just return
the contents of one of an objects variables - Action responsibilities are a little more
complicated, often involving calculations
56Computer Example
- Lets repeat the problem-solving process for
creating an address list - Brainstorming and filtering
- Circling the nouns and underlining the verbs is a
good way to begin
57Computer Example
- First pass at a list of classes
list name telephone number email
address list order names list scraps paper cards
Filtered List
list, name, telephone number email address
58CRC Cards
Can you think of any other useful
responsibilities?
59CRC Cards
Can you think of any other useful
responsibilities?
60CRC Cards
How is this class different from Name and Person?
61Responsibility Algorithms
Person Class Initialize name.initialize() Wri
te "Enter phone number press return." Get
telephone number Write "Enter email address
press return." Get email address Print name.prin
t() Write "Telephone number "
telephoneNumber Write "Email address "
emailAddress
Tells name to initialize itself
Tells name to print itself
62Responsibility Algorithms
Name Class Initialize "Enter the first name
press return." Read firstName "Enter the last
name press return." Read lastName Print Print
"First name " firstName Print "Last name "
lastName
63Important Threads
- Information Hiding
- The practice of hiding the details of a module
with the goal of controlling access to it - Abstraction
- A model of a complex system that includes only
the details essential to the viewer - Information Hiding and Abstraction are two sides
of the same coin
64Important Threads
- Data abstraction
- Separation of the logical view of data from their
implementation - Procedural abstraction
- Separation of the logical view of actions from
their implementation - Control abstraction
- Separation of the logical view of a control
structure from its implementation
65Important Threads
Abstraction is the most powerful tool people have
for managing complexity!
66Important Threads
- Identifiers
- Names given to data and actions, by which
- we access the data and
- Read firstName, Set count to count 1
- execute the actions
- name.initialize(), name.print()
- Giving names to data and actions is a form of
abstraction
67Importhat Threads
- Programming language
- A set of grammar rules, symbols, and special
words used to construct a program - Program
- A sequence of instructions written to perform a
specified task - Syntax
- The formal grammar rules governing the
construction of valid instructions - Semantics
- The rules that give meaning to the instructions
68Ethical Issues
- Licensing Computer Professionals
- Are computer professionals licensed?
- What is the ACM and why is it opposed
- to licensing?
- What is the IEEE and what is its
- position on licensing?
- Should computer professionals be licensed?
-
69Who am I?
I am a mathematician. Why is my picture in a book
about computer science?
70Do you know?
What does TNDM stand for and what is it? How is
a computer data base being used to help
endangered species? What is forensic
computing? What techniques does it use? How is
physical evidence protected?