You must be able to solve problems in order to succeed in academics or in the real world.
Problem-solving ability is a combination of art and science.
In the real world, the process is more difficult because problem descriptions are often incomplete, imprecise, or ambiguous.
The successful problem solver must be able to ask the right questions in order to clarify the problem and obtain any information that is missing from the problem statement.
Next the problem solver must analyze the problem and attempt to extract its essential features, identifying what is provided (the problem inputs) and what is required (the problem outputs).
The problem solver must also be able to determine whether any constraints or simplifying assumptions can be applied to facilitate the problem solution.
Often, we cannot solve the general case of a problem; we must make some realistic assumptions that limit or constrain the problem so that it can be solved.
Recognize and understand the problem.
You must study the problem carefully, eliminating aspects that are unimportant and zeroing in on the root problem.
Accumulate facts.
Get all the relevant physical facts, such as sizes, temperatures, voltages, weights, and costs.
Select the appropriate theory or principle.
Pick the theories or scientific principles that apply to the problem solution.
Make necessary assumptions.
Perfect solutions to many real problems do not exist. You need to make simplifications if you want to solve problems. Make sure that your simplifications do not significantly affect the accuracy of the problem.
Solve the problem.
If Steps 3 and 4 result in a set of mathematical equations (called a model), you can solve the problem by solving the equations, a trial-and-error solution, or some form of graphical solution.
Verify and check results.
The work is not finished just because a solution has been reached. The solution has to be checked to ensure that it is mathematically correct and that units have been properly specified.
Systems designers in the computer industry have found that the engineering and scientific method of problem solving can be adapted to the development of reliable software systems as well.
This approach is called software engineering.
Requirements Specification.
we must fully understand the problem
gather facts about the problem environment
make any necessary assumptions that pin down the problem
Analysis.
identify problem inputs and outputs
look for appropriate theories or principles
list any relevant formulas or relationships
Design.
"solve the problem"
the human figures out a way to solve the problem and writes an algorithm that lists major subproblems
using the "divide and conquer" technique, solves each subproblem separately
keep refining each subproblem until there is a clear, complete solution.
Implementation.
translate the algorithm into C code
now the computer can solve the problem too
data becomes constants and variables
the refined algorithm becomes statements
Verification and Testing.
as we test and debug the program, we first remove all obvious errors
then we run the program several times with a variety of test data to ensure that the program works properly.
check the program outputs against computations
We shouldn't jump to the conclusion that if we follow these steps, we are guaranteed a correct solution the first time, every time.
The first (also the second, the third, or the twentieth) attempt at a solution may be wrong!
The outstanding problem solver is not discouraged by initial failure.
Failures tell you what does not work.
The ability to listen carefully is an important skill in human communication.
Often, we are too busy thinking of what our response will be to really hear what another person is saying.
This can lead to a lack of understanding between a speaker and a listener.
Many of us suffer from a similar difficulty when we attempt to solve problems that are presented in either verbal or written form.
We do not pay close attention to the problem statement to determine what is really being asked; consequently, either we are unable to solve the stated problem or we reach an incorrect solution because we solve the wrong problem.
You should analyze a problem statement carefully before attempting to solve it.
The first time you read a problem, you should get a general idea of what is being asked.
The second time you read it, you should try to answer the following questions:
What information should the solution provide?
What data do I have to work with?
The answer to the first question will tell you the problem outputs; the answer to the second question will tell you the problem inputs.
Back to the COMP435 page