ALGO1 : Introduction à l'algorithmique

Magistère informatique et télécommunications - Magistère de Mathématiques de Rennes - ENS Rennes - Année 2015/2016

Intervenants

Cours : François Schwarzentruber
Travaux dirigés : Benoit Le gouis
DM (pour les élèves du département mathématiques) : énoncé
Projet (pour les MIT1) : énoncé + sources
mardi 8 septembre 2015

Introduction

Magnets à imprimer
Tri insertion : spécifications d'un algorithme, terminaison, correction, invariant, complexité en temps, complexité en espace. Notations O(.), Ω(.), Θ(.)
Tri fusion : algorithme récursif, paradigme diviser pour régner, récurrence
Optimalité : modèle de calcul, type abstrait, arbres de décision
mardi 15 septembre 2015 Démonstration comparaison tri insertion et tri fusion sur un tableau quelconque
Démonstration comparaison tri insertion et tri fusion sur un tableau presque trié
Tri insertion et tri shell
Démonstration tri shell

Tri par tas

Tri par tas et file de priorité
Tri sélection
Tri par tas comme une variante du tri sélection
Type abstrait : file de priorité. Implémentation avec un tas.

Bonus : tri fusion en place (non montré en cours)

Arbres binaires de recherche (ABR)

Motivation : intersection de segments verticaux et horizontaux
mardi 22 septembre 2015 Transparents ABR
Définition des ABR. Recherche, ajout, suppression.
Equilibrage (Adelson-Velsky-Landis)
Fiche rotations
Transparents sur les nombres d'équilibrages
Animation sur le web pour les ABR et les ABR AVL
mardi 29 septembre Table de hachage Démonstration

Diviser pour régner

Théorème fondamental
Multiplication de nombres
FFT
mardi 6 octobre 2015

Parcours en profondeur

Transparents
Pourquoi les graphes ?
Implémentation avec matrice d'adjacence ou listes d'adjacence
Exploration de labyrinthe : lemme des sommets non vus
Parcours en profondeur : complexité linéaire, pre/post, classification des arcs
Tri topologique : Magnets pour habiller le savant Cosinus
Composantes fortement connexes : algorithme de Kosaraju
(correction non démontrée)
mardi 13 octobre 2015 Correction de l'algorithme de Kosaraju

Parcours en largeur

Algorithme de parcours en largeur : distance des plus courts chemins
Correction du parcours en largeur
Adaptation pour un graphe pondéré positivement : algorithme de Dijkstra
Correction de l'algorithme de Dijkstra
Quelques mots sur les tas de Fibonacci (pas fait)
mardi 20 octobre 2015

Algorithmes gloutons

Transparents
Arbre couvrant minimal
Algorithme de Kruskal : exemple et correction
Union find : version simple et compression de chemins
Magnets qui illustrent la compression de chemins
26 octobre au 2 novembre 2015 VACANCES
mardi 3 novembre 2015

Algorithmes gloutons (suite)


Algorithme de Prim : Prim en 1957, Dijkstra en 1959, même squelette de l'algorithme !
Codage de Huffman
Formules de Horn
Converture d'ensembles
mardi 10 novembre 2015

Programmation dynamique

Transparents (ne suit pas exactement le cours)
Explication du paradigme : définition des sous-problèmes, relation de récurrence (sous-structures optimales), conception de l'algorithme
Exemple du problème de la plus longue sous-suite croissante
Algorithme de Floyd-Warshall
Algorithme de Bellmann-Ford
Exercice : calcul de la seconde structure ARN optimale
mardi 17 novembre 2015 Correction de l'exercice : calcul de la seconde structure ARN optimale

Flots

Présentation
Problème du flot maximal
Algorithme de Ford-Fulkerson
mardi 24 novembre 2015 Correction de Ford-Fulkerson : flot maximal = coupe minimale Réduction : exemple du couplage maximal.

Programmation linéaire

Présentation
Problème de programmation linéaire
Encore des réductions : plus court chemins et flots (expliqué "avec les mains")
Exemple du chocolatier
Résolution de l'exemple avec l'algorithme du simplexe présenté intuitivement
Formalisation de l'algorithme du simplexe
Outil pour résoudre des programmes linéaires
mardi 1er décembre 2015

Problèmes de "recherche"

Présentation
Problème de décision. Non-déterminisme pour modéliser la "recherche d'une solution"
Exemple : Algorithme non-déterministe pour SAC A DOS
Définition de la classe NP
Voyage optimiste dans NP : rappel de la programmation dynamique; réduction du placement de tours aux échecs vers COUPLAGE MAXIMAL
Technique quand pas d'algorithme polynomial connu : Réduction à SAT (démonstration de la réduction PICROSS vers SAT), branch and bound pour SAC A DOS
Local search pour dessiner des diagrammes d'Euler (démonstration)

PS : dans ce cours, la NP-dureté (et donc la NP-complétude) n'est pas abordée mais laissée pour ALGO2.
mardi 15 décembre 2015, 10h15-12h15 TERMINAL : sujet


Références

Autre cours sur internet