# Algorithmic Techniques

Any given problem in computer science can be solved using data structures to store input and intermittent data and using some algorithms to arrive at a solution. At a first glance it might seem that there are a lots of different ways in which an algorithm or logic can be developed. But by looking at most of the optimum algorithms, the observation is that almost all of them can be categorized based on the core approach/technique used. Below are some of such core approaches/techniques which can be used as a guidance for developing efficient algorithms for different problems:

## Brute Force Algorithmic Technique

Brute force technique is an algorithmic approach in which each possible variation of the input is computed until we arrive at the desired variation/combination. This approach is also called as Brute force search or Exhaustive search due to the fact that it searches each possible combination until the desired combination or the best combination is arrived at.

## Recursion Technique and Recursive Functions

Recursion is a method used to solve a computational problem by dividing a problem into multiple smaller sub-problems similar to the original problem and by solving each problem independently. Eventually, we come to a state where the divided problem is small enough that the answer to it is straightforward.

## Memoization Technique for Recursive Functions

Memoization is an optimization technique used to speed up computer programs by storing/caching results of expensive computations and by re-using the stored (cached) results in case if we have to do perform the same computation again.

## Dynamic Programming Technique

Dynamic programming technique tries to compute and store solutions to smaller sub-problems first and then slowly builds solution to the original problem by combining results of the intermediate sub-problems. Difference Between Recursion and Dynamic Programming This methodology seems similar to recursion and Memoization techniques, but there’s one major difference.

Other Algorithmic techniques for which articles are not created yet:

• Divide and Conquer
• Greedy Algorithms
• Branch and Bound Algorithm
• Randomized Algorithms
• Backtracking
• Sliding Window