An algorithm (pronounced AL-go-rith-um) is a procedure or formula for solving a problem, based on conducting a sequence of specified actions. Brute Force: Generate every possible combination of solution. Divide and conquer: Logarithmic runtime – Divide the size of problem by a constant. Decrease and conquer: Similar Divide Conquer -- decrease the problem in each iteration. Dynamic programming: Exchange the space with time as when it re-computes it holds precomputed values for solved problem. Greedy algorithm: Work by recursively, starts from smallest part. Transform and conquer: Transform a problem into another like finding GCD to actually find LCM. Backtracking algorithm: We only use the solution to ensure a 100% success rate.