1. An algorithm is a sequence of unambiguous instructions to solve a problem within a finite amount of time. It takes an input, processes it, and produces an output.
2. Designing an algorithm involves understanding the problem, choosing a computational model and problem-solving approach, designing and proving the algorithm's correctness, analyzing its efficiency, coding it, and testing it.
3. Important algorithm design techniques include brute force, divide and conquer, decrease and conquer, transform and conquer, dynamic programming, and greedy algorithms.