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 the same. Therefore, an algorithm is **an independent solution** to a computer-based problem.

It is possible to automate tasks using algorithms, and creating program based on our algorithms. But, sometimes a computational problem can be solved using multiple algorithms, in which case, we have to choose the “best” or “optimized” algorithms to solve that problem.

The choice of best algorithm is based on several factors such as space to store input variables, time taken to solve the problem for a given input and so on. These are known as algorithm performance metrics. They are necessary to compare two different algorithms for best , average, and worst case scenarios.

In this tutorial you will study different types of factors that affect the choice of a good algorithm to solve a problem. You will learn about different type s of algorithm design techniques, and familiar patterns like search algorithm, sorting algorithms, etc.

## About Algorithms Tutorial

This tutorial is meant for beginner who are new to algorithms. Some experience with a programming language is sufficient to start learning algorithms, but here are some more information about prerequisites to learn algorithms.

- 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.
- Knowledge of data structures is an advantage because almost all algorithms use some kind of data structures.If you don’t have the knowledge , then you should learn about stack, queues, link-lists, and trees structures at least.

You can visit our programming tutorials to learn programming concepts to get comfortable with algorithms.

## Algorithms Tutorial Topics

Here is a list of topics for algorithms. Read from top (easy) to bottom (difficult).

### 1. Algorithms Fundamentals

- Algorithm Introduction
- Algorithm Pseudo Code
- Algorithm Complexities
- Algorithm Order of Growth
- Algorithm Time Complexity

### 3. Hashing

### 2. Search Algorithms

- Algorithm Search Overview
- Linear Search Algorithm
- Transpose Sequential Search
- Binary Search Algorithm
- Interpolation Search Algorithm
- Fibonacci Search Algorithm

### 4. Sorting Algorithms

## Studying from Books

Other than learning from this tutorial, you can also learn from a good book. The prerequisite to learn algorithms design is the same what I mentioned earlier. You must know foundational mathematics, and a little programming to understand the concepts. It might be easier to grasp the concepts. Besides more knowledge on the algorithm topics, a book can be a great offline help. Some books have lot of exercises which you can try on your own.

As I mentioned earlier, data structures are important in understanding algorithm design techniques. There are books that provide you will knowledge of data structures before you start algorithms chapters. I recommend those kind of books if you lack data structure knowledge.

## Asking Questions

While studying it is common that you will have doubts and question regarding some topics. As a student you may clarify your with your teacher or professor. This is not possible for an online, self-learner. You can ask your questions in StackExchange website, if a relevant answer not there, then someone definitely will answer your questions. They have a dedicated computer science section which will be helpful. Another great resource to ask your questions is Quora. You will get immediate answers to your questions from other users.