This foundational course is an introduction to algorithmic thinking and the mathematics of computer science. Topics include abstract data types such as lists, stacks, queues, hash maps, trees and graphs, but also basics of asymptotic analysis, recursion and various algorithmic strategies including brute force, decrease-and-conquer and divide-and-conquer. Programming exercises will help create proficiency in Python Programming language. Emphasis will be placed on understanding underlying mathematics, such as discrete probability, statistics, graph theory and set theory. Credits: 4