What to expect: Here are the sorts of questions I tend to ask:

- Define terms in your own words.
- Sketch the execution of an algorithm. For example, show the queue for A* on a particular problem.
- Give pseudocode describing an algorithm.
- Give the setup for a problem. for example, what would the state, successor function, etc look like for the Towers of Hanoi?
- Compare different algorithms and their strengths/weaknesses.
- Explain why an algorithm has the characteristics it does. For example, what does the h function do in A*?

Here are the sorts of questions I will not ask.

- Write syntactically correct Python code. (I may ask you to write pseudoode, but I'll be interested in program correctness, not whether every bracket and colon is in the right place)
- Multiple choice questions.
- "Trick" questions - the point of this exam is to test your knowledge of the topics we've covered. I may ask you hard questions, but I won't ask things that are deliberately misleading or deceptive.

Potential exam topics:

- Agents:
- Parts of an agent: Percepts, sensors, actuators, actions. (be able to define these concepts and identify them in a particular application)
- Definitions
- Autonomy
- The "intentional stance"
- Rationality

- Environments:
- Observability
- Deterministic/stochastic
- Episodic vs sequential
- Static vs Dynamic
- Discrete vs continuous
- Single-agent vs multi-agent
- (you should be able to explain these terms and use them to characterize a particular environment.)

- Uninformed Search:
- Basic algorithms: BFS, Uniform cost search, DFS, DLS, IDS
- Be able to:
- describe the algorithm in pseudocode
- trace their execution.
- Characterize their time and space requirements.
- Describe whether they are complete and/or optimal (and define those terms)

- Problem setup: be able to take a description of a problem and set it up accordingly. Describe what the state will be, what the initial state is, what the goal test is, and how the successor function works with enough precision that someone could write code to implement this.
- Definitions:
- Complete
- Optimal
- State space
- Path cost
- Weak method

- Heuristic Search:
- Basic Algorithms: Best-first search, Greedy Search, A*.
Be able to:
- describe the algorithm in pseudocode
- trace their execution.
- Describe whether they are complete and/or optimal (and define those terms)

- Definitions:
- Admissibility
- Monotonicity
- Optimally efficient

- Be able to:
- propose heuristics for a problem
- show that a heuristic is or is not admissible.

- Basic Algorithms: Best-first search, Greedy Search, A*.
Be able to:
- Information Retrieval
- definitions:
- Types of Queries
- Information Need
- "bag of words"
- Corpus, lexicon
- Boolean and probabilistic queries

- Know how to compute TFIDF
- Know how to compute cosine similarity

- definitions:
- Natural Language Processing
- Definitions:
- syntax and semantics
- parse tree

- Be able to tell what strings are produced by a grammar
- Be able to describe the difference between top-down and bottom-up parsers.
- Be able to explain why a chart parser is more efficient than a top-down or bottom-up parser.

- Definitions: