# Third Party Classes

datascience@berkeley seeks candidates who can perform at the highest level of academic excellence. Candidates in our Master of Information and Data Science (MIDS) must exhibit a strong knowledge and background in math and programming. Requirements for this program include:

- A working knowledge of fundamental concepts including: data structures, algorithms and analysis of algorithms, and linear algebra
- Programming proficiency as demonstrated by prior work experience or advanced coursework (For example: Python, Java, or R)

If you feel that you do not have the academic or professional background to qualify for the program, you may supplement your current experience by completing certain courses. Completion of coursework does not guarantee entry into the MIDS program, but successful performance in one or more of these classes may demonstrate your skills and knowledge when your application is reviewed.

We have included a partial list of on-line courses that may fit your needs. This is only a sampling of courses that are currently available and we encourage you to research courses through extension programs and your local college.

## Algorithms

- Algorithms
- Algorithms: Design and Analysis, Part 2
- Analysis of Algorithms
- Design and Analysis of Algorithms
- Introduction to Theoretical Computer Science

## Calculus

## Linear Algebra

## Data Structures

## Introductory Python Courses

### Lecture-Based Courses (contains interactive problems)

### Problem Only-Based Courses

### Additional Materials

## Algorithms

By the end of this class you will understand key concepts needed to devise new algorithms for graphs and other important data structures and to evaluate the efficiency of these algorithms.

**Provider**: Udacity **Cost**: Free **Prerequisites**:

This class assumes an understanding of programming at the level of CS101, including the ability to read and write short programs in Python; it also assumes a comfort level with mathematical notation at the level of high school Algebra II or the SATs. **Availability**: Self-Paced **More Information**: Algorithms course information

## Algorithms: Design and Analysis, Part 2

In this course you will learn several fundamental principles of advanced algorithm design. You'll learn the greedy algorithm design paradigm, with applications to computing good network backbones (i.e., spanning trees) and good codes for data compression. You'll learn the tricky yet widely applicable dynamic programming algorithm design paradigm, with applications to routing in the Internet and sequencing genome fragments. You'll learn what NP-completeness and the famous ‘P vs. NP” problem mean for the algorithm designer. Finally, we'll study several strategies for dealing with hard (i.e., NP-complete problems), including the design and analysis of heuristics. Learn how shortest-path algorithms from the 1950s (i.e., pre-ARPANET!) govern the way that your Internet traffic gets routed today; why efficient algorithms are fundamental to modern genomics; and how to make a million bucks in prize money by ‘just” solving a math problem!

**Provider**: Coursera **Cost**: Free **Prerequisites**:

How to program in at least one programming language (like C, Java, or Python); and familiarity with proofs, including proofs by induction and by contradiction. At Stanford, a version of this course is taken by sophomore, junior, and senior-level computer science majors. The course assumes familiarity with some of the topics from Algo 1 — especially asymptotic analysis, basic data structures, and basic graph algorithms. **Availability**: TBD **More Information**: Algorithms: Design and Analysis, Part 2 course information

## Analysis of Algorithms

Analysis of Algorithms aims to enable precise quantitative predictions of the properties of large combinatorial structures. The theory has emerged over recent decades as essential both for the scientific analysis of algorithms in computer science and for the study of scientific models in many other disciplines, including probability theory, statistical physics, computational biology and information theory. This course covers recurrence relations, generating functions, asymptotics, and fundamental structures such as trees, permutations, strings, tries, words, and mappings, in the context of applications to the analysis of algorithms. **Provider**: Coursera

**Cost**: Free

**Prerequisites**:

Math through calculus and basic familiarity with programming in a modern language such as Java. Knowledge of basic algorithms and data structures from Algorithms, Part I is helpful but not required. The video From Analysis of Algorithms to Analytic Combinatorics: A Journey with Philippe Flajolet, is an optional (since it contains some advanced material that is beyond the scope of this course) overview that gives some historical perspective and introduces this course and Analytic Combinatorics.

**Availability**: TBD

**More Information:**Analysis of Algorithms course information

## Design and Analysis of Algorithms

This is an intermediate algorithms course with an emphasis on teaching techniques for the design and analysis of efficient algorithms, emphasizing methods of application. Topics include divide-and-conquer, randomization, dynamic programming, greedy algorithms, incremental improvement, complexity, and cryptography.

- Provider: MIT Open Courseware
- Cost: Free
- Prerequisites: None
- Availability: Self-paced
- More Information: MIT Open Courseware

## Introduction to Theoretical Computer Science

At the end of this course, you will have a solid understanding of theoretical computer science. This will not only allow you to recognize some of the most challenging algorithmic problems out there, but also give you powerful tools to deal with them in practice. **Provider**: Udacity

**Cost**: Free

**Prerequisites**:

You should have a basic understanding of algorithms (such as CS215) and programming (such asCS101). No prior knowledge about theoretical computer science required!

**Availability**: Self-Paced

**More Information**: Introduction to Theoretical Computer Science course information

## Integral Calculus and Differential Calculus

How do you find the area under a curve? What about the length of any curve? Is there a way to make sense out of the idea of adding infinitely many infinitely small things? Integral calculus gives us the tools to answer these questions and many more. Surprisingly, these questions are related to a derivative, and in some sense, the answer to each one is the opposite of the derivative. Learn differential calculus–limits, continuity, derivatives, and derivative applications.

**Provider:** Khan Academy **Cost:** Free **Prerequisites:** None **Availability:** Self-paced **More information:** Integral Calculus, Differential Calculus

## Single Variable Calculus (Units 1–3)

