### OVERVIEW

A **computer program** is clear instructions in a programming language that solve some problem. You can write this program in different programming languages, but the solution to the problem irrespective of programming language remain same.

Therefore, an algorithm is **an independent solution** to a computer-based problem. You will find following characteristics of an algorithm when you study them in this tutorial.

- They have
**finite number of steps.** - They take one or more
**inputs.** - They produce one or more
**output.** - Terminate in
**fixed amount of time.** - Each step of algorithm is
**precise.** - Algorithms are strongly based on
**Mathematics (**not all of them**).**

Choosing a correct algorithm depends on lot of factors such as **storage space required** to solve the problem, or **time required** to solve the problem. Sometime there are more one algorithms to solve a problem.

In that case, you need to perform **analysis of algorithms** based on these factors and decide which one is more efficient in solving our problem. There are problems which are **unsolvable**, and you will learn how to find and categorize these unsolvable problems.

**About Algorithms Tutorial**

This tutorial in written for anyone who wants to learn algorithms. There are few prerequisites to this tutorial and they are

- You must be familiar with basic mathematical concepts such as
*exponents, set theory, mathematical induction, trees, graphs, relations, limits and so on.* - Some knowledge of programming is recommended such as C/C++ or Java Programming.