Algorithms and data structures is often the most challenging core CS module — it demands both correct implementation and rigorous mathematical analysis. Our specialists deliver pseudocode, working implementations, Big-O proofs, and correctness arguments across all standard algorithmic topics.
| Data Structures | Algorithms | Theory |
|---|---|---|
| Arrays, linked lists, stacks, queues | Sorting (merge, quick, heap, radix) | Big-O, Θ, Ω notation |
| Trees (BST, AVL, red-black, B-tree) | Searching (binary search, BST ops) | Recurrence relations (Master theorem) |
| Heaps (min/max, Fibonacci) | Graph traversal (BFS, DFS) | Correctness proofs (loop invariants) |
| Hash tables (chaining, open addressing) | Shortest paths (Dijkstra, Bellman-Ford, Floyd-Warshall) | NP-completeness and reductions |
| Graphs (adjacency list/matrix) | MST (Kruskal, Prim) | Amortised analysis |
| Tries, segment trees, union-find | Dynamic programming | Randomised algorithms |
| Greedy algorithms | Approximation algorithms |
Algorithms modules assess three distinct skills — many students excel at one but struggle with another:
A complete answer to an algorithms question typically requires all three. Submitting working code without a complexity analysis, or stating "O(n log n)" without justification, both lose marks at degree level.
The Master theorem applies to recurrences of the form T(n) = aT(n/b) + f(n). Identify a (number of subproblems), b (size reduction factor), and f(n) (cost of non-recursive work), then compare f(n) to n^(log_b a). If your assignment uses divide-and-conquer, the Master theorem almost certainly applies.
Correct implementations with Big-O analysis, recurrence solutions, and correctness proofs — any language.
Yes — dynamic programming is one of the most requested topics. We cover the full DP methodology: identifying overlapping subproblems and optimal substructure, defining the state, writing the recurrence relation, choosing between top-down (memoisation) and bottom-up (tabulation), and recovering the solution. Classic problems (knapsack, longest common subsequence, edit distance, matrix chain multiplication) and novel DP problems from assignments are both handled.
Both — depending on what the assignment requires. Some modules require language-specific implementations (Python, Java, C++); others require language-agnostic pseudocode in a specific format. Specify the requirement in your brief. Where both pseudocode and code are needed, we provide both with clear correspondence between them.
Yes. Formal correctness proofs for standard algorithms (Dijkstra's, Prim's, Bellman-Ford, Kruskal's) use either loop invariants or inductive arguments. We write these in the formal style expected at degree level — not informal sketches, but rigorous mathematical arguments with clearly stated invariant, initialisation, maintenance, and termination steps.