๐๏ธ Dynamic Programming
Dynamic Programming is mainly an optimization over plain recursion. Wherever we see a recursive solution that has repeated calls for the same inputs, we can optimize it using Dynamic Programming. The idea is to simply store the results of subproblems so that we do not have to re-compute them when needed later. This simple optimization reduces time complexities from exponential to polynomial.
๐๏ธ Leetcode DP Practice Questions
Here is a list of some popular LeetCode dynamic programming problems:
๐๏ธ Trie
Introduction
๐๏ธ Leetcode trie Practice Questions
Questions
๐๏ธ Backtracking in DSA
Backtracking
๐๏ธ Leetcode Backtracking Practice Questions
1. 46. Permutations
๐๏ธ Greedy in DSA
Greedy Algorithm is defined as a method for solving optimization problems by taking decisions that result in the most evident and immediate benefit irrespective of the final outcome. It works for cases where minimization or maximization leads to the required solution.
๐๏ธ Bit Manipulation in DSA
Bit Manipulation is a technique used in a variety of problems to get the solution in an optimized way. This technique is very effective from a Competitive Programming point of view. It is all about Bitwise Operators which directly works upon binary numbers or bits of numbers that help the implementation fast. Below are the Bitwise Operators that are used:
๐๏ธ Leetcode Greedy Practice Questions
1. Jump Game
๐๏ธ Leetcode Bit Manipulation Practice Questions
1. Number of 1 Bits - Write a function that takes an unsigned integer and returns the number of '1' bits it has (also known as the Hamming weight).
๐๏ธ Branch and Bound in DSA
Branch and Bound
๐๏ธ Computability Classes
Tractable and Intractable
๐๏ธ Randomised Algorithm
Randomised Algorithm
๐๏ธ Approximation Algorithm
Approximation Algorithm
๐๏ธ 0004 - Rabin Karp Algorithm
Efficient solution to the Rabin Karp algorithm problem using C++.
๐๏ธ Segment Tree
A Segment Tree is a data structure that allows efficient range queries and updates on an array. It is particularly useful for problems where you need to perform multiple range queries and updates on an array.
๐๏ธ 0011 - Aho-Corasick Algorithm
This is a solution for implementing the Aho-Corasick Algorithm to search multiple patterns simultaneously in a given text.
๐๏ธ 0004 - Bellman-Ford Algorithm
This is a solution to the Bellman-Ford algorithm problem.
๐๏ธ 0005 - Binary Tree Mirror and Rotation
This is a solution to create the mirror image and perform rotations (left and right) on a binary tree.
๐๏ธ Fenwick Tree (Binary Indexed Tree)
A Fenwick Tree, also known as a Binary Indexed Tree (BIT), is a data structure that provides efficient methods for calculation and manipulation of the prefix sums of a table of values.
๐๏ธ 0005 - Versatile Graph Toolkit
This is a solution for developing a versatile graph theory toolkit designed to address a wide range of DSA problems.
๐๏ธ 0004 - Greedy Graph Optimization
This is a solution to the Greedy Graph Optimization problem.
๐๏ธ 0003 - Huffman Coding
This is a solution to the Huffman Coding problem.
๐๏ธ 0006 - Knuth-Morris-Pratt Algorithm
This is a solution for implementing the Knuth-Morris-Pratt (KMP) algorithm for efficient substring searching and pattern matching.
๐๏ธ 0007 - Levenshtein Distance Algorithm
This is a solution for implementing the Levenshtein Distance Algorithm for measuring the difference between two sequences.
๐๏ธ 0010 - PageRank Algorithm
This is a solution for implementing the PageRank Algorithm to rank web pages based on their importance and relevance.
๐๏ธ 0008 - Strassen's Algorithm
This is a solution for implementing Strassen's Algorithm for efficient matrix multiplication.
๐๏ธ 0009 - Tarjanโs Algorithm
This is a solution for implementing Tarjanโs Algorithm to find strongly connected components in a directed graph.