Stanford University Free Class: Design and Analysis of Algorithms I
Algorithms
Learners should know how to program in at least one programming language (like C, Java, or Python); some familiarity with proofs, including proofs by induction and by contradiction; and some discrete probability, like how to compute the probability that a poker hand is a full house. At Stanford, a version of this course is taken by sophomore, junior, and senior-level computer science majors.