Since the early 1990s, there has been a significant research activity in efficient parallel algorithms and novel computer architectures for problems that have been already solved sequentially (sorting, maximum flow, searching, etc). In this handout, we are interested in parallel algorithms and we avoid particular hardware details. The primary architectural model for our algorithms is a simplified machine called Parallel RAM (or PRAM). In essence, the PRAM model consists of a number p of processors that can read and/or write on a shared “global” memory in parallel (i.e., at the same time). The processors can also perform various arithmetic and logical operations in parallel.