Skip to content
Back to skills

Algorithms

ASecurity

'''''Provides Comprehensive algorithm selection guide u2014 choose, implement,

  • 4 stars
  • 0 votes
  • 1 copy
  • 6 views
  • Added June 12, 2026
datapythongoshellnodetestinggitdatabasesecurityperformancedocumentation

Works with

  • cli

Security analysis

A100/100

Scanned June 12, 2026

npx -y skills add paulpas/agent-skill-router --skill algorithms --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Algorithms?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Algorithms
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/paulpas-algorithms/badge)](https://www.skillsdirectory.com/skills/paulpas-algorithms)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---




name: algorithms
compatibility: opencode
completeness: 95
content-types:
- code
- guidance
- examples
- diagrams
description: '''''Provides Comprehensive algorithm selection guide u2014 choose, implement,
  and'' optimize algorithms based on time/space trade-offs, input characteristics,
  and problem constraints'''''
domain: programming
license: MIT
maturity: stable
metadata:
  domain: programming
  output-format: code
  role: reference
  scope: implementation
  triggers: algorithms, comprehensive, algorithm, selection
  archetypes:
  - educational
  anti_triggers:
  - brainstorming
  - vague ideation
  response_profile:
    verbosity: medium
    directive_strength: medium
    abstraction_level: tactical
version: "1.0.0"
output-format: code
role: reference
scope: implementation
triggers: algorithm, algorithms, big-o, complexity, data structure, searching, sorting
version: "1.0.0"




---




  related-skills: abl-v10-learning, abl-v12-learning


# Skill: programming-algorithms

# Programming Algorithms: A Comprehensive Guide for Algorithm Selection

**Role:** Senior Algorithm Engineer — select, implement, and optimize algorithms for problem-solving across domains.

**Philosophy:** Algorithmic Precision — choose the right tool for the job based on time/space trade-offs, input characteristics, and problem constraints. No fabrication — leverage established, proven algorithms.

## Purpose: Why Standard Algorithms

**The Problem with Fabrication:**
- Reinventing algorithms introduces bugs and suboptimal solutions
- Standard algorithms have decades of academic analysis and optimization
- Edge cases are already understood and handled
- Performance characteristics are well-documented

**When to Use Standard Algorithms:**
1. Problem matches a known pattern (sorting, shortest path, etc.)
2. Input size suggests complexity constraints
3. Resource limits (time/space) are known
4. Industry standards exist for the domain

**Key Principles:**
- **Trade-offs are inevitable:** Time vs space, simplicity vs performance
- **Context matters:** Input size, distribution, and constraints dictate choices
- **Proof first, optimize later:** Ensure correctness before micro-optimizations

---
  related-skills: abl-v10-learning, abl-v12-learning

## Table of Contents

1. [Sorting Algorithms](#sorting-algorithms)
2. [Searching Algorithms](#searching-algorithms)
3. [Graph Algorithms](#graph-algorithms)
4. [Dynamic Programming](#dynamic-programming)
5. [Greedy Algorithms](#greedy-algorithms)
6. [String Algorithms](#string-algorithms)
7. [Mathematical Algorithms](#mathematical-algorithms)
8. [Geometric Algorithms](#geometric-algorithms)
9. [Backtracking Algorithms](#backtracking-algorithms)
10. [Numerical Algorithms](#numerical-algorithms)
11. [Probabilistic Algorithms](#probabilistic-algorithms)
12. [Streaming Algorithms](#streaming-algorithms)
13. [Algorithm Selection Guide](#algorithm-selection-guide)

---
  related-skills: abl-v10-learning, abl-v12-learning

## Sorting Algorithms

### Quick Sort
- **Alternative Names:** Partition-exchange sort
- **Time Complexity:** 
  - Best: O(n log n) (balanced partitions)
  - Average: O(n log n)
  - Worst: O(n²) (poor pivot selection)
- **Space Complexity:** O(log n) (recursion stack)
- **Key Use Cases:**
  - General-purpose sorting when cache locality matters
  - In-place sorting with minimal memory overhead
  - Average-case optimal for random data
- **When to Choose:**
  - Data is randomly distributed
  - Memory is constrained (in-place)
  - Average performance matters more than worst-case guarantee
  - Not suitable for linked lists or nearly-sorted data
- **Optimizations:**
  - Use median-of-three pivot selection
  - Switch to insertion sort for small partitions (n < 10-20)
  - Iterative implementation to avoid stack overflow

### Merge Sort
- **Alternative Names:** Mergesort
- **Time Complexity:** 
  - Best: O(n log n)
  - Average: O(n log n)
  - Worst: O(n log n)
- **Space Complexity:** O(n) (temporary arrays)
- **Key Use Cases:**
  - Linked list sorting
  - External sorting (files too large for memory)
  - Stable sorting required
  - Parallel processing (tasks are independent)
- **When to Choose:**
  - Stability is required (equal elements maintain order)
  - Sorting linked lists (O(1) extra space)
  - External sorting with disk I/O
  - Predictable performance needed
- **Optimizations:**
  - Bottom-up (iterative) implementation
  - Use insertion sort for small subarrays
  - Parallel merge sort for multi-core systems

### Heap Sort
- **Alternative Names:** Heap sorting
- **Time Complexity:** 
  - Best: O(n log n)
  - Average: O(n log n)
  - Worst: O(n log n)
- **Space Complexity:** O(1) (in-place)
- **Key Use Cases:**
  - In-place sorting with guaranteed O(n log n) performance
  - Priority queue implementation
  - Finding top-k elements (use min-heap of size k)
  - Memory-constrained environments
- **When to Choose:**
  - Worst-case performance guarantee needed
  - Memory is extremely constrained
  - Building priority queues
  - Not suitable for nearly-sorted data (no early exit)
- **Optimizations:**
  - Build heap in O(n) time (Floyd's algorithm)
  - Use binary heap for arrays, binomial heap for decreases

### Radix Sort
- **Alternative Names:** Bucket sort (for integers), LSD radix sort
- **Time Complexity:** 
  - Best: O(nk)
  - Average: O(nk)
  - Worst: O(nk)
  - Where k = number of digits/characters
- **Space Complexity:** O(n + k) (buckets)
- **Key Use Cases:**
  - Sorting integers with fixed width
  - Sorting strings by characters
  - Stable sorting for digit-by-digit processing
  - When k is small relative to n
- **When to Choose:**
  - Integers with bounded range
  - Strings with fixed maximum length
  - Need stable sorting
  - k is O(1) or very small
  - Not suitable for floating-point or large k values
- **Optimizations:**
  - MSD (Most Significant Digit) for string sorting
  - LSD (Least Significant Digit) for fixed-width integers
  - Use counting sort as stable subroutine

### Bucket Sort
- **Alternative Names:** Bin sort
- **Time Complexity:** 
  - Best: O(n + k) (uniform distribution)
  - Average: O(n + k)
  - Worst: O(n²) (all elements in one bucket)
- **Space Complexity:** O(nk) (buckets)
- **Key Use Cases:**
  - Uniformly distributed floating-point numbers
  - Sorting data that can be partitioned into ranges
  - Database partitioning
  - Parallel processing (independent buckets)
- **When to Choose:**
  - Input is uniformly distributed over a range
  - Can create appropriate number of buckets
  - Parallel sorting allowed
  - Not suitable for skewed distributions

### Insertion Sort
- **Time Complexity:** 
  - Best: O(n) (already sorted)
  - Average: O(n²)
  - Worst: O(n²)
- **Space Complexity:** O(1) (in-place)
- **Key Use Cases:**
  - Nearly-sorted data
  - Small datasets (n < 20)
  - Online algorithms (inserting elements one at a time)
  - Subroutine for hybrid algorithms
- **When to Choose:**
  - Small input sizes (often used as base case)
  - Data is already partially sorted
  - Online sorting (streaming input)
  - Minimal memory overhead required

### Bubble Sort
- **Time Complexity:** 
  - Best: O(n) (optimized with swapped flag)
  - Average: O(n²)
  - Worst: O(n²)
- **Space Complexity:** O(1) (in-place)
- **Key Use Cases:**
  - Educational demonstrations
  - Detecting nearly-sorted data
  - Small datasets with few swaps needed
- **When to Choose:**
  - Almost never for production (except teaching)
  - Detect if data is already sorted (O(n))
  - Very small datasets where simplicity matters

### Selection Sort
- **Time Complexity:** 
  - Best: O(n²)
  - Average: O(n²)
  - Worst: O(n²)
- **Space Complexity:** O(1) (in-place)
- **Key Use Cases:**
  - Minimizing number of swaps
  - Small datasets where swaps are expensive
  - Educational demonstrations
- **When to Choose:**
  - Memory writes are costly (minimize to n swaps)
  - Small datasets
  - Never for large datasets

### Shell Sort
- **Alternative Names:** Shell's method
- **Time Complexity:** 
  - Best: O(n log² n)
  - Average: O(n log² n) to O(n^(3/2))
  - Worst: O(n²)
- **Space Complexity:** O(1) (in-place)
- **Key Use Cases:**
  - Middle ground between O(n²) and O(n log n)
  - When quick sort/merge sort are too complex
  - Embedded systems with limited resources
- **When to Choose:**
  - Need better than O(n²) without complexity of O(n log n)
  - Memory-constrained but need better performance

---
  related-skills: abl-v10-learning, abl-v12-learning

## Searching Algorithms

### Binary Search
- **Alternative Names:** Half-interval search, logarithmic search
- **Time Complexity:** 
  - Best: O(1)
  - Average: O(log n)
  - Worst: O(log n)
- **Space Complexity:** O(1) iterative, O(log n) recursive
- **Key Use Cases:**
  - Finding elements in sorted arrays
  - Finding first/last occurrence
  - Finding minimum/maximum in bitonic/unimodal functions
  - Floating-point binary search (precision search)
- **When to Choose:**
  - Data is sorted or can be sorted
  - Need O(log n) lookup time
  - Static data (not frequently updated)
  - Not suitable for unsorted or frequently changing data
- **Variants:**
  - Lower bound / Upper bound (first ≥ / first >)
  - Rotated array search
  - 2D matrix search (row-wise and column-wise sorted)
  - Real number binary search (for precision)

### Interpolation Search
- **Time Complexity:** 
  - Best: O(log log n) (uniform distribution)
  - Average: O(log log n)
  - Worst: O(n) (non-uniform distribution)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Uniformly distributed sorted data
  - Large datasets with known distribution
  - Numeric data with continuous values
- **When to Choose:**
  - Data is uniformly distributed
  - Data is sorted and large
  - Not suitable for sparse or non-uniform data

### Exponential Search
- **Alternative Names:** Galloping search, doubling search
- **Time Complexity:** 
  - Best: O(1)
  - Average: O(log i)
  - Worst: O(log i)
  - Where i is the position of the element
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Unbounded/infinite sorted arrays
  - Finding element position for binary search
  - When element might be near the beginning
- **When to Choose:**
  - Sorted array but size unknown
  - Element likely near start
  - As preprocessing for binary search

### Linear Search
- **Time Complexity:** 
  - Best: O(1)
  - Average: O(n)
  - Worst: O(n)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Unsorted data
  - Small datasets
  - Single search (sorting not worth it)
  - Linked lists
- **When to Choose:**
  - Data is unsorted
  - Small n where O(n) is acceptable
  - Single search on large dataset

### Ternary Search
- **Time Complexity:** 
  - Best: O(1)
  - Average: O(log n)
  - Worst: O(log n)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Finding minimum/maximum of unimodal function
  - Convex/concave functions
  - Golden section search alternative
- **When to Choose:**
  - Optimization of unimodal functions
  - When binary search doesn't apply
  - Compare with golden section search

### Jump Search
- **Alternative Names:** Block search
- **Time Complexity:** 
  - Best: O(1)
  - Average: O(√n)
  - Worst: O(√n)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Sorted data where jumping back is expensive
  - Large datasets on disk
  - Intermediate between linear and binary search
- **When to Choose:**
  - Jumping back is costly (disk seeks)
  - O(√n) is acceptable

---
  related-skills: abl-v10-learning, abl-v12-learning

## Graph Algorithms

### Breadth-First Search (BFS)
- **Time Complexity:** O(V + E)
- **Space Complexity:** O(V) (queue)
- **Key Use Cases:**
  - Shortest path in unweighted graphs
  - Level-order traversal
  - Connected components
  - Bipartite checking
  - Web crawling
- **When to Choose:**
  - Unweighted shortest path
  - Need all nodes at distance k
  - Flow networks (Ford-Fulkerson)
  - Social network analysis

### Depth-First Search (DFS)
- **Time Complexity:** O(V + E)
- **Space Complexity:** O(V) (recursion stack)
- **Key Use Cases:**
  - Topological sorting
  - Cycle detection
  - Strongly connected components
  - Maze solving
  - Path finding
- **When to Choose:**
  - Need to explore all paths
  - Stack-based iteration
  - Topological sort
  - Tarjan's SCC algorithm
- **Variants:**
  - Iterative DFS (explicit stack)
  - DFS with parent tracking
  - DFS forest (multiple components)

### Dijkstra's Algorithm
- **Alternative Names:** Dijkstra's shortest path
- **Time Complexity:** 
  - O(V²) (naive)
  - O((V + E) log V) (with priority queue)
  - O(V log V + E) (Fibonacci heap)
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Single-source shortest path (non-negative weights)
  - Routing protocols
  - GPS navigation
  - Network optimization
- **When to Choose:**
  - Non-negative edge weights
  - Single source to all destinations
  - Need exact shortest path
  - Not suitable for negative weights
- **Optimizations:**
  - Use Fibonacci heap for O(V log V + E)
  - Early termination when target reached
  - Bidirectional Dijkstra for source-target

### Bellman-Ford Algorithm
- **Time Complexity:** O(VE)
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Single-source shortest path with negative weights
  - Negative cycle detection
  - Distributed routing
  - Linear programming
- **When to Choose:**
  - Graph may have negative edge weights
  - Need negative cycle detection
  - Distributed systems
  - Not suitable for dense graphs (too slow)

### Floyd-Warshall Algorithm
- **Alternative Names:** Floyd's algorithm, Roy-Warshall
- **Time Complexity:** O(V³)
- **Space Complexity:** O(V²)
- **Key Use Cases:**
  - All-pairs shortest path
  - Transitive closure
  - Negative cycle detection
  - Density graphs
- **When to Choose:**
  - Need all-pairs shortest paths
  - Graph is dense (V³ acceptable)
  - Small V (V < 200-500)
  - Transitive closure needed
- **Optimizations:**
  - Use only when V is small
  - Can detect negative cycles

### Kruskal's Algorithm
- **Alternative Names:** Minimum spanning tree (Kruskal)
- **Time Complexity:** O(E log E) or O(E log V)
- **Space Complexity:** O(V) (disjoint set)
- **Key Use Cases:**
  - Minimum spanning tree
  - Network design
  - Approximation algorithms
  - Clustering
- **When to Choose:**
  - Sparse graphs
  - Need MST
  - Edge-based processing
  - Disjoint set data structure available
- **Optimizations:**
  - Union by rank + path compression
  - Pre-sort edges

### Prim's Algorithm
- **Time Complexity:** 
  - O(V²) (naive)
  - O((V + E) log V) (priority queue)
  - O(E + V log V) (Fibonacci heap)
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Minimum spanning tree
  - Dense graphs
  - Network design
  - Image segmentation
- **When to Choose:**
  - Dense graphs (more edges)
  - Need MST
  - Vertex-based processing
  - Adjacency matrix available
- **Comparison with Kruskal:**
  - Kruskal better for sparse
  - Prim better for dense

### Topological Sort
- **Time Complexity:** O(V + E)
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Dependency resolution
  - Course scheduling
  - Build systems
  - Job scheduling
- **When to Choose:**
  - Directed acyclic graph (DAG)
  - Need linear ordering
  - Dependency ordering required
  - Cycle detection (if not DAG)
- **Methods:**
  - DFS-based (post-order)
  - Kahn's algorithm (BFS with in-degrees)

### A* Search Algorithm
- **Time Complexity:** O(b^d) worst case (where b = branching, d = depth)
- **Space Complexity:** O(b^d)
- **Key Use Cases:**
  - Heuristic path finding
  - Game AI
  - Robotics
  - Puzzle solving
- **When to Choose:**
  - Need shortest path with heuristic
  - Admissible heuristic available
  - Want to reduce search space
  - Not suitable without good heuristic
- **Heuristic Requirements:**
  - Admissible (never overestimates)
  - Consistent (triangle inequality)
- **Variants:**
  -IDA* (Iterative Deepening A*)
  - SMA* (Simplified Memory-Bounded A*)

### Tarjan's SCC Algorithm
- **Time Complexity:** O(V + E)
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Strongly connected components
  - Graph condensation
  - Dependency analysis
  - Circuit simulation
- **When to Choose:**
  - Find SCCs in directed graph
  - Graph condensation needed
  - Cycle analysis
  - Topological sort on SCCs

### Johnson's Algorithm
- **Time Complexity:** O(V² log V + VE)
- **Space Complexity:** O(V²)
- **Key Use Cases:**
  - All-pairs shortest path (sparse graphs)
  - Graphs with negative weights
- **When to Choose:**
  - Sparse graphs, all-pairs shortest path
  - Negative weights allowed
  - Better than Floyd-Warshall for sparse

### Chinese Postman Problem
- **Time Complexity:** O(V² log V + E) for undirected
- **Space Complexity:** O(V²)
- **Key Use Cases:**
  - Route optimization (mail carrier)
  - Circuit board inspection
  - Street cleaning
- **When to Choose:**
  - Need to traverse all edges
  - Minimize total distance
  - Graph may have odd-degree vertices

### Traveling Salesman Problem (Approximations)
- **Time Complexity:** Varies by heuristic
- **Space Complexity:** O(V²)
- **Key Use Cases:**
  - Route optimization
  - Logistics
  - Manufacturing (drill positioning)
- **Heuristics:**
  - Nearest neighbor: O(V²)
  - Christofides: O(V³) (3/2 approximation)
  - Simulated annealing
  - Genetic algorithms
- **When to Choose:**
  - NP-hard problem, need approximation
  - Real-world constraints
  - Exact solution not required

### Minimum Cut (Stoer-Wagner)
- **Time Complexity:** O(V³) or O(VE + V² log V)
- **Space Complexity:** O(V²)
- **Key Use Cases:**
  - Network reliability
  - Image segmentation
  - Clustering
- **When to Choose:**
  - Find minimum edge cut
  - Graph partitioning
  - No source-sink constraint

### Maximum Flow (Ford-Fulkerson)
- **Time Complexity:** O(E * max_flow) (integer capacities)
- **Space Complexity:** O(V + E)
- **Key Use Cases:**
  - Network flow
  - Bipartite matching
  - Image segmentation
  - transportation problems
- **When to Choose:**
  - Flow network optimization
  - Matching problems
  - Integer capacities
- **Variants:**
  - Edmonds-Karp: O(VE²) (BFS)
  - Dinic's: O(V²E) (level graph)
  - Push-relabel: O(V²E) (more efficient in practice)

### Hopcroft-Karp Algorithm
- **Time Complexity:** O(E * √V)
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Maximum bipartite matching
  - Assignment problems
  - Job scheduling
- **When to Choose:**
  - Bipartite graph matching
  - Better than Ford-Fulkerson for bipartite
  - Sparse graphs

### Max-Flow Min-Cut Theorem Applications
- **Time Complexity:** Same as underlying max-flow algorithm
- **Key Use Cases:**
  - Image segmentation (graph cuts)
  - Computer vision
  - Parallel computing
  - VLSI design

---
  related-skills: abl-v10-learning, abl-v12-learning

## Dynamic Programming

### 0/1 Knapsack Problem
- **Time Complexity:** O(nW) where W = capacity
- **Space Complexity:** O(nW) or O(W) (optimized)
- **Key Use Cases:**
  - Resource allocation
  - Investment portfolio
  - Container packing
  - Knapsack variations
- **When to Choose:**
  - Items can only be taken once
  - Capacity constraint
  - Optimal substructure exists
- **Variants:**
  - Unbounded knapsack (unlimited items)
  - Bounded knapsack (limited quantities)
  - Multiple knapsack
  - Fractional knapsack (greedy, not DP)
- **Optimizations:**
  - Space optimization (1D array)
  - Pruning based on bounds
  - Meet-in-the-middle for large n

### Longest Common Subsequence (LCS)
- **Time Complexity:** O(mn) where m, n = string lengths
- **Space Complexity:** O(mn) or O(min(m, n))
- **Key Use Cases:**
  - Diff utilities
  - Bioinformatics (DNA matching)
  - Version control
  - Plagiarism detection
- **When to Choose:**
  - Two sequences common subsequence
  - Order matters, continuity not required
  - Not suitable for substring (use KMP/Rabin-Karp)
- **Reconstruction:**
  - Track decisions during DP
  - Backtrack to build actual LCS
- **Optimizations:**
  - Hirschberg's algorithm: O(min(m,n)) space
  - Early termination if no match

### Longest Increasing Subsequence (LIS)
- **Time Complexity:** O(n²) (DP) or O(n log n) (patience sorting)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Pattern recognition
  - Stock market analysis
  - Bioinformatics
  - Data smoothing
- **When to Choose:**
  - Strictly increasing (or non-decreasing)
  - Need longest monotonic subsequence
- **O(n log n) Method:**
  - Maintain active lists
  - Binary search for insertion
  - Track predecessors for reconstruction
- **Variants:**
  - Longest decreasing subsequence
  - Bitonic subsequence
  - Circular variant

### Matrix Chain Multiplication
- **Time Complexity:** O(n³)
- **Space Complexity:** O(n²)
- **Key Use Cases:**
  - Optimal parenthesization
  - Compiler optimization
  - Dynamic programming example
- **When to Choose:**
  - Matrix multiplication order
  - Minimize scalar multiplications
  - All matrices compatible
- **Optimizations:**
  - Store optimal split points
  - Reconstruction for actual multiplication order

### Edit Distance (Levenshtein)
- **Time Complexity:** O(mn)
- **Space Complexity:** O(mn) or O(min(m,n))
- **Key Use Cases:**
  - Spell checking
  - DNA sequence alignment
  - Fuzzy string matching
  - Version control
- **When to Choose:**
  - Minimum edits to transform string A to B
  - Insert, delete, replace operations
- **Variants:**
  - Hamming distance (same length, replace only)
  - Damerau-Levenshtein (adjacent swap)
  - Wagner-Fischer (generalization)
- **Optimizations:**
  - Space optimization
  - Early termination for small distances

### Coin Change Problem
- **Time Complexity:** O(n * amount) where n = coin types
- **Space Complexity:** O(amount)
- **Key Use Cases:**
  - Making change (min coins)
  - Combinatorial counting
  - Resource allocation
- **When to Choose:**
  - Minimize number of coins
  - Count ways to make amount
  - DP applies (optimal substructure)
- **Variants:**
  - Minimum coins (0/1 or unlimited)
  - Count combinations
  - With limited coins
  - Greedy doesn't always work

### Subset Sum Problem
- **Time Complexity:** O(n * sum) or O(n * 2^(n/2)) (meet-in-middle)
- **Space Complexity:** O(n * sum)
- **Key Use Cases:**
  - Scheduling
  - Resource allocation
  - Cryptography
  - NP-complete problems
- **When to Choose:**
  - Find subset with given sum
  - Decision problem (existential)
  - Optimization variant exists
- **Optimizations:**
  - Meet-in-the-middle for large n
  - Bitset optimization
  - Pseudo-polynomial DP

### Traveling Salesman Problem (Dynamic Programming)
- **Time Complexity:** O(n² * 2^n)
- **Space Complexity:** O(n * 2^n)
- **Key Use Cases:**
  - Exact TSP for small n
  - Algorithm comparison
  - Benchmarking
- **When to Choose:**
  - n < 20-25
  - Need exact solution
  - Not suitable for large n
- **Held-Karp Algorithm:**
  - DP with bitmask
  - Track visited set and last city

### Partition Problem
- **Time Complexity:** O(n * sum)
- **Space Complexity:** O(sum)
- **Key Use Cases:**
  - Fair division
  - Load balancing
  - NP-complete problems
- **When to Choose:**
  - Split into equal-sum subsets
  - Decision variant
  - Optimization (minimize difference)

### Longest Palindromic Subsequence
- **Time Complexity:** O(n²)
- **Space Complexity:** O(n²)
- **Key Use Cases:**
  - Palindrome analysis
  - Bioinformatics
  - String algorithms
- **When to Choose:**
  - Find longest palindromic subsequence
  - Not substring (LPS can skip chars)
- **Variants:**
  - Longest palindromic substring (manacher's O(n))
  - Minimum deletions to make palindrome

### Word Break Problem
- **Time Complexity:** O(n²) with dictionary lookup
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Text segmentation
  - Dictionary matching
  - Natural language processing
- **When to Choose:**
  - Can string be segmented into dictionary words?
  - Count all possible segmentations
- **Optimizations:**
  - Trie for dictionary lookup
  - Memoization
  - Early termination

### Wildcard Pattern Matching
- **Time Complexity:** O(mn)
- **Space Complexity:** O(mn) or O(min(m,n))
- **Key Use Cases:**
  - Regex matching
  - File pattern matching
  - Text processing
- **When to Choose:**
  - Pattern with ? and * wildcards
  - Match against text
- **Variants:**
  - Regex with character classes
  - Case sensitivity
  - Multiline support

### Unique Paths
- **Time Complexity:** O(mn)
- **Space Complexity:** O(mn) or O(min(m,n))
- **Key Use Cases:**
  - Grid path counting
  - Combinatorics
  - Robot motion planning
- **When to Choose:**
  - Grid with obstacles
  - Count paths from top-left to bottom-right
  - Only right/down moves allowed
- **Variants:**
  - With obstacles (grid[i][j] = 1 blocked)
  - With costs (minimum cost path)
  - With forbidden cells

### Egg Dropping Puzzle
- **Time Complexity:** O(n * k²) or O(n * log k)
- **Space Complexity:** O(nk)
- **Key Use Cases:**
  - Testing/quality assurance
  - Optimization under uncertainty
  - Decision theory
- **When to Choose:**
  - Minimize trials to find critical floor
  - k eggs, n floors
  - Binary search when 2 eggs

### Catalan Numbers Applications
- **Time Complexity:** O(n²) for DP, O(n) for formula
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Parentheses matching
  - Binary tree counting
  - Polygon triangulation
  - Dyck paths
- **When to Choose:**
  - Problems with Catalan structure
  - Combinatorial counting
  - Recursive structure
- **Applications:**
  - n pairs of valid parentheses
  - n+1 leaves in full binary tree
  - n×n grid monotonic paths
  - Convex polygon triangulation

### Optimal Binary Search Tree
- **Time Complexity:** O(n³)
- **Space Complexity:** O(n²)
- **Key Use Cases:**
  - Compiler design
  - Database indexing
  - Optimal search structure
- **When to Choose:**
  - Given probabilities, build optimal BST
  - Minimize search cost
  - Static search set
- **Optimizations:**
  - Knuth's optimization (if quadrangle inequality)
  - O(n²) with Knuth optimization

### Bitmask DP Applications
- **Time Complexity:** O(n * 2^n) or O(m * 3^(n/2))
- **Space Complexity:** O(2^n)
- **Key Use Cases:**
  - Subset problems
  - Graph problems (TSP, Hamiltonian)
  - Set cover
- **When to Choose:**
  - n < 20-25
  - Subsets or states can be encoded as bitmask
  - State space is 2^n

### DP on Trees
- **Time Complexity:** O(V) for simple, O(V * k²) for k-state
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Tree diameter
  - Tree center
  - Tree coloring
  - Tree independence
- **When to Choose:**
  - Tree structure
  - Root the tree arbitrarily
  - Combine children's results
- **Common Patterns:**
  - Tree diameter (two DFS)
  - Tree center (eccentricity)
  - Tree isomorphism
  - Tree knapsack

### DP with Bitwise Operations
- **Time Complexity:** Varies
- **Space Complexity:** Varies
- **Key Use Cases:**
  - Subset XOR sums
  - Bit manipulation problems
  - State compression
- **When to Choose:**
  - Bitwise operations on subsets
  - XOR-based problems
  - Bitmask DP

---
  related-skills: abl-v10-learning, abl-v12-learning

## Greedy Algorithms

### Activity Selection Problem
- **Time Complexity:** O(n log n) (sorting) or O(n) (if sorted)
- **Space Complexity:** O(1) extra
- **Key Use Cases:**
  - Scheduling resources
  - Meeting room allocation
  - Single-resource scheduling
- **When to Choose:**
  - Select maximum non-overlapping activities
  - Greedy choice works (earliest finish time)
  - Not for weighted activities (need DP)

### Huffman Coding
- **Time Complexity:** O(n log n) (priority queue)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Data compression
  - Prefix codes
  - Optimal binary encoding
- **When to Choose:**
  - Character frequencies known
  - Minimal expected codeword length
  - Prefix-free encoding needed
- **Algorithm:**
  - Build frequency table
  - Create min-heap of nodes
  - Combine two smallest frequencies
  - Build tree and assign codes

### Kruskal's MST (Greedy)
- **Time Complexity:** O(E log E)
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Minimum spanning tree
  - Network design
  - Clustering
- **When to Choose:**
  - Sparse graphs
  - Edge-based processing
  - Union-find available

### Prim's MST (Greedy)
- **Time Complexity:** O(V²) or O(E log V)
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Minimum spanning tree
  - Dense graphs
  - Vertex-based processing
- **When to Choose:**
  - Dense graphs
  - Adjacency matrix
  - Vertex expansion

### Dijkstra's Algorithm (Greedy)
- **Time Complexity:** O((V + E) log V)
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Shortest path (non-negative)
  - Routing
  - Network optimization
- **When to Choose:**
  - Non-negative edge weights
  - Single source
  - Greedy choice (shortest known distance)

### Fractional Knapsack
- **Time Complexity:** O(n log n) (sorting)
- **Space Complexity:** O(1) extra
- **Key Use Cases:**
  - Resource allocation
  - Maximizing value with weight limit
  - Continuous items
- **When to Choose:**
  - Items can be split
  - Value/weight ratio matters
  - Not 0/1 knapsack (needs DP)

### Job Sequencing with Deadlines
- **Time Complexity:** O(n²) or O(n log n) with union-find
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Job scheduling
  - Profit maximization
  - Deadline constraints
- **When to Choose:**
  - Jobs with deadlines and profits
  - One unit time per job
  - Maximize total profit

### Coin Change (Greedy)
- **Time Complexity:** O(n) where n = number of coins
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Standard currency systems
  - USD, EUR coin systems
  - Greedy-valid denominations
- **When to Choose:**
  - Greedy-valid currency (US, EUR)
  - Not for arbitrary denominations
  - Check if greedy works first

### Graph Coloring (Greedy)
- **Time Complexity:** O(V + E)
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Register allocation
  - Scheduling
  - Map coloring
- **When to Choose:**
  - Approximation needed
  - Order matters
  - Not optimal but fast

### Stable Marriage Problem (Gale-Shapley)
- **Time Complexity:** O(n²)
- **Space Complexity:** O(n²)
- **Key Use Cases:**
  - Hospital-resident matching
  - School choice
  - Two-sided matching
- **When to Choose:**
  - Two sets with preferences
  - Stable matching required
  - Men-optimal/women-optimal

### Minimum Spanning Tree (General)
- **Time Complexity:** O(E log V)
- **Space Complexity:** O(V)
- **Key Use Cases:**
  - Network design
  - Approximation algorithms
  - Clustering
- **When to Choose:**
  - Connected, undirected graph
  - Minimum total edge weight
  - Greedy algorithms work

### Job Scheduler (Shortest Job First)
- **Time Complexity:** O(n log n) (priority queue)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Process scheduling
  - Batch processing
  - Minimize average wait time
- **When to Choose:**
  - Process burst times known
  - Minimize average waiting time
  - Non-preemptive or preemptive

### Interval Scheduling (Weighted)
- **Time Complexity:** O(n log n) with binary search
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Resource allocation with weights
  - Profit maximization
  - Job selection
- **When to Choose:**
  - Weighted activities
  - Non-overlapping subset
  - Greedy doesn't work, use DP

---
  related-skills: abl-v10-learning, abl-v12-learning

## String Algorithms

### KMP (Knuth-Morris-Pratt)
- **Time Complexity:** O(n + m) where n = text, m = pattern
- **Space Complexity:** O(m) (LPS array)
- **Key Use Cases:**
  - Pattern matching
  - DNA sequence search
  - Text editors
  - Security scanning
- **When to Choose:**
  - Multiple pattern occurrences
  - Pattern has repetitions
  - Need linear time guarantee
  - Preprocessing pattern allowed
- **LPS Array:**
  - Longest proper prefix which is also suffix
  - Avoids re-comparing characters

### Rabin-Karp
- **Time Complexity:** O(n + m) average, O(nm) worst
- **Space Complexity:** O(1) (constant operations)
- **Key Use Cases:**
  - Plagiarism detection
  - Multi-pattern matching
  - String hashing
  - Duplicate detection
- **When to Choose:**
  - Multiple patterns to search
  - Rolling hash useful
  - Average case acceptable
  - Hash collisions manageable

### Boyer-Moore
- **Time Complexity:** O(n/m * m!) worst, O(n/m) average
- **Space Complexity:** O(σ) where σ = alphabet size
- **Key Use Cases:**
  - Large alphabet (ASCII, Unicode)
  - Large text, small pattern
  - Text editors (grep)
  - Bioinformatics
- **When to Choose:**
  - Large alphabet (letters, not just ACGT)
  - Pattern near end of text
  - Good heuristic behavior
  - Not for small alphabet

### Z-Algorithm
- **Time Complexity:** O(n + m)
- **Space Complexity:** O(n + m)
- **Key Use Cases:**
  - Pattern matching
  - String prefix matching
  - String repetition detection
  - Concatenation problems
- **When to Choose:**
  - Z-array computation
  - Prefix matching
  - Alternative to KMP
  - Suffix matching with sentinel

### Manacher's Algorithm
- **Time Complexity:** O(n)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Longest palindromic substring
  - All palindromes in string
  - Palindrome density
- **When to Choose:**
  - Linear time palindrome
  -Substring (not subsequence)
  - All palindromes needed
- **Key Insight:**
  - Uses symmetry to avoid re-computation
  - Expands around centers with memoization

### Suffix Array
- **Time Complexity:** O(n log n) (sort) or O(n) (SAIS)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Pattern matching (with binary search)
  - Burrows-Wheeler transform
  - Data compression
  - Genomics
- **When to Choose:**
  - Multiple queries on same text
  - Memory efficiency
  - LCP array for additional queries
  - Alternative to suffix tree
- **Construction:**
  - Sorting all suffixes
  - Radix sort for O(n)
  - DC3 algorithm for O(n)

### Suffix Tree (Ukkonen's)
- **Time Complexity:** O(n)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Fast pattern matching
  - Longest repeated substring
  - Substring queries
  - Bioinformatics
- **When to Choose:**
  - Single query, fast lookup
  - Multiple pattern queries
  - Space permits
  - Complex query support
- **Applications:**
  - Longest repeated substring
  - Longest common substring
  - Palindrome detection

### Rolling Hash (Rabin-Karp)
- **Time Complexity:** O(1) per shift
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Rabin-Karp
  - String matching
  - Duplicate detection
  - Streaming
- **When to Choose:**
  - Multiple substring hashes needed
  - Window sliding
  - Hash collision handling

### Longest Prefix Suffix (LPS) / Failure Function
- **Time Complexity:** O(m)
- **Space Complexity:** O(m)
- **Key Use Cases:**
  - KMP algorithm
  - String border
  - Periodicity detection
- **When to Choose:**
  - KMP preprocessing
  - String borders
  - Pattern analysis

### Boyer-Moore-Horspool
- **Time Complexity:** O(n) average
- **Space Complexity:** O(σ)
- **Key Use Cases:**
  - Simplified Boyer-Moore
  - Text search
  - Binary files
- **When to Choose:**
  - Simpler than Boyer-Moore
  - Good average performance
  - Fixed alphabet

### Apostolico-Giancarlo
- **Time Complexity:** O(n) average
- **Space Complexity:** O(m)
- **Key Use Cases:**
  - Speeding up KMP
  - Avoiding re-comparisons
  - Pattern matching
- **When to Choose:**
  - KMP with early termination
  - Memory bandwidth limited
  - Large pattern

### Multiple Pattern Matching (Aho-Corasick)
- **Time Complexity:** O(n + m + z) where z = matches
- **Space Complexity:** O(m * σ)
- **Key Use Cases:**
  - Multiple keywords
  - Security scanning
  - Text processing
  - intrusion detection
- **When to Choose:**
  - Multiple patterns (3+)
  - All occurrences needed
  - Linear time in text length
  - Dictionary matching
- **Structure:**
  - Trie with failure links
  - Output function

### Suffix Trie
- **Time Complexity:** O(m) for query
- **Space Complexity:** O(m * σ^m) (exponential)
- **Key Use Cases:**
  - Educational
  - Small strings only
  - Pattern matching
- **When to Choose:**
  - Never for production
  - Only for small m
  - Understand suffix trees

### Longest Repeated Substring
- **Time Complexity:** O(n) (suffix tree) or O(n log n) (suffix array)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Plagiarism detection
  - DNA analysis
  - Code duplication
- **When to Choose:**
  - Repeat detection
  - Suffix tree/array available
  - Overlapping allowed or not

### Longest Common Substring
- **Time Complexity:** O(n + m) (suffix tree) or O(nm) (DP)
- **Space Complexity:** O(n + m)
- **Key Use Cases:**
  - DNA comparison
  - File diff
  - Code similarity
- **When to Choose:**
  - Contiguous match
  - Suffix tree/array for linear
  - DP for simplicity
- **DP Approach:**
  - Table[i][j] = length of common substring ending at i, j
  - Maximum value is answer

### Palindromic Tree (Eertree)
- **Time Complexity:** O(n)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - All palindromes in string
  - Palindrome counting
  - Palindromic density
- **When to Choose:**
  - All palindromes
  - Online algorithm
  - Memory efficient
- **Structure:**
  - Two roots (even/odd length)
  - Suffix links
  - Palindromic nodes

### String Matching with Wildcards
- **Time Complexity:** O(mn)
- **Space Complexity:** O(mn)
- **Key Use Cases:**
  - Shell globbing
  - File matching
  - Query patterns
- **When to Choose:**
  - Pattern with ? and *
  - DP approach
  - Memoization for optimization

---
  related-skills: abl-v10-learning, abl-v12-learning

## Mathematical Algorithms

### Euclidean GCD
- **Time Complexity:** O(log min(a, b))
- **Space Complexity:** O(1) iterative, O(log n) recursive
- **Key Use Cases:**
  - Simplifying fractions
  - LCM calculation
  - Cryptography
  - Number theory
- **When to Choose:**
  - Greatest common divisor
  - Euclidean algorithm
  - Binary GCD alternative for bit operations
- **Extensions:**
  - Extended GCD (Bezout coefficients)
  - Multiple number GCD
  - LCM = (a * b) / GCD(a, b)

### Binary Exponentiation (Fast Power)
- **Time Complexity:** O(log n)
- **Space Complexity:** O(log n) recursive, O(1) iterative
- **Key Use Cases:**
  - Power computation
  - Matrix exponentiation
  - Modular exponentiation
  - Fibonacci numbers
- **When to Choose:**
  - Large exponents
  - Modular arithmetic
  - Matrix powers
  - Exponentiation by squaring
- **Variants:**
  - Iterative implementation
  - Modular exponentiation (a^b mod m)
  - Matrix exponentiation
  - Fast Fibonacci (O(log n))

### Sieve of Eratosthenes
- **Time Complexity:** O(n log log n)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Prime generation
  - Primality testing
  - Number theory
  - Cryptography preprocessing
- **When to Choose:**
  - Generate primes up to n
  - Multiple primality tests
  - Sieve is better for batch
- **Optimizations:**
  - Sieve of Atkin (O(n / log log n))
  - Segmented sieve (for large n)
  - Only odd numbers
  - Bitset compression

### Extended Euclidean Algorithm
- **Time Complexity:** O(log min(a, b))
- **Space Complexity:** O(log n)
- **Key Use Cases:**
  - Modular inverse
  - Bezout coefficients
  - Chinese Remainder Theorem
  - RSA cryptography
- **When to Choose:**
  - Find x, y such that ax + by = GCD(a, b)
  - Modular inverse exists
  - Linear Diophantine equations

### Miller-Rabin Primality Test
- **Time Complexity:** O(k * log³ n) where k = iterations
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Large number primality
  - Cryptography
  - Probabilistic testing
  - BigInteger libraries
- **When to Choose:**
  - Large numbers (100+ bits)
  - Probabilistic acceptable
  - Deterministic for 64-bit (specific bases)
- **Deterministic:**
  - For n < 2^64, specific bases guarantee correctness
  - Common bases: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37

### Lucas-Lehmer Primality Test
- **Time Complexity:** O(log² p) for Mersenne number M_p
- **Space Complexity:** O(log p)
- **Key Use Cases:**
  - Mersenne primes
  - Large prime discovery
  - GIMPS
- **When to Choose:**
  - Mersenne numbers (2^p - 1)
  - specifically for Mersenne primes
  - Deterministic for Mersenne

### Modular Arithmetic
- **Key Operations:**
  - Addition: (a + b) mod m
  - Multiplication: (a * b) mod m
  - Division: a * mod_inverse(b, m) mod m
  - Subtraction: (a - b + m) mod m
- **When to Choose:**
  - Avoid overflow
  - Cryptography
  - Large number arithmetic

### Fast Fourier Transform (FFT)
- **Time Complexity:** O(n log n)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Polynomial multiplication
  - Signal processing
  - Large integer multiplication
  - Convolution
- **When to Choose:**
  - Polynomial multiplication
  - Convolution theorem
  - Signal analysis
  - Circular convolution

### Karatsuba Multiplication
- **Time Complexity:** O(n^log₂3) ≈ O(n^1.585)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Large integer multiplication
  - divide and conquer
  - Algorithm comparison
- **When to Choose:**
  - Large integers (beyond native type)
  - Recursive approach
  - Better than O(n²) for big n

### Strassen's Matrix Multiplication
- **Time Complexity:** O(n^log₂7) ≈ O(n^2.807)
- **Space Complexity:** O(n²)
- **Key Use Cases:**
  - Large matrix multiplication
  - Divide and conquer
  - Algorithm comparison
- **When to Choose:**
  - Large matrices
  - Beyond naive O(n³)
  - Space for recursion
  - Crossover point exists (n > 100-1000)

### Chinese Remainder Theorem
- **Time Complexity:** O(k * log² n) where k = congruences
- **Space Complexity:** O(k)
- **Key Use Cases:**
  - Modular arithmetic
  - Cryptography (RSA)
  - Large number computation
  - Number theory
- **When to Choose:**
  - System of congruences
  - Pairwise coprime moduli
  - Reconstruct from remainders
  - CRT optimization

### Discrete Logarithm
- **Algorithms:**
  - Brute force: O(n)
  - Baby-step Giant-step: O(√n) time/space
  - Pollard's rho: O(√n) time, O(1) space
  - Pohlig-Hellman: for smooth order
- **When to Choose:**
  - Solve a^x ≡ b (mod n)
  - Cryptography (Diffie-Hellman, ECC)
  - Group theory
- **Baby-step Giant-step:**
  - Time: O(√n)
  - Space: O(√n)
  - Precompute baby steps

### BigInteger Arithmetic
- **Algorithms:**
  - Addition: O(n)
  - Multiplication: O(n²) naive, O(n^1.585) Karatsuba
  - Division: O(n²) long division
  - GCD: O(log n) Euclidean
- **When to Choose:**
  - Arbitrary precision
  - Libraries available (GMP, BigInteger)
  - Algorithm selection based on size

### Polygon Area (Shoelace Formula)
- **Time Complexity:** O(n) where n = vertices
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Geometry
  - Computer graphics
  - Geographic information
- **When to Choose:**
  - Simple polygon area
  - Vertices in order
  - Positive for CCW, negative for CW

### Point in Polygon (Ray Casting)
- **Time Complexity:** O(n) where n = polygon vertices
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Graphics
  - GIS
  - Collision detection
- **When to Choose:**
  - Point containment
  - Simple polygons
  -射线投射法

### Convex Hull (Graham Scan)
- **Time Complexity:** O(n log n)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Computational geometry
  - Collision detection
  - Pattern recognition
  - Image processing
- **When to Choose:**
  - Convex hull needed
  - Points in plane
  - Graham scan or Andrew's monotone chain
- **Andrew's Chain:**
  - Sort by x, then y
  - Upper and lower hulls
  - O(n log n), numerically stable

### Convex Hull (Jarvis March / Gift Wrapping)
- **Time Complexity:** O(nh) where h = hull vertices
- **Space Complexity:** O(h)
- **Key Use Cases:**
  - Few hull vertices
  - Adaptive algorithms
  - Incremental
- **When to Choose:**
  - h << n (few hull points)
  - Output-sensitive
  - Simple implementation

### Line Segment Intersection
- **Algorithms:**
  - Brute force: O(n²)
  - Sweep line (Bentley-Ottmann): O((n + k) log n)
- **Key Use Cases:**
  - GIS
  - CAD
  - Collision detection
- **When to Choose:**
  - Line segment intersection
  - Sweep line for many intersections

### Closest Pair of Points
- **Time Complexity:** O(n log n)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Computational geometry
  - Graphics
  - Clustering
- **When to Choose:**
  - 2D closest pair
  - Divide and conquer
  - Not for high dimensions (curse of dimensionality)

### Farthest Pair of Points (Diameter)
- **Time Complexity:** O(n log n) (rotating calipers on convex hull)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  -Bounding box
  - Clustering
  - Shape analysis
- **When to Choose:**
  - Convex hull first
  - Rotating calipers
  - Diameter of point set

### Triangulation (Ear Clipping)
- **Time Complexity:** O(n²) for simple polygon
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Computer graphics
  - Finite element analysis
  - Game development
- **When to Choose:**
  - Simple polygon triangulation
  - O(n²) acceptable
  - Simple implementation
- **Alternative:**
  - Monotone partitioning: O(n log n)
  - Triangulation by diagonal

### Delaunay Triangulation
- **Time Complexity:** O(n log n)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Mesh generation
  - Interpolation
  - Terrain modeling
- **When to Choose:**
  - Maximum minimum angle
  - Circumcircle property
  - Voronoi dual

### Voronoi Diagram
- **Time Complexity:** O(n log n)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Nearest neighbor
  - Facility location
  - GIS
  - Biology (cell modeling)
- **When to Choose:**
  - Nearest site queries
  - Partitioning plane
  - Delaunay dual

### Line Clipping (Cohen-Sutherland)
- **Time Complexity:** O(n) where n = line segments
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Graphics
  - Rendering
  - Clipping windows
- **When to Choose:**
  - Rectangle clipping
  - Code-based
  - Simple implementation
- **Alternative:**
  - Liang-Barsky: O(n) with fewer divisions
  - Cyrus-Beck: general convex clip

### Sutherland-Hodgman Clipping
- **Time Complexity:** O(n * m) where n = polygon, m = clip window
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Polygon clipping
  - Graphics
  - GIS
- **When to Choose:**
  - Convex clip window
  - Polygon clipping
  - Simple implementation

### Point in Convex Polygon
- **Time Complexity:** O(log n) with preprocessing, O(n) without
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Graphics
  - Collision detection
  - GIS
- **When to Choose:**
  - Convex polygon
  - Multiple queries
  - Binary search on angles

### Rotating Calipers
- **Time Complexity:** O(n) after convex hull
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Convex hull diameter
  - Minimum width
  - Minimum area rectangle
  - All antipodal pairs
- **When to Choose:**
  - Convex polygon properties
  - Antipodal pairs
  - After convex hull

### Cross Product Applications
- **Time Complexity:** O(1)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Collinearity
  - Polygon orientation
  - Point line position
  - Convexity testing
- **When to Choose:**
  - 2D geometry
  - Orientation test
  - Signed area

### Dot Product Applications
- **Time Complexity:** O(1)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Angle calculation
  - Projection
  - Perpendicular
  - Work calculation
- **When to Choose:**
  - Angle between vectors
  - Projection length
  - Orthogonality

### Polygon Classification
- **Time Complexity:** O(n)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Geometry validation
  - Graphics
  - GIS
- **When to Choose:**
  - Convex/concave
  - Simple/complex
  - Orientation

### Centroid Calculation
- **Time Complexity:** O(n) where n = vertices
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Center of mass
  - Graphics
  - Physics simulation
- **When to Choose:**
  - Polygon centroid
  - Weighted average
  - Triangle centroid

### Distance from Point to Line/Segment
- **Time Complexity:** O(1)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Collision detection
  - Graphics
  - GIS
- **When to Choose:**
  - Shortest distance
  - Line or segment
  - Perpendicular projection

### Angle Between Three Points
- **Time Complexity:** O(1)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Geometry analysis
  - Graphics
  - Robot kinematics
- **When to Choose:**
  - Turn angle
  - Interior angle
  - Vector angle

### Circle Operations
- **Time Complexity:** O(1)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Circle intersection
  - Point in circle
  - Tangent lines
- **When to Choose:**
  - Circle geometry
  - Distance comparison
  - Quadratic equations

### Line-Circle Intersection
- **Time Complexity:** O(1)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Collision detection
  - Graphics
  - Physics
- **When to Choose:**
  - Find intersection points
  - 0, 1, or 2 intersections
  - Quadratic formula

### Circle-Circle Intersection
- **Time Complexity:** O(1)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Venn diagrams
  - Collision detection
  - Geometry
- **When to Choose:**
  - Two circles intersection
  - 0, 1, 2, or infinite points
  - Distance between centers

### Triangle Centers
- **Time Complexity:** O(1)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Geometry
  - Graphics
  - Engineering
- **Centers:**
  - Centroid (medians)
  - Circumcenter (perpendicular bisectors)
  - Incenter (angle bisectors)
  - Orthocenter (altitudes)

### Polygon Triangulation (Monotone Partition)
- **Time Complexity:** O(n log n)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Efficient triangulation
  - Graphics
  - Finite elements
- **When to Choose:**
  - Better than ear clipping
  - O(n log n) guarantee
  - Monotone polygons easy

### Convex Polygon Union
- **Time Complexity:** O(n + m)
- **Space Complexity:** O(n + m)
- **Key Use Cases:**
  - Computational geometry
  - Graphics
  - GIS
- **When to Choose:**
  - Two convex polygons
  - Merge hulls
  - Linear time after convex hull

### Minkowski Sum
- **Time Complexity:** O(nm) or O(n log n + m log m)
- **Space Complexity:** O(n + m)
- **Key Use Cases:**
  - Robotics (configuration space)
  - Collision detection
  - Morphological operations
- **When to Choose:**
  - Sum of two polygons
  - Configuration space obstacle
  - Motion planning

### Line Intersection (General)
- **Time Complexity:** O(1)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - CAD
  - Graphics
  - Geometry
- **When to Choose:**
  - Two lines intersection
  - Parametric form
  - Determinant method

### Segment-Segment Intersection
- **Time Complexity:** O(1)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Collision detection
  - Graphics
  - GIS
- **When to Choose:**
  - Finite segments
  - Parametric with bounds
  - Orientation tests

### Polygon Boolean Operations
- **Algorithms:**
  - CGAL library
  - Greiner-Hormann
  - Sutherland-Hodgman (limited)
- **Time Complexity:** O(n log n)
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - CAD
  - GIS
  - Graphics
- **When to Choose:**
  - Union, intersection, difference
  - Complex polygons
  - Library recommended

---
  related-skills: abl-v10-learning, abl-v12-learning

## Backtracking Algorithms

### N-Queens Problem
- **Time Complexity:** O(N!) worst, O(N^N) with pruning
- **Space Complexity:** O(N²) or O(N) with 1D array
- **Key Use Cases:**
  - Constraint satisfaction
  - Permutation with constraints
  - Algorithm demonstration
- **When to Choose:**
  - Place N queens on NxN board
  - No two queens attack
  - Backtracking with pruning
- **Optimizations:**
  - 1D array (column positions)
  - Symmetry breaking
  - Bitmask for O(1) check
  - Warnsdorff's heuristic (for knights tour)

### Sudoku Solver
- **Time Complexity:** O(9^81) worst, much better with pruning
- **Space Complexity:** O(81) = O(1)
- **Key Use Cases:**
  - Constraint satisfaction
  - Puzzle solving
  - Logic puzzles
- **When to Choose:**
  - Fill 9x9 grid
  - Row, column, 3x3 box constraints
  - Backtracking with constraint propagation
- **Optimizations:**
  - Least constraining value
  - MRV (minimum remaining values)
  - Forward checking
  - Bitmask for quick check

### Rat in Maze
- **Time Complexity:** O(2^(n+m)) worst
- **Space Complexity:** O(nm)
- **Key Use Cases:**
  - Path finding
  - Maze generation
  - Educational
- **When to Choose:**
  - Find path from start to end
  - Obstacles in grid
  - All paths or just one
- **Variants:**
  - Find all paths
  - Shortest path (BFS)
  - Multiple rats

### Knight's Tour
- **Time Complexity:** O(8^n) for n moves
- **Space Complexity:** O(n²)
- **Key Use Cases:**
  - Hamiltonian path on chessboard
  - Backtracking example
  - Performance benchmarking
- **When to Choose:**
  - Visit every square once
  - Knight moves only
  - Open or closed tour
- **Optimizations:**
  - Warnsdorff's heuristic (fewest onward moves)
  - Dividing board
  - Parallel search

### Subset Sum
- **Time Complexity:** O(2^n) worst, O(n * sum) DP
- **Space Complexity:** O(n) or O(n * sum)
- **Key Use Cases:**
  - Resource allocation
  - Cryptography
  - NP-complete problems
- **When to Choose:**
  - Find subset with given sum
  - Decision or optimization
  - Backtracking for small n
- **Alternatives:**
  - DP for pseudo-polynomial
  - Meet-in-the-middle for large n

### Permutation Generation
- **Time Complexity:** O(n * n!)
- **Space Complexity:** O(n) for recursion
- **Key Use Cases:**
  - Combinatorics
  - Cryptography
  - Algorithm testing
- **When to Choose:**
  - All permutations of n elements
  - Heap's algorithm (minimal changes)
  - Lexicographic order
- **Methods:**
  - Heap's algorithm
  - Lexicographic generation
  - Steinhaus-Johnson-Trotter

### Combination Generation
- **Time Complexity:** O(C(n, k) * k)
- **Space Complexity:** O(k)
- **Key Use Cases:**
  - Combinatorics
  - Probability
  - Statistics
- **When to Choose:**
  - Choose k from n
  - All combinations
  - Lexicographic or Gray code
- **Methods:**
  - Recursive generation
  - Iterative with indices
  - Bit manipulation

### Graph Coloring
- **Time Complexity:** O(m^n) where m = colors, n = vertices
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Scheduling
  - Register allocation
  - Map coloring
- **When to Choose:**
  - m-coloring problem
  - Find valid coloring
  - Backtrack with constraint checking
- **Optimizations:**
  - Degree ordering
  - Forward checking
  - Heuristic ordering

### Hamiltonian Path/Cycle
- **Time Complexity:** O(n!) worst
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Route planning
  - Network design
  - Algorithm comparison
- **When to Choose:**
  - Visit each vertex exactly once
  - Path or cycle
  - Backtracking with pruning
- **Optimizations:**
  - Degree 1 vertices first
  - Backtracking with adjacency check

### Maze Generation (Recursive Backtracking)
- **Time Complexity:** O(width * height)
- **Space Complexity:** O(width * height)
- **Key Use Cases:**
  - Game development
  - Puzzle generation
  - Procedural content
- **When to Choose:**
  - Generate perfect maze
  - All cells reachable
  - One solution
- **Algorithm:**
  - Start with grid of walls
  - Carve path recursively
  - Backtrack when stuck

### Partition Problem
- **Time Complexity:** O(2^n) or O(n * sum)
- **Space Complexity:** O(n) or O(sum)
- **Key Use Cases:**
  - Fair division
  - Load balancing
  - NP-complete
- **When to Choose:**
  - Split into equal sum subsets
  - Decision problem
  - Backtracking or DP

### Crossword Puzzle Solver
- **Time Complexity:** Exponential
- **Space Complexity:** O(word count * puzzle size)
- **Key Use Cases:**
  - Puzzle solving
  - AI application
  - Natural language
- **When to Choose:**
  - Place words in grid
  - Cross constraints
  - Backtracking with constraint satisfaction
- **Optimizations:**
  - Most constrained variable
  - Least constraining value
  - Forward checking

### Bin Packing (Backtracking)
- **Time Complexity:** Exponential
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Resource allocation
  - Container loading
  - Optimization
- **When to Choose:**
  - Pack items into bins
  - Minimize number of bins
  - Exact solution for small n
- **Alternatives:**
  - First-fit, best-fit heuristics
  - DP for special cases

### Traveling Salesman (Backtracking)
- **Time Complexity:** O(n!) or O(n² * 2^n) DP
- **Space Complexity:** O(n) or O(n * 2^n)
- **Key Use Cases:**
  - Route optimization
  - Logistics
  - Exact solution for small n
- **When to Choose:**
  - Visit all cities once
  - Return to start
  - Exact solution for n < 20-25
- **Optimizations:**
  - Branch and bound
  - Lower bound pruning
  - Symmetry breaking

---
  related-skills: abl-v10-learning, abl-v12-learning

## Numerical Algorithms

### Newton-Raphson Method
- **Time Complexity:** O(log precision) iterations, O(1) per iteration
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Root finding
  - Optimization (derivative = 0)
  - Nonlinear equations
  - Square roots
- **When to Choose:**
  - Function differentiable
  - Good initial guess
  - Quadratic convergence near root
  - Not for discontinuous functions
- **Optimizations:**
  - Secant method (no derivative)
  - Hybrid with bisection
  - Damped Newton
- **Applications:**
  - sqrt(x): f(y) = y² - x
  - Reciprocal: f(y) = 1/y - x
  - Optimization: find f'(x) = 0

### Bisection Method
- **Time Complexity:** O(log((b-a)/tolerance))
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Root finding (continuous functions)
  - Guaranteed convergence
  - Interval methods
- **When to Choose:**
  - Continuous function
  - Sign change in interval
  - Slow but reliable
  - Not for multiple roots in interval
- **Comparison with Newton:**
  - Bisection: guaranteed, linear convergence
  - Newton: fast but may not converge

### Gaussian Elimination
- **Time Complexity:** O(n³)
- **Space Complexity:** O(n²)
- **Key Use Cases:**
  - Solving linear systems
  - Matrix inverse
  - Determinant
  - Linear algebra
- **When to Choose:**
  - Ax = b for square matrix
  - Direct solver
  - Not for sparse large systems
- **Optimizations:**
  - Partial pivoting (avoid division by small)
  - Full pivoting (best accuracy)
  - LU decomposition reuse

### LU Decomposition
- **Time Complexity:** O(n³) factorization, O(n²) solve
- **Space Complexity:** O(n²)
- **Key Use Cases:**
  - Multiple right-hand sides
  - Matrix inverse
  - Determinant
  - Linear systems
- **When to Choose:**
  - Solve Ax = b multiple times
  - Same matrix, different b
  - Matrix invertibility check

### Cholesky Decomposition
- **Time Complexity:** O(n³/3)
- **Space Complexity:** O(n²)
- **Key Use Cases:**
  - Positive definite matrices
  - Monte Carlo simulation
  - Optimization
  - Numerical PDEs
- **When to Choose:**
  - Symmetric positive definite
  - Faster than LU
  - No pivoting needed

### Gradient Descent
- **Time Complexity:** O(iterations * n) where n = parameters
- **Space Complexity:** O(n)
- **Key Use Cases:**
  - Optimization
  - Machine learning
  - Function minimization
  - Neural networks
- **When to Choose:**
  - Differentiable function
  - Large number of parameters
  - Stochastic for big data
- **Variants:**
  - Batch gradient descent
  - Stochastic (SGD)
  - Mini-batch
  - Momentum
  - Adam, RMSProp

### Binary Search (Numerical)
- **Time Complexity:** O(log((high-low)/tolerance))
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Root finding (monotonic functions)
  - Inverse functions
  - Optimization (unimodal)
- **When to Choose:**
  - Monotonic function
  - Sign change or monotonic
  - Guaranteed convergence
  - Slower than Newton but reliable

### Simpson's Rule (Integration)
- **Time Complexity:** O(n) where n = intervals
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Numerical integration
  - Area calculation
  - Probability
- **When to Choose:**
  - Smooth functions
  - Higher accuracy than trapezoidal
  - Even number of intervals
- **Composite Simpson:**
  - Divide into subintervals
  - O(1/n⁴) error

### Trapezoidal Rule
- **Time Complexity:** O(n)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Numerical integration
  - Approximate area
  - Simple implementation
- **When to Choose:**
  - Quick integration
  - Smooth functions
  - Simpler than Simpson
- **Comparison:**
  - Trapezoidal: O(1/n²) error
  - Simpson: O(1/n⁴) error

### Monte Carlo Integration
- **Time Complexity:** O(n) where n = samples
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - High-dimensional integration
  - Complex domains
  - Statistical physics
- **When to Choose:**
  - High dimensions (d > 3)
  - Complex boundaries
  - Probabilistic error estimate
- **Advantages:**
  - Dimension doesn't affect complexity
  - Easy to parallelize
  - Error decreases as 1/√n

### Runge-Kutta Methods (RK4)
- **Time Complexity:** O(n) where n = steps
- **Space Complexity:** O(1) per step
- **Key Use Cases:**
  - ODE solving
  - Physics simulation
  - Engineering
  - Dynamics
- **When to Choose:**
  - Initial value problems
  - Fourth-order accuracy
  - Non-stiff equations
- **Standard RK4:**
  - Four slope estimates
  - Weighted average
  - O(h⁴) local error

### Jacobi Iteration
- **Time Complexity:** O(n² * iterations)
- **Space Complexity:** O(n²)
- **Key Use Cases:**
  - Linear systems
  - Sparse matrices
  - Parallel computing
- **When to Choose:**
  - Diagonally dominant
  - Sparse systems
  - Parallel implementation
- **Alternative:**
  - Gauss-Seidel (faster, but sequential)
  - SOR (Successive Over-Relaxation)

### Gauss-Seidel Iteration
- **Time Complexity:** O(n² * iterations)
- **Space Complexity:** O(n²)
- **Key Use Cases:**
  - Linear systems
  - PDE discretization
  - Iterative solver
- **When to Choose:**
  - Convergent systems
  - Better than Jacobi
  - Sequential updates

### Fixed-Point Iteration
- **Time Complexity:** O(iterations)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Equation solving
  - Functional equations
  - Proofs
- **When to Choose:**
  - g(x) = x formulation
  - Contraction mapping
  - Simple implementation
- **Convergence:**
  - |g'(x)| < 1 near fixed point
  - Linear convergence

### Secant Method
- **Time Complexity:** O(log precision) iterations
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Root finding (no derivative)
  - Numerical analysis
  - Engineering applications
- **When to Choose:**
  - Derivative unavailable or expensive
  - Good alternative to Newton
  - Superlinear convergence

---
  related-skills: abl-v10-learning, abl-v12-learning

## Probabilistic Algorithms

### Bloom Filter
- **Time Complexity:** O(k) where k = hash functions
- **Space Complexity:** O(m) where m = bit array size
- **Key Use Cases:**
  - Membership testing
  - Spell checking
  - Network routers
  - Database query optimization
- **When to Choose:**
  - Allow false positives
  - No false negatives
  - Memory efficient
  - Large dataset
- **Parameters:**
  - m = bit array size
  - k = number of hash functions
  - n = expected items
  - Optimal k = (m/n) * ln(2)
- **Operations:**
  - add(x): set k bits
  - query(x): check k bits
  - No delete (counting Bloom filter allows)

### HyperLogLog
- **Time Complexity:** O(1) per update/query
- **Space Complexity:** O(log log N) where N = universe size
- **Key Use Cases:**
  - Cardinality estimation
  - Unique visitor count
  - Network traffic analysis
  - Database statistics
- **When to Choose:**
  - Estimate distinct elements
  - Massive scale (billions)
  - Small memory footprint
  - Allow ~2% error
- **Algorithm:**
  - Hash elements
  - Track maximum leading zeros
  - Harmonic mean of estimates
  - Bias correction

### Count-Min Sketch
- **Time Complexity:** O(k) per operation
- **Space Complexity:** O(k * w) where k = hash functions, w = width
- **Key Use Cases:**
  - Frequency estimation
  - Heavy hitters
  - Network monitoring
  - Text analysis
- **When to Choose:**
  - Approximate frequency
  - Overestimated (never underestimate)
  - Stream processing
  - Heavy hitters problem
- **Parameters:**
  - w = width (accuracy)
  - k = depth (confidence)
  - Estimate = minimum of k rows

### Reservoir Sampling
- **Time Complexity:** O(n)
- **Space Complexity:** O(k) where k = sample size
- **Key Use Cases:**
  - Random sampling from stream
  - Unknown stream length
  - Memory constraints
  - Online algorithms
- **When to Choose:**
  - Sample k items from n (n unknown)
  - Equal probability for each item
  - Single pass
  - Each item has k/n probability
- **Algorithm (Algorithm R):**
  - Fill reservoir with first k items
  - For item i > k, replace with probability k/i

### MinHash
- **Time Complexity:** O(nk) where n = elements, k = hash functions
- **Space Complexity:** O(k)
- **Key Use Cases:**
  - Jaccard similarity estimation
  - Duplicate detection
  - News clustering
  - NLP
- **When to Choose:**
  - Similarity between sets
  - Large-scale data
  - Allow approximation
  - Jaccard similarity = P(min hash same)
- **Jaccard Similarity:**
  - |A ∩ B| / |A ∪ B|
  - MinHash estimates this

### Skip List
- **Time Complexity:** O(log n) average, O(n) worst
- **Space Complexity:** O(n) (expected)
- **Key Use Cases:**
  - Ordered dictionary
  - Concurrent data structure
  -替代 balanced trees
- **When to Choose:**
  - Sorted data structure
  - Concurrent access
  - Simpler than balanced trees
  - Probabilistic balancing
- **Operations:**
  - Search, insert, delete: O(log n) average
  - Space: O(n) expected
  - No rebalancing needed

### Randomized Quicksort
- **Time Complexity:** O(n log n) expected, O(n²) worst
- **Space Complexity:** O(log n) expected
- **Key Use Cases:**
  - Average-case optimal
  - Avoiding worst-case
  - Input order unknown
- **When to Choose:**
  - Input adversarial or unknown
  - Expected performance matters
  - Random pivot selection
  - Same as deterministic but better practical performance

### Monte Carlo Methods
- **Time Complexity:** O(n) where n = samples
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Numerical integration
  - Optimization
  - Risk analysis
  - Physics simulations
- **When to Choose:**
  - Deterministic hard
  - Probabilistic acceptable
  - Parallelization easy
  - Error decreases as 1/√n

### Las Vegas Algorithms
- **Time Complexity:** Varies (randomized)
- **Space Complexity:** Varies
- **Key Use Cases:**
  - Always correct
  - Randomized time
  - Quicksort (expected)
  - Randomized algorithms
- **When to Choose:**
  - Must be correct
  - Randomized running time
  - Contrasts with Monte Carlo

### Karp-Rabin (Hash-based)
- **Time Complexity:** O(n + m) average
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Pattern matching
  - String hashing
  - Duplicate detection
- **When to Choose:**
  - Substring search
  - Hash collisions handled
  - Rolling hash application

---
  related-skills: abl-v10-learning, abl-v12-learning

## Streaming Algorithms

### Majority Element (Boyer-Moore)
- **Time Complexity:** O(n)
- **Space Complexity:** O(1)
- **Key Use Cases:**
  - Finding majority element
  - Stream processing
  - Memory-constrained
- **When to Choose:**
  - Element appears > n/2 times
  - Single pass
  - O(1) space
  - Verify pass if not guaranteed
- **Algorithm:**
  - Candidate with count
  - Increment on match, decrement otherwise
  - When count = 0, new candidate

### FM-Sketch (Flajolet-Martin)
- **Time Complexity:** O(k) per update
- **Space Complexity:** O(k) where k = hash functions
- **Key Use Cases:**
  - Distinct element estimation
  - Cardinallity estimation
  - Predecessor to HyperLogLog
- **When to Choose:**
  - Distinct elements
  - Large scale
  - Allow approximation
  - Basic probabilistic counting

### Greenwald-Khanna
- **Time Complexity:** O(log(εn)) per update
- **Space Complexity:** O(ε⁻¹ log(εn))
- **Key Use Cases:**
  - Quantile estimation
  - Percentiles
  - Streaming data
- **When to Choose:**
  - Compute approximate quantiles
  - Stream with unknown length
  - Guaranteed error bound
  - ε-error with O(1/ε log(εn)) space

### t-Sketch
- **Time Complexity:** O(log n) per update
- **Space Complexity:** O(ε⁻² log² n)
- **Key Use Cases:**
  - Frequency estimation
  - Heavy hitters
  - Streaming
- **When to Choose:**
  - Frequent items
  - High accuracy
  - Larger space for better accuracy

### Count-Sketch
- **Time Complexity:** O(k) per operation
- **Space Complexity:** O(k * w) where w = width, k = depth
- **Key Use Cases:**
  - Frequency estimation
  - Sparse recovery
  - Machine learning
- **When to Choose:**
  - L2 frequency estimation
  - Allow sign errors
  - Better than Count-Min for L2

### Lossy Counting
- **Time Complexity:** O(n/m) where m = bucket size
- **Space Complexity:** O(m) where m = O(ε⁻¹)
- **Key Use Cases:**
  - Frequent items
  - Market basket analysis
  - Streaming
- **When to Choose:**
  - Frequent itemsets
  - Space O(1/ε)
  - Error bound ε
  - Simple implementation

### Space-Saving
- **Time Complexity:** O(1) per operation
- **Space Complexity:** O(ε⁻¹)
- **Key Use Cases:**
  - Frequent items
  - Top-k elements
  - Stream summary
- **When to Choose:**
  - Top-k elements
  - Space O(k)
  - Count-min with update tracking
  - Better than Lossy Counting

### Stable Sampling
- **Time Complexity:** O(1) per element
- **Space Complexity:** O(k) where k = sample size
- **Key Use Cases:**
  - Streaming sampling
  - Sliding window
  - Approximate queries
- **When to Choose:**
  - Stream with update frequency
  - Sample representative items
  - Approximate aggregate queries

### Sliding Window Algorithms
- **Key Techniques:**
  - Sliding window histogram
  - Smooth histograms
  - Exponential histograms
- **Key Use Cases:**
  - Time-based window
  - Decay functions
  - Real-time analytics
- **When to Choose:**
  - Recent data only
  - Time-sensitive analytics
  - Window size fixed or decaying

### DGIM (Dwork et al.)
- **Time Complexity:** O(log N) per update
- **Space Complexity:** O(log² N)
- **Key Use Cases:**
  - Windowed sum estimation
  - Text processing
  - Sliding windows
- **When to Choose:**
  - Binary stream sum
  - Approximate count
  - Logarithmic space

---
  related-skills: abl-v10-learning, abl-v12-learning

## Algorithm Selection Guide

### Problem Type: Sorting

| Input Size | Distribution | Memory | Recommended Algorithm | Why |
|------------|--------------|--------|----------------------|-----|
| Small (n < 20) | Any | Any | Insertion Sort | Low overhead, fast for small n |
| Small (n < 20) | Nearly sorted | Any | Insertion Sort | O(n) best case |
| Medium (n < 10K) | Random | Constrained | Quick Sort | Average O(n log n), in-place |
| Medium (n < 10K) | Any | Not constrained | Merge Sort | Stable, consistent O(n log n) |
| Medium (n < 10K) | Any | Tight constraint | Heap Sort | Guaranteed O(n log n), O(1) space |
| Large (n > 10K) | Random | Any | Quick Sort (optimized) | Cache-friendly, average optimal |
| Large (n > 10K) | Nearly sorted | Any | Shell Sort or Merge Sort | Avoid O(n²) behavior |
| Large (n > 10K) | Fixed width integers | Any | Radix Sort | O(n) for k = O(1) |
| Linked List | Any | Any | Merge Sort | O(1) extra space, stable |
| External (disk) | Any | Limited RAM | Merge Sort | Sequential I/O, external |

### Problem Type: Searching

| Data Structure | Sorted? | Query Count | Recommended Algorithm | Why |
|----------------|---------|-------------|----------------------|-----|
| Array | Yes | 1 | Binary Search | O(log n) |
| Array | Yes | Many | Binary Search or TBL | Preprocessing amortized |
| Array | No | 1 | Linear Search | No preprocessing |
| Array | No | Many | Sort + Binary Search | O(n log n) preprocessing |
| Linked List | Yes | Any | Linear Search | No random access |
| BST | Yes | Any | BST Search | O(h) = O(log n) balanced |
| Unbalanced BST | Yes | Any | May need balancing | O(n) worst case |
| Hash Table | No | Many | Hash Lookup | O(1) average |
| Array | Yes, uniform | Any | Interpolation Search | O(log log n) for uniform |
| Infinite Array | Yes | Any | Exponential + Binary | Find bound first |

### Problem Type: Graph - Shortest Path

| Graph Type | Edge Weights | Source | Destination | Recommended Algorithm | Why |
|------------|--------------|--------|-------------|----------------------|-----|
| Unweighted | All 1 | Single | Single | BFS | O(V + E), queue-based |
| Unweighted | All 1 | Single | All | BFS | Single run gives all |
| Weighted | Non-negative | Single | Single | Dijkstra | O((V+E) log V) |
| Weighted | Non-negative | Single | All | Dijkstra or Johnson | Johnson for all-pairs |
| Weighted | May be negative | Single | All | Bellman-Ford | O(VE), detects cycles |
| Dense | Any | Single | Single | Dijkstra (V²) | Dense makes heap overhead high |
| Sparse | Non-negative | All | All | Johnson | V × Dijkstra = O(VE log V) |
| All pairs | Any | All | All | Floyd-Warshall | O(V³), simple, negative allowed |
| All pairs | Non-negative | All | All | Dijkstra V times | Better than Floyd for sparse |

### Problem Type: Graph - MST

| Graph Type | Density | Recommended Algorithm | Why |
|------------|---------|----------------------|-----|
| Sparse | E = O(V) | Kruskal | O(E log V), simple |
| Dense | E = O(V²) | Prim | O(V²) or O(E log V) with heap |
| Connected | Any | Both work | Choose based on implementation |
| Disconnected | Any | N/A | No spanning tree exists |

### Problem Type: Graph - Connectivity

| Problem | Recommended Algorithm | Time | Space |
|---------|----------------------|------|-------|
| Connected Components | BFS/DFS | O(V + E) | O(V) |
| Strongly Connected Components | Kosaraju/Tarjan | O(V + E) | O(V) |
| Articulation Points | Tarjan | O(V + E) | O(V) |
| Bridges | Tarjan | O(V + E) | O(V) |
| Bipartite Check | BFS 2-coloring | O(V + E) | O(V) |
| Cycle Detection | DFS | O(V + E) | O(V) |

### Problem Type: Dynamic Programming

| Problem | Input Size | Recommended Approach | Why |
|---------|------------|---------------------|-----|
| 0/1 Knapsack | n < 100, W < 10K | DP table | O(nW) time/space |
| 0/1 Knapsack | n < 40, W large | Meet-in-the-middle | O(n × 2^(n/2)) |
| 0/1 Knapsack | n large, W large | Greedy approximation | FPTAS available |
| LCS | n, m < 1000 | DP table | O(nm) |
| LCS | One string small | DP with O(min) space | Space optimization |
| LCS | Very long strings | Hirschberg | O(min(n,m)) space |
| LIS | n < 10K | DP O(n²) or patience O(n log n) | Patience for large n |
| LIS | Need sequence | DP with parent pointers | Track reconstruction |
| TSP | n < 20 | DP (Held-Karp) | O(n² × 2^n) exact |
| TSP | n > 20 | Heuristics (2-opt, 3-opt) | Exact infeasible |
| Matrix Chain | n < 500 | DP | O(n³) time/space |
| Matrix Chain | n large | Greedy (not optimal) | Heuristic |
| Coin Change | Amount < 10K | DP | O(n × amount) |
| Coin Change | Greedy-valid | Greedy | O(n) |
| Partition | sum < 10K | DP | O(n × sum) |
| Partition | sum large | Karmarkar-Karp | Heuristic |
| Subset Sum | sum < 10K | DP | O(n × sum) |
| Subset Sum | n < 40 | Meet-in-the-middle | O(n × 2^(n/2)) |

### Problem Type: String Matching

| Pattern Size | Text Size | Pattern Characteristics | Recommended Algorithm | Why |
|--------------|-----------|------------------------|----------------------|-----|
| Small (m < 10) | Any | Random | Naive O(mn) | Low overhead |
| Small | Small | Any | Naive | Simple, fast for small |
| Any | Single query | Any | Naive/KMP | KMP for pattern reuse |
| Any | Multiple queries | Any | Build index (suffix array/tree) | Preprocessing amortized |
| Single pattern | Large | Repetitive | KMP | O(n+m) guaranteed |
| Single pattern | Large | Large alphabet | Boyer-Moore | O(n/m) average |
| Multiple patterns | Large | Any | Aho-Corasick | O(n + m + z) |
| With wildcards | Any | ? and * | DP | O(mn) |
| Palindrome | Any | Any | Manacher | O(n) linear |
| Anagram | Any | Any | Sliding window + hash | O(n) |

### Problem Type: Mathematical

| Problem | Number Size | Precision | Recommended Algorithm | Why |
|---------|-------------|-----------|----------------------|-----|
| GCD | Any | Exact | Euclidean | O(log min(a,b)) |
| LCM | Any | Exact | GCD-based | (a × b) / GCD |
| Prime test | Small (< 10^12) | Exact | Trial division | Simple |
| Prime test | Large | Exact | Miller-Rabin | O(k log³ n) |
| Prime test | 64-bit | Exact | Deterministic Miller-Rabin | Specific bases |
| Prime generation | < 10^8 | All | Sieve of Eratosthenes | O(n log log n) |
| Prime generation | Large | All | Segmented sieve | O(n) time, O(√n) space |
| Factorization | Small (< 10^12) | Exact | Trial division | Simple |
| Factorization | Medium | Exact | Pollard's Rho | Fast for small factors |
| Factorization | Large | Exact | Quadratic sieve | Sub-exponential |
| Modular inverse | Prime mod | Exact | Fermat's little theorem | a^(p-2) mod p |
| Modular inverse | Composite | Exact | Extended Euclidean | ax + by = 1 |
| Modular exponentiation | Large | Exact | Binary exponentiation | O(log exp) |
| FFT multiplication | Very large | Exact | FFT | O(n log n) |
| Matrix inverse | Small | Exact | Gaussian elimination | O(n³) |
| Matrix inverse | Large sparse | Approx | Iterative methods | Conjugate gradient |
| Root finding | Smooth function | Approx | Newton-Raphson | Quadratic convergence |
| Root finding | Any continuous | Approx | Bisection | Guaranteed convergence |
| Integration | Smooth | Approx | Simpson's rule | O(1/n⁴) error |
| Integration | High-dim | Approx | Monte Carlo | Dimension-independent |
| ODE solving | Non-stiff | Approx | RK4 | O(h⁴) local error |

### Problem Type: Backtracking

| Problem | Size | Recommended Approach | Why |
|---------|------|---------------------|-----|
| N-Queens | N < 15 | Backtracking with pruning | O(N!) worst case |
| Sudoku | 9×9 | Backtracking + MRV | 81 cells, constraints |
| Sudoku | Larger | CP solver or heuristic | NP-complete |
| Subset Sum | n < 25 | Backtracking | O(2^n) |
| Subset Sum | n large | DP or approximation | Pseudo-polynomial |
| Graph Coloring | Small | Backtracking | NP-complete |
| Hamiltonian Path | Small | Backtracking | NP-complete |
| Maze Generation | Standard | Recursive backtracking | O(V) for perfect maze |

### Problem Type: Numerical

| Problem | Function Properties | Precision | Recommended Algorithm | Why |
|---------|--------------------|-----------|----------------------|-----|
| Root finding | Differentiable | High | Newton-Raphson | Quadratic convergence |
| Root finding | Continuous | Medium | Bisection | Guaranteed, linear |
| Root finding | No derivative | Medium | Secant | Superlinear |
| System Ax=b | Dense | High | Gaussian elimination | Direct, accurate |
| System Ax=b | Sparse | Medium | Iterative (CG, GMRES) | Memory efficient |
| System Ax=b | Symmetric posdef | High | Cholesky | Faster than LU |
| Optimization | Differentiable | Medium | Gradient descent | Scalable |
| Optimization | No gradient | Low | Nelder-Mead | Derivative-free |
| Integration | Smooth 1D | High | Simpson's rule | Accurate |
| Integration | High-dim | Low/Medium | Monte Carlo | Dimension-independent |
| ODE y'=f(t,y) | Non-stiff | Medium | RK4 | Good accuracy |

### Problem Type: Probabilistic

| Problem | Scale | Error Tolerance | Recommended Algorithm | Why |
|---------|-------|----------------|----------------------|-----|
| Membership test | Large | 1% false positive | Bloom filter | O(1) query, space-efficient |
| Cardinality | Billions | 2% error | HyperLogLog | log log N space |
| Frequency estimation | Large | 5% error | Count-Min Sketch | L1 approximation |
| Sampling | Stream | Exact | Reservoir sampling | O(k) space, uniform |
| Similarity | Large | 5% error | MinHash | Jaccard estimate |
| Sorted structure | Concurrent | Probabilistic | Skip list | O(log n) operations |

### Problem Type: Streaming

| Problem | Window | Error | Recommended Algorithm | Why |
|---------|--------|-------|----------------------|-----|
| Majority element | Full stream | Exact | Boyer-Moore | O(1) space |
| Count distinct | Full stream | 2% | HyperLogLog | log log N space |
| Frequency | Full stream | 5% | Count-Min | L1 error bound |
| Quantiles | Full stream | ε | Greenwald-Khanna | Guaranteed error |
| Top-k | Full stream | ε | Space-Saving | O(k/ε) space |
| Windowed sum | Sliding | ε | DGIM | Logarithmic space |
| Heavy hitters | Full stream | ε | Lossy Counting | O(1/ε) space |

---
  related-skills: abl-v10-learning, abl-v12-learning

## Code Patterns for Implementation

### Dynamic Programming Template
```python
def dp_template(problem_state):
    # Initialize DP table
    dp = initialize_dp_table()
    
    # Base cases
    dp[base_case] = base_value
    
    # State transition
    for state in problem_space:
        for choice in valid_choices(state):
            dp[state] = optimal(dp[state], transition(dp[previous_state], choice))
    
    return dp[target_state]
```

### Backtracking Template
```python
def backtrack(state, constraints):
    if is_solution(state):
        record_solution(state)
        return
    
    for candidate in generate_candidates(state):
        if is_valid(candidate, constraints):
            make_move(candidate, state)
            backtrack(state, constraints)
            undo_move(candidate, state)  # Backtrack
```

### Graph Traversal Template
```python
def graph_traversal(graph, start):
    visited = set()
    queue = [start]  # BFS queue or DFS stack
    
    while queue:
        node = queue.pop(0) if BFS else queue.pop()  # DFS
        
        if node not in visited:
            visited.add(node)
            process(node)
            
            for neighbor in graph[node]:
                if neighbor not in visited:
                    queue.append(neighbor)
```

### Greedy Algorithm Template
```python
def greedy_selection(items):
    result = []
    while not_done(items):
        candidate = best_candidate(items)
        if is_valid(candidate, result):
            result.append(candidate)
            items.remove(candidate)
    return result
```

### Binary Search Template
```python
def binary_search(sorted_array, target):
    left, right = 0, len(sorted_array) - 1
    
    while left <= right:
        mid = left + (right - left) // 2
        
        if sorted_array[mid] == target:
            return mid
        elif sorted_array[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    
    return -1  # Not found
```

### Memoization Template
```python
def memoized_recursive(state, memo={}):
    if state in memo:
        return memo[state]
    
    if is_base_case(state):
        return base_value
    
    result = compute(memoized_recursive(substate1), 
                     memoized_recursive(substate2))
    memo[state] = result
    return result
```

### Sliding Window Template
```python
def sliding_window(arr, k):
    n = len(arr)
    if n < k:
        return []
    
    # Initialize window
    window = initialize_window(arr[0:k])
    
    result = [process(window)]
    
    # Slide window
    for i in range(k, n):
        remove_old(arr[i - k], window)
        add_new(arr[i], window)
        result.append(process(window))
    
    return result
```

### Union-Find Template
```python
class UnionFind:
    def __init__(self, n):
        self.parent = list(range(n))
        self.rank = [0] * n
    
    def find(self, x):
        if self.parent[x] != x:
            self.parent[x] = self.find(self.parent[x])  # Path compression
        return self.parent[x]
    
    def union(self, x, y):
        px, py = self.find(x), self.find(y)
        if px == py:
            return False
        
        # Union by rank
        if self.rank[px] < self.rank[py]:
            px, py = py, px
        self.parent[py] = px
        if self.rank[px] == self.rank[py]:
            self.rank[px] += 1
        
        return True
```

### Monotonic Stack Template
```python
def monotonic_stack(arr):
    stack = []
    result = [None] * len(arr)
    
    for i, num in enumerate(arr):
        # Maintain decreasing/increasing property
        while stack and compare(stack[-1], num):
            idx = stack.pop()
            result[idx] = num  # or process
        
        stack.append(i)
    
    return result
```

### Two-Pointer Template
```python
def two_pointers(arr1, arr2):
    i, j = 0, 0
    result = []
    
    while i < len(arr1) and j < len(arr2):
        if condition(arr1[i], arr2[j]):
            process(arr1[i], arr2[j])
            i += 1
        else:
            j += 1
    
    # Process remaining
    while i < len(arr1):
        process_remaining(arr1[i])
        i += 1
    
    while j < len(arr2):
        process_remaining(arr2[j])
        j += 1
    
    return result
```

---
  related-skills: abl-v10-learning, abl-v12-learning

## Common Pitfalls

### Dynamic Programming Pitfalls
1. **Wrong State Definition**: Define state precisely. `dp[i][j]` should have clear meaning.
2. **Incorrect Base Cases**: Test with small inputs. Edge cases often fail.
3. **Off-by-One Errors**: Arrays vs indices. `dp[0]` vs `dp[1]`.
4. **Missing Transitions**: Ensure all valid states are reachable.
5. **Space Optimization Bugs**: When reducing to 1D, ensure no used values are overwritten.
6. **Order Matters**: Top-down needs correct recursion order. Bottom-up needs correct iteration order.

### Backtracking Pitfalls
1. **Missing Pruning**: Without pruning, exponential time. Prune early when possible.
2. **State Not Restored**: Always undo moves after recursive call.
3. **Duplicate Solutions**: Use set or careful ordering to avoid duplicates.
4. **Incorrect Termination**: Base case should check complete solution.
5. **Memory Leaks**: Large state objects not cleaned up.

### Graph Algorithm Pitfalls
1. **Indexing Confusion**: 0-indexed vs 1-indexed. Consistency matters.
2. **Undirected vs Directed**: Edge direction affects algorithm choice.
3. **Disconnected Graphs**: Handle multiple components.
4. **Negative Cycles**: Bellman-Ford detects, Dijkstra doesn't.
5. **Memory Limits**: Adjacency matrix O(V²) vs list O(V + E).

### String Algorithm Pitfalls
1. **Index Bounds**: String indexing can be tricky with encoding.
2. **Off-by-One in LPS**: LPS array construction often has off-by-one.
3. **Hash Collisions**: Rabin-Karp needs good hash function.
4. **Pattern Empty**: Handle edge case of empty pattern.
5. **Unicode Issues**: Consider character vs byte length.

### Mathematical Algorithm Pitfalls
1. **Overflow**: Intermediate calculations may overflow. Use mod carefully.
2. **Division in Modular**: Multiply by modular inverse, not divide.
3. **Floating Point Precision**: Newton's method may not converge perfectly.
4. **Matrix Singularity**: Check for zero pivot in Gaussian elimination.
5. **Edge Cases**: GCD(0, x) = x, power(x, 0) = 1.

### Greedy Algorithm Pitfalls
1. **Greedy Doesn't Always Work**: Prove greedy choice property first.
2. **Local vs Global Optimum**: Greedy finds local, may not be global.
3. **Sorting Overhead**: Sometimes sorting is the answer, not just a step.
4. **Weighted Cases**: Standard greedy fails; need DP or other approach.

### Numerical Algorithm Pitfalls
1. **Division by Zero**: Newton's method can hit zero derivative.
2. **Convergence**: Not all methods converge for all functions.
3. **Stiff Equations**: Standard ODE solvers may fail; use stiff solvers.
4. **Round-off Error**: Accumulated in iterative methods.
5. **Initial Guess**: Newton's method is sensitive to starting point.

### Probabilistic Algorithm Pitfalls
1. **False Positives/Negatives**: Understand and handle them.
2. **Seed Quality**: Randomness quality affects results.
3. **Error Bounds**: Understand and communicate error tolerance.
4. **Space-Time Tradeoff**: Higher accuracy uses more space.
5. **Deterministic Alternative**: Sometimes deterministic is faster.

### Implementation Pitfalls
1. **Integer Division**: Use // in Python, be careful with casting.
2. **Off-by-One in Loops**: `i < n` vs `i <= n`.
3. **Mutable Defaults**: Don't use mutable objects as default arguments.
4. **Pass by Reference**: Ensure copying when needed.
5. **Edge Cases**: Always test with empty input, single element, max size.

---
  related-skills: abl-v10-learning, abl-v12-learning

## References

### Primary References
1. **CLRS - Introduction to Algorithms** (3rd Edition) by Cormen, Leiserson, Rivest, Stein
   - Comprehensive coverage of all algorithms
   - Clear proofs and analysis
   - Standard reference for algorithm courses

2. **The Art of Computer Programming** by Donald Knuth
   - Volume 1: Fundamental Algorithms
   - Volume 2: Seminumerical Algorithms
   - Volume 3: Sorting and Searching
   - Volume 4: Combinatorial Algorithms

3. **Algorithm Design** by Kleinberg and Tardos
   - Great for algorithm design techniques
   - Real-world applications
   - Clear explanations

4. **Concrete Mathematics** by Graham, Knuth, Patashnik
   - Mathematical foundations
   - Recurrences, summations, asymptotics
   - Essential for algorithm analysis

5. **Programming Challenges** by Skiena and Revilla
   - ACM-style problems
   - Algorithm categorization
   - Practical implementation tips

### Online Resources
1. **GeeksforGeeks** - Great for code examples and explanations
2. **Wikipedia** - Good reference for algorithm details
3. **Algorithm Wiki** - Comprehensive algorithm catalog
4. **CP-algorithms** - Competitive programming algorithms
5. **Visualgo** - Visual algorithm demonstrations

### Specialized Topics
1. **Computational Geometry** by de Berg et al.
2. **Approximation Algorithms** by Vazirani
3. **Randomized Algorithms** by Motwani and Raghavan
4. **Streaming Algorithms** by McGregor
5. **Numerical Recipes** for numerical methods

### Data Structures
1. **Dynamic Arrays** - Amortized O(1) append
2. **Hash Tables** - O(1) average lookup
3. **Balanced BSTs** - O(log n) operations
4. **Heaps** - Priority queues
5. **Tries** - String indexing
6. **Disjoint Sets** - Union-Find
7. **Segment Trees** - Range queries
8. **Fenwick Trees** - Prefix sums

---
  related-skills: abl-v10-learning, abl-v12-learning

## Conclusion

Algorithm selection is a critical skill in computer science. This guide provides:

1. **Comprehensive Coverage**: 15+ algorithm categories with detailed entries
2. **Selection Criteria**: Time/space complexity, use cases, and when to choose
3. **Decision Guide**: Quick lookup for common problem types
4. **Code Patterns**: Implementation templates for common paradigms
5. **Pitfall Avoidance**: Common mistakes to watch for

**Remember:**
- Standard algorithms beat fabrication every time
- Trade-offs are inevitable (time vs space, simplicity vs performance)
- Context matters (input size, distribution, constraints)
- Test edge cases thoroughly
- Document your algorithm choice reasoning

**Pro Tip:** When in doubt, start with the simplest algorithm that meets your requirements. Optimize only after profiling confirms it's necessary.

---

*This skill document is designed for OpenCode algorithm selection. For specific implementation questions, refer to the code-philosophy skill for implementation guidelines.*
---

## When to Use

Use this skill when:

- **Implementing or analyzing algorithms** — You need to understand, implement, or optimize algorithms for a specific problem domain
- **Comparing algorithmic approaches** — You are evaluating different algorithms for correctness, performance, or trade-offs
- **Studying computational patterns** — You need reference implementations and complexity analysis for standard algorithmic patterns
---

## Core Workflow

1. **Understand the Problem** — Identify inputs, outputs, constraints, and edge cases. **Checkpoint:** Clearly define the problem statement and expected behavior.

2. **Select Algorithm** — Choose the most appropriate algorithm based on constraints (time/space complexity, data size, ordering requirements). **Checkpoint:** Justify the algorithm choice with complexity analysis.

3. **Implement & Test** — Write clean, readable code with type hints, docstrings, and edge case handling. **Checkpoint:** Verify correctness with multiple test cases including edge cases.

4. **Analyze & Optimize** — Review time/space complexity, identify optimization opportunities, and validate against benchmarks. **Checkpoint:** Confirm complexity bounds match analysis and all test cases pass.

---

## Constraints

### MUST DO
- Include time and space complexity analysis for all algorithms
- Show at least one working example with input/output
- Include diagrams for non-trivial algorithm flows

### MUST NOT DO
- Present an algorithm without its complexity bounds
- Use recursive solutions without discussing tail-call or memoization alternatives
- Omit edge case handling in examples

---

## Live References

> Authoritative documentation links for this skill's domain. The model follows markdown links to resolve external references and inline content.

- [Wikipedia — Algorithm](https://en.wikipedia.org/wiki/Algorithm)
- [Big-O Cheat Sheet](https://bigocheatsheet.com/)
- [Introduction to Algorithms (CLRS) — MIT Press](https://mitpress.mit.edu/9780262033848/introduction-to-algorithms/)
- [GeeksforGeeks — Algorithm Design Techniques](https://www.geeksforgeeks.org/algorithm-design-techniques/)
- [Stanford CS 161 — Algorithm Design and Analysis](https://web.stanford.edu/class/cs161/)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.