Teacher
|
PATRIGNANI MAURIZIO
(syllabus)
PART 1: Generalities and tools. Definitions of computational problem, algorithm, data structure. Random Access Machine and pseudocode. Asymptotic study of functions (big-O, Omega, and Theta notations). Asymptotic complexity of algorithms and problems. Ammortized complexity. Worst/average/best case analysis. Recursion and recursion equalities. Theorems for the analysis of recursion equalities.
PART 2: Abstract data types. Abstract data types and their representations. Already known examples: sets, stacks, queues, lists, etc. Management of dynamic data structures. Trees: binary trees; arbitrary degree trees; traversals of trees; binary search trees; red-black trees. Hash tables. Graphs: representations with adjacency matrix and adjacency lists. DFS and BFS. Graphs and connectivity. Connected components. Minimum-lengths paths.
PART 3: Algorithmic paradigms. Greedy algorithms (example: selection sort). Iterative algorithms (example: insertion sort). Divide et impera algorithms (examples: merge-sort and quick-sort).
PART 4: The course requires (and sometimes recalls) the following notions of C Language. Imperative programming. Elementary data types. Functions. Arrays and pointers. Strings. Memory management: Heap and Stack. Management of C projects: prototypes and implementations. Recursion and memory. Records and pointers. Dynamic memory management.
(reference books)
Slides provided by the teacher and downloadable day by day from the course website: https://moodle1.ing.uniroma3.it/ In order to download the slides the usual userid-password pair of Roma Tre University is sufficient.
|