An algorithm is a procedure or formula for solving a problem. There are several techniques for designing algorithms, including dynamic programming, graph algorithms, divide and conquer, backtracking, and greedy algorithms. Common algorithms include binary search, merge sort, and adding/removing items from a linked list. Algorithm analysis evaluates the efficiency of algorithms in terms of resources like time and memory using approaches like determining time complexity, space complexity, and asymptotic analysis.