This introductory calculus course covers differentiation and integration of functions of one variable, with applications. Topics include: Concepts of Function, Limits and Continuity Differentiation Rules, Application to Graphing, Rates, Approximations, and Extremum Problems Definite and Indefinite Integration, The Fundamental Theorem of Calculus, Applications to Geometry: Area, Volume, and Arc Length, Applications to Science: Average Values, Work, and Probability, Techniques of Integration, Approximation of Definite Integrals, Improper Integrals, and L'Hôspital's Rule

**Provider:** MIT Open Courseware **Cost:** Free **Prerequisites:** None **Availability:** Self-paced **More information:** MIT Open Courseware

## Essence of Linear Algebra

This sequence is focused on the geometric intuitions underlying the subject, making the many matrix and vector operations feel less arbitrary.

- Provider: Khan
- Cost: Free
- Prerequisites: None
- Availability: Self-paced
- More Information: Khan Academy

## Linear Algebra

This is a basic subject on matrix theory and linear algebra. Emphasis is given to topics that will be useful in other disciplines, including systems of equations, vector spaces, determinants, eigenvalues, similarity, and positive definite matrices.

Here are key computations and some of the ideas behind them:

- Solving Ax = b for square systems by elimination (pivots, multipliers, back substitution, invertibility of A, factorization into A = LU)
- Complete solution to Ax = b (column space containing b, rank of A, nullspace of A and special solutions to Ax = 0 from row reduced R)
- Basis and dimension (bases for the four fundamental subspaces)
- Least squares solutions (closest line by understanding projections)
- Orthogonalization by Gram-Schmidt (factorization into A = QR)
- Properties of determinants (leading to the cofactor formula and the sum over all n! permutations, applications to inv(A) and volume)
- Eigenvalues and eigenvectors (diagonalizing A, computing powers A^k and matrix exponentials to solve difference and differential equations)
- Symmetric matrices and positive definite matrices (real eigenvalues and orthogonal eigenvectors, tests for x'Ax > 0, applications)
- Linear transformations and change of basis (connected to the Singular Value Decomposition – orthonormal bases that diagonalize A)
- Linear algebra in engineering (graphs and networks, Markov matrices, Fourier matrix, Fast Fourier Transform, linear programming)

**Provider**: MITOpenCourseWare **Cost**: Free **Prerequisites**: None **Availability: **Self-Paced **More Information**: Linear Algebra course information

## Advanced Data Structures

Data structures play a central role in modern computer science. You interact with data structures even more often than with algorithms (think Google, your mail server, and even your network routers). In addition, data structures are essential building blocks in obtaining efficient algorithms. This course covers major results and current directions of research in data structure.

- Provider: MIT Open Courseware
- Cost: Free
- Prerequisites: None
- Availability: Self-paced
- More Information: MIT Open Courseware

## Elementary Data Structures

Upon successful completion of this course, the student will be able to:

- Identify elementary Data Structures using C/C++ programming languages.
- Analyze the importance and use of Abstract Data Types (ADTs).
- Design and implement elementary Data Structures such as arrays, trees, Stacks, Queues, and Hash Tables.
- Explain best, average, and worst-cases of an algorithm using Big-O notation.
- Describe the differences between the use of sequential and binary search algorithms.

**Provider**: Saylor **Cost**: Free **Prerequisites**:

In order to take this course, you must:

- Have access to a computer
- Have continuous broadband internet access
- Have the ability/permission to install plug-ins or software (e.g. Adobe Reader of Flash)
- Have the ability to download and save files and documents to a computer
- Have the ability to open Microsoft files and documents (.doc, .ppt, .xls, etc.)
- Be competent in the English language
- Have read the Saylor Student Handbook.
- Have completed CS101: Introduction to Computer Science I and CS102: Introduction to Computer Science II.

**Availability: **Self-Paced **More Information**: Elementary Data Structures course information

## Introduction to Computer Science

In this course you will learn key concepts in computer science and learn how to write your own computer programs in the context of building a web crawler.

**Provider**: Udacity **Cost**: Free **Prerequisites**: None **Availability: **Self-Paced **More Information**: Introduction to Computer Science course information

## Learn Python the Hard Way

From creator: ‘Learn Python The Hard Way is a Python tutorial I wrote to teach programming to people who do not know how to code. It assumes you are probably a power user of your computer, and then takes you from nothing to programming simple games. After finishing this course you should be ready for many of the other programming books out there.”

**Provider**: Udemy **Cost**: $29. **Prerequisites**: None **Availability: **Self-Paced **More Information**: Learn Python the Hard Way course information

## Python

Learn by doing, lessons build on one another.

**Provider**: Codeacademy **Cost**: Free **Prerequisites**: None **Availability: **Self-Paced **More Information**: Python course information

## Learn Python

Less structured, may serve more as a supplemental set of problems.

**Provider**: LearnPython.org **Cost**: Free **Prerequisites**: None **Availability: **Self-Paced **More Information**: Learn Python course information

## Think Python

*Think Python* is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.

**Provider**: Green Tea Press **Cost**: PDF Free; Buy Paper Copy **Prerequisites**: None **Availability: **Self-Paced **More Information**: Think Python information

## Getting Started with Python for Data Science

It starts with Guide from Kaggle to use Python for data science applications.

**Provider**: Kaggle **Cost**: Free **Prerequisites**: None **Availability: **Self-Paced **More Information**: Getting Started with Python for Data Science information

## Data Science Starter Kit

Series of publications on Data Science tools and techniques.

**Provider**: O'Reilly **Cost**: Varies depending on book **Prerequisites**: None **Availability: **Self-Paced **More Information**: Data Science Starter Kit information