Learning objectives
The goal of the course is to familiarize students with algorithms, datastructures and with the techniques needed for analyzing their efficiency. <br />
Prerequisites
Each student is expected to know the basic concepts of discrete mathematics and calculus. <br />
Course unit content
<br /><br />Models of computation, analysis of algorithms. <br /><br />Basic data structures: linked lists, stacks, queues, trees. <br /><br />Basic sorting algorithms, lower bounds for sorting. <br /><br />Quicksort, heapsort. Sorting in linear time. <br /><br />Median and order statistics. <br /><br />Divide and conquer technique. <br /><br />Introduction to dynamic programming and greedy technique. <br /><br />Huffman trees. Binary trees, binary search trees, B-trees, red-black trees.<br />Hash tables. <br /><br />Graphs, BFS,DFS, directed acyclic graphs, topological sort and strong components. <br /><br />Union-find, MST, Kruskal's algorithm, Prim's algorithm. <br /><br />Dijkstra's algorithm, Bellman-Ford algorithm.<br /><br /><br />
Bibliography
<br />T. Cormen, C. Leiserson, R. Rivest, C. Stein, Introduction to Algorithms, McGraw-Hill;<br />C. Demetrescu, I. Finocchi, G.F. Italiano, Algoritmi e strutture dati, McGraw-Hill.<br />