computer-science-algorithms

v2026.09.24

Choosing or implementing an algorithm or data structure — asymptotic complexity, data-structure selection, sorting & searching, dynamic programming, graph algorithms, divide & conquer, greedy algorithms, string/sequence algorithms, and the at-scale toolbox (Bloom filters, HyperLogLog, Count-Min Sketch, reservoir sampling, consistent hashing, external merge sort, Aho-Corasick, MinHash/LSH). Trigger on tasks involving "what's the right algorithm for…", performance-critical code, code with nested loops over the same input, recursive solutions, shortest-path / scheduling / matching / DP problems, code review for accidental O(n²) blowup, and any "how do I do X at scale / on a stream / without enough RAM" question — even if the user doesn't explicitly mention "algorithm" or "complexity."

GitHub
Install command
npx skhub add pproenca/computer-science-algorithms
Markdown
SKILL.md

Community Classical Computer Science Algorithms Best Practices

A practitioner-oriented reference for choosing and implementing classical algorithms and data structures correctly. Organized by execution-lifecycle impact: the earliest decisions (asymptotic class, data-structure choice) cascade through everything else, so the rules near the top of the table matter most.

Scope: the patterns that show up in everyday production code review, reasonable interview / contest problems, and the at-scale toolbox (sketches, streaming, distributed primitives) — not an exhaustive cover of CLRS. Topics intentionally outside the current version: network flow, modular arithmetic, Bellman-Ford and Floyd-Warshall as standalone rules, SCC (Tarjan/Kosaraju), computational geometry, FFT, Manacher / Z-function as standalone rules. They're flagged inline in the relevant rules.

Distilled from CLRS (Introduction to Algorithms, 4th ed.), Sedgewick & Wayne (Algorithms, 4th ed., Princeton), Skiena's Algorithm Design Manual, Laaksonen's Competitive Programmer's Handbook, cp-algorithms.com, and the USACO Guide.

When to Apply

Use these rules when:

  • Choosing an algorithm or data structure for a new problem ("what's the right way to do X?")
  • Reviewing code for hidden O(n²) blowup — repeated in-checks on lists, pop(0) on lists, string concatenation in loops, naive substring search
  • Picking a DP state or recurrence, before writing the memoization
  • Modeling a problem as a graph (BFS vs Dijkstra vs topological sort)
  • Refactoring brute force / naive solutions that work on toy inputs but time out at scale
  • Deciding whether greedy applies, or whether DP / branch-and-bound is required

Rule Categories By Priority

#CategoryPrefixImpactWhy it cascades
1Asymptotic Complexity & Algorithm Selectioncomp-CRITICALWrong O() class makes every other optimization irrelevant
2Data Structure Selectionds-CRITICALThe container determines which operations are cheap
3Sorting & Searchingsrch-HIGHFoundation for greedy, two-pointer, sweep-line, binary-search-on-the-answer
4Dynamic Programmingdp-HIGHExponential → polynomial transformations
5Graph Algorithmsgraph-HIGHNetworks, dependencies, routing, scheduling all reduce to graphs
6Divide & Conquer / Recursiondivide-MEDIUM-HIGHLogarithmic-factor speedups; stack-depth and recurrence traps
7Greedy Algorithmsgreedy-MEDIUMFast when correct, silently wrong when not
8String & Sequence Algorithmsstr-MEDIUMPattern matching, parsing, substring queries
9Scale & Probabilistic Algorithmsscale-MEDIUMSketches, streaming, distributed primitives — situational, decisive when they apply

Quick Reference

1. Asymptotic Complexity & Algorithm Selection (CRITICAL)

2. Data Structure Selection (CRITICAL)

3. Sorting & Searching (HIGH)

4. Dynamic Programming (HIGH)

5. Graph Algorithms (HIGH)

6. Divide & Conquer / Recursion (MEDIUM-HIGH)

7. Greedy Algorithms (MEDIUM)

8. String & Sequence Algorithms (MEDIUM)

9. Scale & Probabilistic Algorithms (MEDIUM)

The "unusual but valuable at scale" toolbox — sketches that trade tiny accuracy loss for orders-of-magnitude memory wins, streaming primitives for inputs that don't fit in RAM, and distributed structures that survive sharding changes.

How to Use

Start with the category that matches the question:

  • "What's the right algorithm for n = 10⁶?" → comp- (input-bound)
  • "I'm looking things up in a list inside a loop" → ds-hash-map-for-keyed-lookup or comp-watch-for-quadratic-blowup-from-membership-in-list
  • "My recursion is slow" → dp-memoize-overlapping-subproblems and comp-derive-recurrences-via-master-theorem
  • "Shortest path / connectivity / ordering tasks" → graph-
  • "Choose items to maximize value" → start with greedy-prove-exchange-argument-before-using; fall back to dp-knapsack-pattern
  • "Find / match strings" → str-
  • "Memory is the constraint, not time" / "Sample / count / deduplicate at scale" / "Sharding" → scale-

Code examples are in Python (most readable across audiences). The reasoning generalizes to any language — equivalent stdlib primitives are listed where they differ.

Reference Files

FileDescription
references/_sections.mdCategory definitions and ordering
assets/templates/_template.mdTemplate for new rules
metadata.jsonVersion and reference information
AGENTS.mdAuto-built TOC navigation

Related Skills

  • complexity-optimizer — Static analysis that finds the patterns these rules diagnose
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

MIT

Source path

skills/.experimental/computer-science-algorithms

Default branch

master

Latest commit

cf93c57

Tree SHA

afbb575