You must have completed a course in Deep Learning equivalent to the Deep Learning Nanodegree program prior to entering the program. Additionally, you should have the following knowledge: Intermediate Python programming knowledge, including:

- Strings, numbers, and variables
- Statements, operators, and expressions
- Lists, tuples, and dictionaries
- Conditions, loops
- Generators & comprehensions
- Procedures, objects, modules, and libraries
- Troubleshooting and debugging
- Research & documentation
- Problem solving
- Algorithms and data structures

Basic shell scripting:

- Run programs from a command line
- Debug error messages and feedback
- Set environment variables
- Establish remote connections

Basic statistical knowledge, including:

- Populations, samples
- Mean, median, mode
- Standard error
- Variation, standard deviations
- Normal distribution

Intermediate differential calculus and linear algebra, including:

- Derivatives & Integrals
- Series expansions
- Matrix operations through eigenvectors and eigenvalues

Additionally, you should be able to follow and interpret pseudocode for algorithms like the example below and implement them in Python. You should also be able to informally evaluate the time or space complexity of an algorithm. For example, you should be able to explain that a for loop that does constant O(1) work on each iteration over an array of length n has a complexity of O(n).

function Hill-Climbing(problem) returns a State current <- Make-Node(problem.Initial-State) loop do neighbor <- a highest-valued successor of current if neighbor.value ≤ current.value then return current.state current <- neighbor