Algorithms

Here it is, from thirty-thousand feet, as they say.

Why Study Algorithms

Studying algorithms helps you develop widely applicable analytical skills—you learn not just how to solve individual problems but to develop recipies for getting answers to many problems.

“A person well-trained in computer science knows how to deal with algorithms: how to construct them, manipulate them, understand them, analyze them. This knowledge is preparation for much more than writing good computer programs; it is a general-purpose mental tool that will be a definite aid to the understanding of other subjects, whether they be chemistry, linguistics, or music, etc. The reason for this may be understood in the following way: It has often been said that a person does not really understand something until after teaching it to someone else. Actually, a person does not really understand something until after teaching it to a computer, i.e., expressing it as an algorithm . . . An attempt to formalize things as algorithms leads to a much deeper understanding than if we simply try to comprehend things in the traditional way.” — Donald Knuth

And:

“Algorithmics is more than a branch of computer science. It is the core of computer science, and, in all fairness, can be said to be relevant to most of science, business, and technology.” — David Harel

Classifying Algorithms

Primary dimemsions:

Secondary concerns include:

Problem Domain

What kind of a problem are you trying to solve?

Complexity Class

Let $n$ be the input size and $k$ be a fixed constant.

Underlying Data Structure

There is a huge list of data structures at Wikipedia, but here are some of the more common ones:

Strategies

This isn’t a complete list, but it covers some of the more famous ones: