Optimize & Solve Techniques
I'm reading Cracking the Coding Interview and one of the chapters discusses few approaches to designing and optimizing an algorithm:
- BUD
- DIY
- Simplify and Generalize
- Base Case and Build
- Data Structure brainstorm
Below is the short description of those approaches.
BUD
BUD means Bottlenecks, Unneeded work and Duplicated work. In this approach we design the simplest possible algorithm which will be probably the slowest one as well. Then we are looking for bottlenecks, work which is not needed and duplicated work, and we are trying to get rid of those.
DIY
DIY means Do It Yourself. In this technique we are simulating the way we would solve the problem as humans. We need to keep in mind the ways our brain works through the problem and all explicit and implicit optimizations it's doing.
Simplify and Generalize
In this approach, we are first simplifying a problem and looking for a solution for it. Next we try to generalize it to more complex cases.
Base Case and Build
In this technique we are using the simplest possible cases of the problem. Like
instead of general n
as an input, we are first trying to deliver a solution for
n = 1
and n = 2
. Based on that solution, we are then implementing the solution
for general cases. This technique often leads to natural recursive solutions.
Data Structure brainstorm
In this approach we are going through different data structures, and we are trying to use one of them to solve our problem.