# SWE

• https://leetcode.com/
• https://www.oreilly.com/library/view/algorithms-in-a/9781491912973/

## Big O

• O(1): Constant, primitive operations
• O(log n): Logarithmic, reducing the size about half each time
• O(nd) for d < 1: Sublinear
• O(n): Linear
• O(n log n): Linearithmic, divide in subproblems and merge in linear time
• O(n2): Quadratic, nested for loops
• O(2^n): Exponential, every subset, bruteforce numerical password O(10^n)
• O(n!): Factorial, bruteforce TSP

## Approaches

### Greedy

Solve in steps making the best local decision. If the subproblem can be completed in `O(log n)`, then the Greedy strategy will be `O(n logn)` (sort and grab). If the subproblem is `O(n)` then we have `O(n^2)` (selection sort).

### Divide and Conquer

Often recursive, `O(n)` when the resolution is constant, if the resolution step is `O(n)` then we have `O(n logn)`.

### Dynamic Programming

Subdividing in simpler subproblems that are solved in a specific order and storing the results for future use. In many cases the solution is optimal.

TODO

TODO

TODO

TODO

TODO

TODO

TODO

TODO

TODO

Tags:

Updated: