## Algorithm

An algorithm is a sequence of non ambiguous instructions for solving a problem in a finite amount of time.

## Properties of Algorithm

**Input:**Zero or more quantities are externally supplied.**Output**At least one quantity is produced.**Definiteness:**Each instruction is clear and unambiguous.**Finiteness:**If we trace out the instructions of an algorithm, then, in all cases, the algorithm terminates after a finite number of steps.**Effectiveness:**Every instruction must be very simple so that a person using only a pencil and paper can carry it out in theory.

**Steps to construct Algorithm**

- Design of an Algorithm
- Methods of Specifying an Algorithm
- Proving an Algorithms Correctness
- Analyzing an Algorithm.
- Coding an Algorithm

### Designing an Algorithm

Algorithm design techniques offer a robust collection of general approaches to algorithmic problem solving, but the task of designing an algorithm for a specific problem may still be difficult. Certain design methodologies may be entirely inappropriate for the issue at hand. At times, it is necessary to combine multiple techniques, and there are algorithms that are difficult to identify as applications of established design techniques.

**Methods of Specifying an Algorithm**

After designing an algorithm, it must be specified in some way.

The most popular choices for algorithm specification are these two. Although there is an apparent temptation to use a natural language, it may be quite challenging to describe algorithms in a concise and understandable way due to the inherent ambiguity of any natural language. Nevertheless, mastering this is a crucial ability that you should work to acquire while studying algorithms.

Combining elements of a normal language with those of a computer language results in pseudocode. When pseudocode is used, algorithm descriptions tend to be more concise and are typically more precise than normal language. A flowchart is a way to represent an algorithm as a group of connected geometric objects with step-by-step explanations inside.

**Proving an Algorithms Correctness**

After an algorithm is specified, you need to demonstrate that it is correct. In other words, you need to demonstrate that the algorithm produces the necessary result for each valid input in a finite amount of time.

**Analyzing an Algorithm**

We require multiple qualities from our algorithms. Efficiency comes in second most crucial after accuracy. Algorithm efficiency actually comes in two flavors: time efficiency, which measures how quickly the algorithm executes, and space efficiency, which measures how much more memory it consumes.

**Coding an Algorithm**

The majority of algorithms will eventually be used in computer programs.

**Why study algorithms?**

Experience is how computer scientists learn. Both tackling difficulties on our own and observing others solve them teach us. Learning about various approaches to problem-solving and the construction of various algorithms equips us to tackle the next difficult issue. That we possess. By taking into account several distinct algorithms, we may start to create recognizing patterns so that we can address the same issue more effectively the next time it comes up.

**Growth of Functions**

**Types of An Algorithm**

### Dynamic Programming

### Sorting

**Brute Force Technique**

**Exhaustive Search**

### Greedy Techniques

- Prims Algorithm
- Kruskal’s Algorithm
- Dijkstra Algorithm
- Huffman Trees
- Job Sequencing
- Optimal Search Problem

**Graph Algorithms**

- Breadth First Search
- Depth First Search
- Bellman Floyd’s Algorithm
- Shortest path in Directed Acyclic Graph
- Matrix Multiplication