# Types of Algorithm

Backtracking Algorithms

Backtracking is an algorithm for finding solution to some computational problems. It incrementally builds candidates to the solutions, and traces back by abandoning each partial candidate c as soon as it determines that c cannot provide a valid solution.

source: quora.com
Branch and Bound Algorithms

A branch and bound algorithm is an optimization technique to get an optimal solution to the problem. It looks for the best solution for a given problem in the entire space of the solution. The bounds in the function to be optimized are merged with the value of the latest best solution.

source: quora.com
Brute Force Algorithms

An algorithm is not brute force if it exploits some advantage or approaches a problem such that you could arrive at a solution without having to try every possibility, ever.

Divide and Conquer Algorithms

A divide and conquer algorithm works by recursively breaking down a problem into two or more sub-problems of the same or related type, until these become simple enough to be solved directly. The solutions to the sub-problems are then combined to give a solution to the original problem.

Dynamic Programming Algorithms

Dynamic programming (DP) is a general algorithm design technique for solving problems with overlapping sub-problems. This technique was invented by American mathematician “Richard Bellman” in 1950s.

Greedy Algorithms

A greedy algorithm is an algorithmic paradigm that follows the problem solving heuristic of making the locally optimal choice at each stage with the intent of finding a global optimum.

Randomized Algorithms

Randomized algorithms are used when presented with a time or memory constraint, and an average case solution is an acceptable output. Due to the potential erroneous output of the algorithm, an algorithm known as amplification is used in order to boost the probability of correctness by sacrificing runtime.

source: brilliant.org
Simple Recursive Algorithms

A recursive algorithm is an algorithm which calls itself with "smaller (or simpler)" input values, and which obtains the result for the current input by applying simple operations to the returned value for the smaller (or simpler) input.

source: cs.odu.edu