Intendierte Lernergebnisse
Building on the knowledge gained in the Introduction to Structured and Object-Oriented Programming (ISOP) course, students will learn to deal with data structures and algorithms of greater structural complexity.Students will gain knowledge of cost estimation, complexity measures, fundamentals of advanced data structures, search and sorting methods, and basic graph and optimization algorithms. This will enable them to design or select algorithms and appropriate data structures for given problems and to evaluate their performance.Based on the material presented in the lecture (VO), the exercises (UE) will deepen the material presented in the lecture and will help to construct and analyze algorithms. Some of the presented data structures or algorithms will have to be implemented in Java and submitted to Moodle. In addition to this basic goal of the course, selected implementation examples serve to consolidate the programming knowledge acquired in ISOP.Skills to be acquiredTogether with the associated lecture, this course should enable the successful students toexplain the properties of algorithms;perform and empirically validate performance estimates;explain and apply the concept of asymptotic complexity (Landau and Tilde notation, complexity classes);explain and apply or compare properties of sequential data structures (arrays, lists, stacks, queues);understand and implement sorting algorithms (insertion sort, mergesort, quicksort, heapsort, countsort, bucket sort);explain and differentiate design paradigms (divide & conquer - focus, dynamic programming, greedy approaches);map graphs and trees in data structures;implement basic graph algorithms (BFS, DFS, LNR family, SSSP, Floyd-Warshall, A*, minimal spanning trees - Prim & Kruskal);deal with search trees (binary search tree, balanced binary search trees - AVL);understand the principle of hashing and implement or evaluate hashing methods (linear or quadratic probing, double hashing, linear hashing);explain cryptographic hashing;explain or implement and evaluate pattern searches (Boyer-Moore, KMP, Karp & Rabin, Tries, finite automata);understand and implement compression algorithms (RLE, Huffman code, LZW);explain the principle of error-detecting and error-correcting codes (parity codes, Hamming code);name aspects of complexity theory (NP, NPC, undecidability, Turing machines).
Lehrmethodik
Discussion of the exercise tasks, presentation including discussion of solutions by the students.Exchange & peer walk-through of programming solutions.
Inhalt/e
Introduction: Algorithm and their performanceSearching in linear data structuresSortingSome algorithm design paradigms: Divide & Conquer, Dynamic Programming, Greedy AlgorithmsGraphs and treesHashingText processing: Pattern matchingCompression, error detection & correction, encryptionOutlook: Classes P & NP, Turing Machines
Erwartete Vorkenntnisse
Programming at ISOP level
Literatur
Any textbook on Algorithms & Data Structures, e.g.,T.H. Cormen, C.E. Leiserson, C. Stein, R.L. Rivest: Introduction to Algorithms, MIT Press, 3rd ed. (2009) or 4th ed. (2022).S. Dasgupta, C. Papadimitrou, U. Vazirani: Algorithms, McGraw-Hill (2008).R. Sedgewick, K. Wayne: Algorithms, Addison-Wesley, 4th ed. (2011).M.T. Goodrich, R. Tamassia, M.H. Goldwasser: Data Structures and Algorithms in Java, Wiley, 6th ed. (2014).