channel 2
Chair (Coordinator) and Rapporteur: MASSIMO LAURIA
Lecturers
Objectives
Learning goals.
The primary objective is to learn how to describe simple processes in a formal way, through the definition of algorithms, and to acquire a methodology to evaluate the complexity of an algorithm.
Students must be able to:
- unambiguously define a problem,
- identify precisely which data should be processed,
- how to represent such data,
- how to decompose a procedure in steps that solves the problem.
These skills are expressed through the use of the Java programming language.
Knowledge and understanding.
After attending the course the students know and understand the concept of algorithm and how an algorithm can be expressed using a programming language.
They use the basic constructs of the Java language and are aware of the possibility of solving the same problem with different computational complexity algorithms.
They also know various algorithms for solving basic problems, such as searching and sorting, and some numerical algorithms.
Applying knowledge and understanding.
At the end of the course students are able to formalize algorithms for simple problems, implement them in Java language, passing through all phases: design, writing the source code, compilation, debugging and execution. They know the notations that allow to express asymptotically the complexity of an algorithm.
They know how textual, numerical, and other information can be encoded.
Making judgements.
Students are able to appreciate the difference between solving a problem and formally describing a resolutive process.
They manage to evaluate how different implementation choices can lead to solutions with different efficiency characteristics, applying paradigms studied in the context of basic problems.
Through intense laboratory activities they acquire a greater awareness of the processes underlying the use of a computer.
Communication skills.
Students acquire the formal rigor necessary to use a programming language.
They are able to appreciate and foresee the repercussions, in terms of complexity, of the application of different resolution techniques.
They know how to apply decomposition techniques, in order to reduce the solution of complex problems to the solution of simpler problems.
Learning skills.
Students who pass the exam can analyze the structure of a program, even complex, can easily be productive using any other imperative or object-oriented programming language, can distinguish for which problems an automated solution may exist.
Learning outcomes
The main goal of the course is to give basic knowledge of computer
science, to provide the tools for understanding what a computational
problem is and which kind of logical reasoning may lead to its
solution. In the meantime we want to work on programming skills in
Python programming language.
Prerequisites
As a first year course there are no prerequisites.
Programme
See http://www.massimolauria.net/informatica2025/
** History of Computer Science and its evolution.
- algorithms
- data representation
- text and numbers encoding
- binary, decimal, exadecimal representation
- ASCII, UTF-8, Latin1
** Technical skills
- files and folders, file system structure
- terminal
- Linux usage in the lab
- moving between folders and run python programs
** Programming in Python
Chapters and parts of textbook /Thinking in Python/ di Allen B. Downey ed. 2.2.23
1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12.1-12.3, 13.1-13.5, 14.1-14.5, 19.1-19.2, Appendice A, Appendice B
- variables, expressions and statements
- numeric data types
- calling and defining functions
- conditional statements
- loop statements
- iteration and recursion
- stack diagrams and recursion limits
- data types: strings and text manipulation
- lists and data sequences
- dictionaries
- file manipulation
- exceptions
- conditional expressions, list comprehension
** Development tools
- interactive Python interpreter
- text editors
- IDE (Thonny)
** Efficient algorithms
- Complexity growth
- $O$ notation
- sequential search and binary search
- recursion, call stack, Fibonacci sequence
- Greatest Common Divisor (Euler's algorithm)
- Insertion sort
- Mergesort
- stable sorting
- stack calls, recursion
Lecture notes by the teachers: chapters 1, 2, 3, 7, 8, 9, 11
Books
Book and lecture notes
- Thinking in Python --- Allen B. Downey
- Appunti su algoritmi e complessità --- Massimo Lauria
Slides on the course webpage
See http://www.massimolauria.net/informatica2025/
Bibliography
The theory part of the course is further developed in the book
Introduction to Algorithms. by Thomas H. Cormen, Charles E. Leiserson, e al.
Lessons mode
In 2026/2027 lectures are on site in presence.
Frequency
Attending class is not mandatory.
Exam mode
See: https://www.massimolauria.net/informatica2025/esami.html
Example exam questions
Here's an example of an exam
https://www.massimolauria.net/informatica2025/docs/simulazione_di_esame.zip
that matches the exam structure discussed in
https://massimolauria.net/informatica2025/esami.html
Sustainability goals
- Academic year2026/2027
- Degree program to which the course belongsStatistics, Economics, and Social Sciences
- Lesson code10626664
- Year and semester1st year - 1st semester
- Activity typeBasic educational activities
- Academic areaDiscipline Informatiche
- SSDINFO-01/A
- Mandatory presenceNo
- Languageita
- CFU9 CFU
- Total duration72 hours
- Hours distribution72 classroom hours