This document discusses algorithms and problem solving. It covers exploring the algorithmic approach to problem solving, learning about algorithm development, and becoming aware of the problem solving process. Key points include:
- An algorithm is a step-by-step process for solving a problem in a finite number of steps.
- The problem solving process involves analyzing the problem, designing an algorithm to solve it, implementing the algorithm in code, and maintaining the program if needed.
- Object-oriented design methodologies like brainstorming, filtering, scenarios, and responsibility algorithms can help discover algorithms to solve problems.
2. • Learn about problem solving skills
• Explore the algorithmic approach for
problem solving
• Learn about algorithm development
• Become aware of problem solving process
Lecture Objectives
3. Problem Solving
• Programming is a process of problem
solving
• Problem solving techniques
Analyze the problem
Outline the problem requirements
Design steps (algorithm) to solve the problem
• Algorithm:
Step-by-step problem-solving process
Solution achieved in finite amount of time
4. Problem Solving Process
• Step 1 - Analyze the problem
Outline the problem and its requirements
Design steps (algorithm) to solve the problem
• Step 2 - Implement the algorithm
Implement the algorithm in code
Verify that the algorithm works
• Step 3 - Maintenance
Use and modify the program if the problem
domain changes
5. Analyze the Problem
• Thoroughly understand the problem
• Understand problem requirements
Does program require user interaction?
Does program manipulate data?
What is the output?
• If the problem is complex, divide it into
subproblems
Analyze each subproblem as above
6. What is an algorithm?
• The idea behind the computer program
• Stays the same independent of
Which kind of hardware it is running on
Which programming language it is written in
• Solves a well-specified problem in a general
way
• Is specified by
Describing the set of instances (input) it must work on
Describing the desired properties of the output
7. • Before a computer can perform a task, it must
have an algorithm that tells it what to do.
• Informally: “An algorithm is a set of steps that
define how a task is performed.”
• Formally: “An algorithm is an ordered set of
unambiguous executable steps, defining a
terminating process.”
Ordered set of steps: structure!
Executable steps: doable!
Unambiguous steps: follow the directions!
Terminating: must have an end!
What is an algorithm? (Cont’d)
9. Important Properties of Algorithms
• Correct
always returns the desired output for all legal
instances of the problem.
• Unambiguous
• Precise
• Efficient
Can be measured in terms of
• Time
• Space
Time tends to be more important
10. Representation of Algorithms
• A single algorithm can be represented in
many ways:
Formulas: F = (9/5)C + 32
Words: Multiply the Celsius by 9/5 and add 32.
Flow Charts.
Pseudo-code.
• In each case, the algorithm stays the same;
the implementation differs!
11. A program is a representation of an algorithm
designed for computer applications.
Process: Activity of executing a program, or execute
the algorithm represented by the program
Process: Activity of executing an algorithm.
Representation of Algorithms (Cont’d)
12. Expressing Algorithms
• English description
• Pseudo-code
• High-level
programming
language
More
precise
More easily
expressed
13. • Pseudocode is like a programming language
but its rules are less stringent.
• Written as a combination of English and
programming constructs
Based on selection (if, switch) and iteration (while,
repeat) constructs in high-level programming
languages
• Design using these high level primitives
Independent of actual programming language
Pseudocode
15. Algorithm Discovery
• The Two Steps of Program Development:
1. Discover the algorithm.
2. Represent the algorithm as a program.
• Step 2 is the easy step!
• Step 1 can be very difficult!
• To discover an algorithm is to solve the
problem!
16. Problem Solving: A creative process
• Problem solving techniques are not unique
to Computer Science.
• The CS field has joined with other fields to
try to solve problems better.
• Ideally, there should be an algorithm to
find/develop algorithms.
• However, this is not the case as some
problems do not have algorithmic solutions.
• Problem solving remains an art!
17. Problem Solving Strategies
• Working backwards
Reverse-engineer
Once you know it can be done, it is much easier to do
What are some examples?
• Look for a related problem that has been solved before
Java design patterns
Sort a particular list such as: David, Alice, Carol and Bob
to find a general sorting algorithm
• Stepwise Refinement
Break the problem into several sub-problems
Solve each subproblem separately
Produces a modular structure
• K.I.S.S. = Keep It Simple Stupid!
18. Stepwise Refinement
• Stepwise refinement is a top-down methodology
in that it progresses from the general to the
specific.
• Bottom-up methodologies progress from the
specific to the general.
These approaches complement each other
• Solutions produced by stepwise refinement
posses a natural modular structure - hence its
popularity in algorithmic design.
19. Object-Oriented Design Methodology
• Four stages to the decomposition process
Brainstorming
Filtering
Scenarios
Responsibility algorithms
21. Brainstorming
• 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
22. Filtering
• 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 don’t belong
in the problem solution
23. Scenarios
• Assign responsibilities to each class
• There are two types of responsibilities
What a class must know about itself (knowledge)
What a class must be able to do (behavior)
• Encapsulation is 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
24. Responsibility Algorithms
• The algorithms must be written for the
responsibilities
Knowledge responsibilities usually just return the
contents of one of an object’s variables
Action responsibilities are a little more complicated,
often involving calculations
25. Computer Example
• Let’s repeat the problem-solving process for
creating an address list
• Brainstorming and filtering
Circling the nouns and underlining the verbs
26. • First pass at a list of classes
Computer Example (Cont’d)