This course is about the design and analysis of randomized algorithms, (i.e. algorithms that compute probabilistically). Such algorithms are often robust and fast, though there is a small probability that they return the wrong answer. Examples include Google's PageRank algorithm, load balancing in computer networks, coping with Big Data via random sampling, navigation of unknown terrains by autonomous mobile entities, and matching medical students to residencies. The analysis of such algorithms requires tools from probability theory, which will be introduced as needed. This course also covers the basics of graph theory, and several randomized algorithms on graphs. Graphs are often used to mathematically model phenomena of interest to computer scientists, including the internet, social networks graphs, and computer networks. Lastly, this course demonstrates the powerful Probabilistic Method to non-constructively prove the existence of certain prescribed graph structures, how to turn such proofs into randomized algorithms, and how to derandomize such algorithms into deterministic algorithms. This course is classified as a theory elective. Prerequisite: CS 271 or MATH 232, MATH 210, and one of CS 109, 110, 111, or 112.