GENERAL INFORMATICS

Course objectives

General objectives Acquire basic knowledge on the design of basic algorithms, iterative and recursive algorithms, and the computation of their computational efficiency. Specific objectives Knowledge and understanding: At the end of the course students will know the basic methodologies for the design and analysis of iterative and recursive algorithms, the main data structures, some ways to explore such structures, the main sorting algorithms and the most basic implementations of the dictionaries. They will have a good knowledge of the C language, including advanced aspects such as dynamic memory allocation, pointer arithmetic and separate program compilation. Apply knowledge and understanding: At the end of the course students will have become familiar with the main basic data structures, in particular those implementing dictionaries. They will be able to explain the algorithms and analyze their time complexity, highlighting how their performances depend on the used data structure. They will be able to design new data structures and related algorithms, on the basis of the existing ones; they will be able to explain the main sorting algorithms, illustrating the underlying design strategies and their time complexity analysis; they will be able to compare the asymptotic behavior of the execution times of the studied algorithms, to design recursive solutions to problems and to analyze their asymptotic time complexity. Finally, they will be able to implement the learned algorithms and data structures in the C language, with attention also to the correctness, clarity and concrete efficiency of the programs. Critical and judgmental skills: Students will be able to analyze the quality of an algorithm and related data structures, both from the effective resolution of the problem and from the time complexity point of views. Communication skills: Students will acquire the ability to expose their knowledge in a clear and organized way, which will be verified both through the written tests and during the oral examination. Students will be able to express an algorithmic idea rigorously both at high level, through the use of the pseudocode, and in the C language. Learning ability: Once the cycle of studies is completed, the acquired knowledge will allow students to face the study of algorithmic techniques, of more advanced data structures and of advanced programming methodologies within a master's degree course.

Channel 1
IVANO SALVO Lecturers' profile

Program - Frequency - Exams

Course program
General part (60 hours): Description and design of efficient algorithms: Introduction to the concepts of algorithm, data structure, efficiency, computational complexity. Asymptotic notation. Introduction to recursion. The problem of sorting. Basic data structures (arrays, lists, stacks, queues, priority queues, trees). Dictionaries. Graphs. Part on the C language (24 hours): C language: Principles of good programming (structured programming, development of correct codes following a top-down methodology by structuring code with use of functions). Recall of elementary notions of the C language: iterative constructs and functions, vectors and structures. Recursion in C. Pointers and dynamic memory allocation. Lists and binary trees.
Prerequisites
Basic notions of Programming.
Books
Reference text: T. H. Cormen, Charles E. Leiserson, Ronald L. Rivest: Introduction to algorithms, The MIT Press It will be the teachers' responsibility to distribute didactic material, related to the lessons and exercises of the general part (in the form of teacher's notes) and to the C language (in the form of handouts and sample programs written in C language).
Teaching mode
Beside the frontal teaching, both for what concerns the general part and the part on the C language (divided into lessons for about 70% of the hours and exercises for the remaining 30%), there is a tutoring activity in laboratory, not mandatory, where students can individually develop programs supported by a tutor. NOTE: in the case of persistence of the Covid-19 emergency lectures will be held in mixed mode (with part of the students in presence and part at distance).
Frequency
Following lectures is highly recommended.
Exam mode
The exam aims at evaluating what students have learned through a *written test* (consisting in solving problems of the same type as those carried out in the exercises), homeworks (consisting in writing and running C programs of varying difficulty) and an *oral exam* (consisting in the discussion of the most relevant topics illustrated in the course). The written test will last about two hours and can be replaced by intermediate tests (about 1 hour each). To pass the exam, students need to achieve a grade of not less than 18/30. Students must demonstrate that they have acquired sufficient knowledge of the topics of both parts of the program. To achieve a score of 30/30 cum laude, students must instead demonstrate that they have acquired excellent knowledge of all the topics covered during the course and be able to link them in a logical and coherent manner.
Bibliography
J. Kleimberg, E. Tardos: "Algorithm Design", Pearson, 2006. E. W. Dijkstra: "A Discipline of Programming", Prentice Hall, 1976. J. Bentley: "Programming Pearls" (1986) and "More Programming Pearls" (1988), Addison Wesley.
Lesson mode
Lessons are traditional with slides. Blended lessons will be available depending on pandemic evolution.
ADOLFO PIPERNO Lecturers' profile

