COURSE OUTLINE

Session 7

Multiple pattern matching. Trie data structure. Aho-Corasick algorithm. Implementation details. Dynamic programming on a trie.

Session 8

String hashing. Rabin-Karp algorithm. Fast substrings comparison with hashes. Suffix array. LCP array.  Efficient construction algorithm. Applications.

Session 5

Treaps with implicit keys. Ropes. Segment reverse operation. Examples of problems.

Session 6

Introduction to strings. String searching (matching) problem. Pattern pre processings. Z-function, prefix-function. Their applications. Knuth–Morris–Pratt algorithm. Matching finite state machine.

Session 9

Suffix tree. Ukkonen's algorithm. Suffix tree construction from LCP array. Suffix tree applications.

Session 10

Suffix automaton. Size bounds. Linear Algorithm. Using suffix automata as an index for approximate string searches.

Session 11

Introduction to automata theory. Formal languages. Context-free languages. Formal grammars. Context-free grammars. NFA, DFA, convert NFA to DFA.  Build automaton by regular expression.

Session 12

LL(1) parser. Arithmetic expressions parsing. Shunting-yard algorithm. Simplified Pascal language parsing and interpretation.

Session 13

Algorithms for traversing a graph. DFS. Properties. DFS search tree. Edges classification. Linear bridge-finding algorithm. Linear articulation points finding algorithm. Strongly connected components. Tarjan's strongly connected components algorithm.

Session 14

Tree problems. Bottom-up approach. LCA problem. LCA algorithms.

Session 15

Bipartite graphs. König’s criterion. Problems: maximum matching, minimum edge cover, maximum independent vertex set, minimum vertex cover. Connection of the problems. Berge's lemma. Kuhn algorithm. Kuhn algorithm properties. Minimal vertex cover by maximum matching. Cover DAG by minimal number of paths.

Session 1

Heap data structure, heap properties and operations. HeapSort. Priority queue. Other heap applications. Mergeable heaps: binomial heap, pairing heap, randomised meldable heap.

Session 3

Segment trees. Top-down implementation. Bottom-up implementation. Segment trees applications. Persistent data structures. Persistent stack, persistent array. Persistent Fenwick and segment trees.

Session 4

Cartesian trees, treap data structure. Merge and split operations. Treap implementation in detail. Treap applications.

Session 2

Fenwick tree. Description and motivation. Implementation of Fenwick tree. Generalisation for higher dimensions. Skip list data structure. Implementation details. Indexable skiplist.