composition and abstraction through functions; introduction to recursion - Floating point numbers, successive refinement, finding roots, Bisection methods, Newton/Raphson, introduction to lists - Lists and mutability, dictionaries, pseudocode, introduction to efficiency - Complexity; log, linear, quadratic, exponential algorithms - Binary search, bubble and selection sorts - Divide and conquer methods, merge sort, exceptions - Testing and debugging -More about debugging, knapsack problem, introduction to dynamic programming - Dynamic programming: overlapping sub problems, optimal substructure - Analysis of knapsack problem, introduction to object - oriented programming-Abstract data types, classes and methods - Encapsulation, inheritance, shadowing
Computational models: random walk simulation - Presenting simulation results, Pylab, plotting - Biased random walks, distributions - Monte Carlo simulations, estimating pi - Validating simulation results, curve fitting, linear regression - normal, uniform, and exponential distributions; misuse of statistics - Stock market simulation - Course overview; what do computer scientists do?