This online course provides the students with the competences and skills to perform advanced Data Analysis using the Python programming language.

Computer science is described as a branch of knowledge where abstraction (dealing with ideas rather than events) is of concern. In this course, students will learn about fundamen- tal topics related to computer science and their applications within the Master in Digital Neuroscience at the University of Fribourg. This course offers students an introduction to computer science with or without prior programming experience. The course covers topics ranging from basic computing principles to the mathematical foundations required for com- puter science. Students will learn fundamental computer concepts, which can be applied to any software or computer system. Topics include computer and network architectures, algorithm design, data management and structures, and modern applications (e.g., databases, recommender systems, and digital ethics). The course brings knowledge from experts in the field, from academia, and also from business practice.


Nous aborderons dans ce cours quelques-uns des problèmes principaux en programmation répartie (élection d'un leader, exclusion mutuelle, temps logique et synchronisation, algorithmes de graphe, communication de groupe, consensus, etc.) en version répartie.

Les paradigmes de programmation concurrente et répartie seront abordés et illustrés par la mise en œuvre d’algorithmes, principalement dans le langage Erlang/Elixir.

Le cours se compose d'une partie théorique (cours et exercices), ainsi que d’une partie pratique (exercices et mini projet, réalisés dans un environnement réparti).

Pré-requis : bonne connaissance d’un langage de programmation, tel que Python, C ou Java. Une introduction à Erlang/Elixir (un langage de programmation concurrent et fonctionnel) sera donnée.

L’objectif de ce cours est d'acquérir des compétences solides en programmation impérative, en utilisant le langage Java. Le cours aborde les concepts fondamentaux comme les variables, les expressions, les instructions, ainsi que les structures de contrôle et de données.

Il vise également à développer la pensée algorithmique, en mettant l'accent sur la récursivité. Les étudiants seront amenés à comprendre comment résoudre des problèmes à travers des algorithmes efficaces.

Une attention particulière est portée à la pratique de la programmation, afin de renforcer les compétences techniques et assurer une maîtrise concrète des concepts étudiés.

Description

In this course, we teach the main principles of algorithmic design, study classic algorithmic problems and introduce the most important algorithms for solving them.

Algorithmic design principles are general approaches for developing algorithms. In particular, we consider recursive and inductive methods, divide-and-conquer, backtracking and dynamic programming.

Over the years, a number of algorithmic problems have established themselves as classical problems of computer science, and elegant data structures and algorithms have been developed to solve these problems. In this course, we consider the following problems, data structures and algorithms:

  • Sort: merge sort and quicksort
  • Search: symbol tables, binary search trees, balanced search trees, hash tables
  • Graphs: spanning trees, shortest paths, maximum flows
  • Strings: String search, tries, regular expressions, data compression

Applications from practice illustrate the concepts.

Preconditions

Basic programming skills in some programming language. We will be primarily using Python, but other languages are permitted and welcome.

Learning objectives

The students gain a basic understanding of the design and analysis of data structures and algorithms.

Comments

In general, the course consists of two hours of lecture followed by two hours of classroom exercises, which are overseen by the teachers and their assistants.

Textbooks

  • Algorithms, Robert Sedgewick und Kevin Wayne, Addison-Wesley, 4th edition, 2011
  • Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, The MIT Press, 3rd edition, 2009