Program - Frequency - Exams

Course program
C language: Principles of good programming (structured programming, development of correct codes following a top-down methodology by structuring code with use of functions). [5 hours] Recall of elementary notions of the C language: iterative constructs and functions, vectors and structures. [12 hours] Recursion in C. [5 hours] Pointers and dynamic memory allocation. Lists and binary trees. [8 hours]
Prerequisites
For the C language teaching module, none
Books
Reference text: T. H. Cormen, Charles E. Leiserson, Ronald L. Rivest: Introduction to algorithms, The MIT Press It will be the teachers' responsibility to distribute didactic material, in the form of handouts and sample programs written in C language.
Teaching mode
Beside the frontal teaching, divided into lessons for about 70% of the hours and exercises for the remaining 30%, there is a tutoring activity in laboratory, not mandatory, where students can individually develop programs supported by a tutor.
Frequency
Not mandatory
Exam mode
The exam aims to evaluate learning through a written test (consisting in solving problems of the same type as those carried out in the exercises), a project (consisting in the writing and execution of C programs of varying difficulty) and an oral test ( at the request of the student) for the discussion of the written test. The written test will last about two hours, and can be replaced by two intermediate tests, both lasting two hours, the first of which will take place in the middle of the course and the second immediately after the end of the course.
Bibliography
None
Lesson mode
Frontal lessons
Channel 2
ALESSANDRO PANCONESI Lecturers' profile

Program - Frequency - Exams

Course program
General part (60 hours): Description and design of efficient algorithms: Introduction to the concepts of algorithm, data structure, efficiency, computational complexity. Asymptotic notation. Introduction to recursion. The problem of sorting. Basic data structures (arrays, lists, stacks, queues, priority queues, trees). Dictionaries. Graphs. Coding module (30 hours): The C programming language: Principles of good programming (structured programming, development of correct codes following a top-down methodology by structuring code with use of functions). C basics: iterative constructs and functions, vectors and structures. Recursion in C. Pointers and dynamic memory allocation. Fundamental data structures such as lists, stacks and binary trees.
Prerequisites
Prerequisites for the course are familiarity with the basics of any modern high-level programming language, in particular of C / C ++, which are provided in the course Programming and Calculation Laboratory (LPC), a compulsory first-year course of the Mathematics degree curriculum.
Books
Reference text: Jon Kleinberg and Eva Tardos, Algorithm design Lecture notes and other material may be provided by the instructor when appropriate
Teaching mode
Besides lectures in class for the core material and the coding module (for about 70% and 30% of the time, respectively), non-mandatory tutoring in the coding lab is provided, so that students can individually develop programs supported by a tutor.
Exam mode
The exam aims at evaluating what students have learned through a written test (consisting in solving problems of the same type as those discussed in class), and a coding project (consisting in writing and running C programs of varying difficulty). The written test can be replaced by two intermediate tests, the first of which (midterm) takes place at about mid-course and the second one immediately after the end of the course. The midterm focuses on the topics covered so far, while the second on the topics covered in the remaining.
Lesson mode
Besides lectures in class for the core material and the coding module (for about 70% and 30% of the time, respectively), non-mandatory tutoring in the coding lab is provided, so that students can individually develop programs supported by a tutor.
CLAUDIO CILLI Lecturers' profile
  • Lesson code1032750
  • Academic year2024/2025
  • CourseMathematics
  • CurriculumMatematica per le applicazioni
  • Year2nd year
  • Semester1st semester
  • SSDINF/01
  • CFU9
  • Subject areaAttività formative affini o integrative