This repository contains solutions for standard programming problems structured by the algorithmic techniques or datastructures used to solve them
In mathematics and computer science, an algorithmic technique is a general approach for implementing a process or computation
Brute Force search or exhaustive search, also known as generate and test, is a very general problem-solving technique and algorithmic paradigm that consists of systematically enumerating all possible candidates for the solution and checking whether each candidate satisfies the problem's statement. An example of a brute force technique is backtracking.Backtracking is an algorithm where we traverse all the possible paths to find the correct solution.
The divide and conquer technique decomposes complex problems recursively into smaller sub-problems. Each sub-problem is then solved and these partial solutions are recombined to determine the overall solution. This technique is often used for searching and sorting.
Dynamic programming is a systematic technique in which a complex problem is decomposed recursively into smaller, overlapping sub-problems for solution. Dynamic programming stores the results of the overlapping sub-problems locally using an optimization technique called memoization
A greedy approach begins by evaluating one possible outcome from the set of possible outcomes, and then searches locally for an improvement on that outcome. When a local improvement is found, it will repeat the process and again search locally for additional improvements near this local optimum. A greedy technique is generally simple to implement, and these series of decisions can be used to find local optimums depending on where the search began. However, greedy techniques may not identify the global optimum across the entire set of possible outcomes.
Graph traversal is a technique for finding solutions to problems that can be represented as graphs. This approach is broad, and includes depth-first search, breadth-first search, tree traversal, and many specific variations that may include local optimizations and excluding search spaces that can be determined to be non-optimum or not possible. These techniques may be used to solve a variety of problems including shortest path and constraint satisfaction problems.