As a software engineer, it's crucial to have a strong understanding of fundamental algorithms. Here's a list of essential algorithms that every software engineer should be familiar with:
- Insertion Sort
- Selection Sort
- Merge Sort
- Quick Sort
- Heap Sort
- Counting Sort
- Radix Sort
- Dijkstra's Algorithm (Shortest Path)
- Bellman-Ford Algorithm (Shortest Path with Negative Weights)
- Floyd-Warshall Algorithm (All Pairs Shortest Path)
- Kruskal's Algorithm (Minimum Spanning Tree)
- Prim's Algorithm (Minimum Spanning Tree)
- Topological Sorting
- Tarjan's Algorithm (Strongly Connected Components)
- Binary Search Tree (BST)
- AVL Tree (Self-balancing BST)
- Red-Black Tree (Self-balancing BST)
- Trie (Prefix Tree)
- Huffman Coding (Optimal Prefix Encoding)
- Fenwick Tree (Binary Indexed Tree)
- Fibonacci Series
- Knapsack Problem
- Longest Common Subsequence (LCS)
- Matrix Chain Multiplication
- Edit Distance
- Coin Change Problem
- String Matching (Naive, KMP, Rabin-Karp)
- Longest Palindromic Substring
- Longest Common Substring
- String Compression (Run-length Encoding)
- Levenshtein Distance (Edit Distance)
- Euclidean Algorithm (GCD, LCM)
- Primality Testing (Sieve of Eratosthenes)
- Fast Exponentiation (Binary Exponentiation)
- Newton-Raphson Method (Root Finding)
- Monte Carlo Method (Randomized Algorithms)
- Backtracking Algorithms
- Divide and Conquer Strategies
- Greedy Algorithms
- Randomized Algorithms
- Parallel and Concurrent Algorithms