..  Copyright (C)  Brad Miller, David Ranum
    This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/4.0/.


Why Study Algorithms?
~~~~~~~~~~~~~~~~~~~~~

Computer scientists learn by experience. We learn by seeing others solve
problems and by solving problems by ourselves. Being exposed to
different problem-solving techniques and seeing how different algorithms
are designed helps us to take on the next challenging problem that we
are given. By considering a number of different algorithms, we can begin
to develop pattern recognition so that the next time a similar problem
arises, we are better able to solve it.

Algorithms are often quite different from one another. Consider the
example of ``sqrt`` seen earlier (see Figure 1.1). It is entirely possible that there are
many different ways to implement the details to compute the square root
function. One algorithm may use many fewer resources than another. One
algorithm might take 10 times as long to return the result as the other.
We would like to have some way to compare these two solutions. Even
though they both work, one is perhaps “better" than the other. We might
suggest that one is more efficient or that one simply works faster or
uses less memory. As we study algorithms, we can learn analysis
techniques that allow us to compare and contrast solutions based solely
on their own characteristics, not the characteristics of the program or
computer used to implement them.

In the worst-case scenario, we may have a problem that is intractable,
meaning that there is no algorithm that can solve the problem in a
realistic amount of time. It is important to be able to distinguish
between those problems that have solutions, those that do not, and those
where solutions exist but require too much time or other resources to
work reasonably.

There will often be trade-offs that we will need to identify and decide
upon. As computer scientists, in addition to our ability to solve
problems, we will also need to know and understand solution evaluation
techniques. In the end, there are often many ways to solve a problem.
Finding a solution and then deciding whether it is a good one are tasks
that we will do over and over again.

