This programming course provides an introduction to algorithms and data structures that are commonly used in computational linguistics, such as string distance measures, data structures for approximate string search, finite state automata, and parsing algorithms. The course is driven by assignments where participants implement these algorithms and data structures in small, but practical, applications.

Lectures | Tuesday 14:15-16:00, Thursday 14:15-16:00, 0.01 |

Computer lab | Wednesday 14:15-18:00, 0.01 |

First Lecture | October 24 |

Lecturer | Daniël de Kok <daniel.de-kok@uni-tuebingen.de> |

Tutors | Teslin Roys <teslin.roys@student.uni-tuebingen.de>, Peter Schoener <peter.schoener@student.uni-tuebingen.de> |

By the end of the course you can:

- Write programs to query directed and undirected graphs, such as:
- Are two vertices connected?
- What is the shortest path between two vertices?
- Does a directed graph contain cycles?

- Implement a small spell-checker.
- Implement a recognizer for finite state grammars.
- Implement a simple dependency parser.
- Implement parsing algorithms that are discussed in the
*Computational Linguistics: Parsing*course.

- Algorithms, 4th Edition, Robert Sedgewick & Kevin Wayne
- Dependency Parsing, Sandra Kübler, Ryan McDonald & Joakim Nivre
- Speech and Language Processing, 2nd edition, Dan Jurafsky & James H. Martin