CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Initiation à l’algorithmie
Xavier Dupré
September 3, 2010
Xavier Dupré Initiation à l’algorithmie 1 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Coordonnées
Xavier Dupré▶ [email protected]▶ http://www.xavierdupre.fr▶ http://www.xavierdupre.fr/mywiki/Enseignements
Xavier Dupré Initiation à l’algorithmie 2 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Séances 2009
Cours▶ mardi 7 septembre 2010 16:30▶ mercredi 8 septembre 2010 16:30▶ vendredi 10 septembre 2010 08:30
TD▶ mercredi 8 septembre 2010 08:30▶ jeudi 9 septembre 2010 08:30
Xavier Dupré Initiation à l’algorithmie 3 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Plan
CoordonnéesLa programmation concrètement
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Quelques classiquesTriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Problèmes concretsEtre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Modélisation d’un phénomèneMouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Xavier Dupré Initiation à l’algorithmie 4 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Partie I
CoordonnéesLa programmation concrètement
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Quelques classiquesTriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Problèmes concretsEtre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Modélisation d’un phénomèneMouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Xavier Dupré Initiation à l’algorithmie 5 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Citation
Une bonne classe, ce n’est pas un régiment qui marche au pas, c’est unorchestre qui travaille à la même symphonie. Et si vous avez hérité dupetit triangle qui ne sait faire que ting ting, ou de la guimbarde qui nefait que bloïng bloïng, le tout est qu’ils le fassent au bon moment, lemieux possible, qu’ils deviennent un excellent triangle, une irréprochableguimbarde, et qu’ils soient fiers de la qualité que leur contribution confèreà l’ensemble.
Daniel PennacChagrin d’école
Xavier Dupré Initiation à l’algorithmie 6 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Déroulement
▶ Il n’est pas toujours évident de passer d’un problème concret à saréalisation informatique.
▶ Ce cours présente quelques aspects récurrents liés à l’utilisation del’informatique.
▶ Deux exemples :▶ ../exemple_eleve/xd_sudoku/sudoku.py▶ ../exemple_eleve/2008_foule_panique/python_foule.py
Le premier exemple propose un algorithme
simple pour résoudre les sudokus. Le
second est un projet réalisé en 2008 par
deux élèves qui n’avaient pas beaucoup de
notion de programmation.
Xavier Dupré Initiation à l’algorithmie 7 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Utilisations classiques
Le plus souvent, il n’est pas besoin de savoir programmer.▶ Méthodes de plus en plus complexes accessibles :
▶ Excel, SPSS▶ MatLab, R▶ SAS
▶ Les données sont souvent représentées sous forme de matrices ou detables.
▶ Excel▶ bases de données, langage SQL
Xavier Dupré Initiation à l’algorithmie 8 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Utilisations non classiques
Dans de nombreux cas, il n’existe pas de logiciels capables de traiter tousles cas :
▶ Les données sont rarement dans un format directement utilisables :prétraitement.
▶ Usage très spécifiques : actuariat, tables de mortalité, ...▶ Gros volumes de données : outils encore en phase de développement,
standardisation (logs des moteurs de recherches, plusieurstéro-octets par jour).
Et aussi :
▶ Utilisation d’outils existants propres à une entreprise.▶ Utilisation de méthodes non classiques : avantage concurrentiel.
Xavier Dupré Initiation à l’algorithmie 9 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Quelques usages
Automatiser : partie informatique▶ L’envoi de mail (spam, publicité)▶ Informatiser la gestion administrative (gestion des congés maladies,
gestion des emplois du temps...)▶ Suivre l’évolution de marchés financiers, définir des alertes qui se
déclenchent de façon automatiques
Calculer : partie mathématique▶ Résolutation de systèmes d’équations▶ Prévisions (météo, économiques, ...)▶ Recherche d’un document sur Internet
Xavier Dupré Initiation à l’algorithmie 10 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Données et Algorithmes
Quelque le soit le problème à résoudre, on distingue les données des mé-thodes qui les manipulent.
Représentation des donnéesC’est la première étape dans l’écriture d’un programme : commentreprésenter les données qu’on doit manipuler ? Est-ce une matrice, deuxmatrices, un hypercube, ... L’objectif est de pouvoir désigner ounommer chaque information que ces données contiennent.
AlgorithmeUne fois qu’une représentation des données a été choisie, il est possibled’écrire très précisément une méthode dont l’objectif est de calculer unrésultat à partir de ces données.
Xavier Dupré Initiation à l’algorithmie 11 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Les élections
▶ Premier tour
département inscrits votants Bayrou Royal SarkozyAIN 372899 320859 62119 65449 109211AISNE 377475 315501 42000 72835 91118ALLIER 259537 221525 39700 55744 60994
▶ Second tour
départements inscrits votants Sarkozy RoyalAIN 372951 319523 185174 120679AISNE 377467 317396 161670 141338ALLIER 259503 220677 102426 107442
▶ Que peut-on apprendre de ces données ?
Xavier Dupré Initiation à l’algorithmie 12 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Des manipulations possibles des données
▶ Manipulations simples▶ Part de votants, candidats gagnants, abstentions▶ Dessin de cartes▶ Déterminer le département dont les résultats se rapprochent le plus
des résultats globaux▶ Analyse
▶ Relier les votes à une autre source d’information : répartitioncatégories socio professionnelles, population urbaines, citadines ...
▶ Comparaison avec les élections passées▶ Modélisation : report des voix
▶ Définir ce qu’est le report des voix de façon mathématique▶ Définir ce qu’est une information cachée (ici les individus)▶ Calcul, estimation, problèmes numériques
Xavier Dupré Initiation à l’algorithmie 13 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Problème : définition du département le plus représentatif
Définition littéralele département dont les résultats se rapprochent le plus des résultatsglobaux
Termes à préciser▶ Notion de proximité : départements proches ?▶ Premier tour, second tour ? Pour les deux tours à la fois ?
Xavier Dupré Initiation à l’algorithmie 14 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Proximité
Utilisation d’une distance▶ Un département est défini par un vecteur de chiffres X = (x1, ..., )
département votants exprimés Bayrou Royal SarkozyAIN 320859 316598 62119 65449 109211
▶ Distance entre deux départements X et Y :d(X ,Y ) =
∑ni=1(xi − yi )2
Distance appropriée ?▶ Prise en compte de l’abstention ?▶ Départements sous et sur-peuplés ?▶ Distance entre un département et le pays entier ?
Xavier Dupré Initiation à l’algorithmie 15 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Résultat globaux
DistanceSomme des différences des pourcentages obtenus par chaquecandidat d(X ,Y ) =
∑ni=1(
xi∑xi− yi∑
yi)2
Département le plus représentatif▶ = Il minimise la distance.▶ = Sa distance avec les votes nationaux est la plus petite.▶ = Sa distance correspond au minimum de toutes les distances.
Xavier Dupré Initiation à l’algorithmie 16 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Tâches élémentaires
Trois parties▶ calcul des votes nationaux à partir des votes par département▶ calcul d’une distance▶ calcul du minimum
ExpressionLa formalisation de la méthode dépend souvent de l’outil utilisé pour lamettre en pratique.
▶ Excel, R, Python, C++, ...▶ pseudo langage informatique
Xavier Dupré Initiation à l’algorithmie 17 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Représentation des données 1
Pour chaque département et chaque tour, on dispose de :▶ du nom du département▶ du nombre d’inscrits▶ du nombre de votants▶ du nombre de voix pour chacun des 12 candidats
On peut choisir comme représentation :▶ un tableau <nom> contenant le nom du département▶ un second tableau <inscrit> contenant le nombre d’inscrits▶ un troisième tableau <votant> contenant le nombre de suffrage exprimés
(incluant les blancs)▶ une matrice <voix> contenant les voix pour les départements et les candidats
Xavier Dupré Initiation à l’algorithmie 18 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Représentation des données 2
Désigner une information▶ nom[i ] désigne le nom du ième département▶ voix[i ][j] désigne le nombre de voix du jème candidat pour le ième département
A quoi correspond ?
votant[i ]−12∑j=1
voix[i ][j]
Meilleure représentation ?Pourrait-on définir les suffrages non exprimés comme un 13ème candidat ?
Xavier Dupré Initiation à l’algorithmie 19 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Pseudo-code : calcul des résultats pour le pays entier
ins = 0.0can = tableau [ 0.0, ... autant que de candidats ]
pour i dans {1,..., nombre de départements} :
ins = ins + inscrit [i]pour j dans {1, ..., nombre de candidats} :
can [j] = can [j] + voix [i][j]
Le décalage ou indentationpermet d’indiquer unedépendance : ce qui est décaléne peut être compris qu’entenant compte de la dernièreligne d’un décalage inférieur.
Lorsque les lignes sont alignées, unprogramme se lit comme un livre et se réalise- exécution - dans cet ordre. Lorsque leslignes ne sont pas alignées - avec undécalage -, l’exécution dépend d’unecondition ou boucle sur lui-même.
L’instruction vot = ...est uneaffectation. On assigne une valeur à unnom ou variable. A chaque qu’on utilisece nom, il désigne la même valeurjusqu’à ce qu’une nouvelle affectationremplace cette valeur.
La représentation du pays est donnée par les entiers vot, ins et le tableau can.
Qu’est-ce qui change si on définit les suffrages non exprimés comme un 13ème candidat ?
Xavier Dupré Initiation à l’algorithmie 20 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Pseudo-code : distance
Calculer une distance à partir des voix n’aurait pas beaucoup de sens. Ilfaut la calculer à partir des pourcentages. Il faut deux étapes. On calculed’abord le nombre total de votes pour obtenir le dénominateur lors ducalcul de la distance lors de la seconde étape.
fonction distance (pays, candidat) :
s1 = 0.0s2 = 0.0pour i dans {1, ..., nombre de candidats} :
s1 = s1 + pays [i]s2 = s2 + candidat [i]
d = 0.0pour i dans {1, ..., nombre de candidats} :
d = d + (pays [i]/s1 - candidat [i]/s2)^2
Le résultat cherché est d.
Xavier Dupré Initiation à l’algorithmie 21 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Pseudo-code : minimum
def minimum (pays, voix) :mini = 0dist = infinipour i dans {1,..., nombre de départements} :
if distance (pays, voix [i]) < dist :mini = idist = distance (pays, voix [i])
Le résultat cherché est mini.On obtient l’Isère au premier tour et la Guyane au second.
01-Besancenot 02-Buffet 03-Schivardi 04- Bayrou 05-Bové 06-Voynet 07-De VilliersIsère 3,8% 2,0% 0,3% 19,3% 1,5% 1,9% 1,9%France 4,1% 1,9% 0,3% 18,6% 1,3% 1,6% 2,2%
08-Royal 09-Nihous 10-Le Pen 11-Laguiller 12-SarkozyIsère 26,9% 0,9% 10,1% 1,1% 30,2%France 25,9% 1,1% 10,4% 1,3% 31,2%
Que faut-il changer pour obtenir les départements les plus éloignés ?
Xavier Dupré Initiation à l’algorithmie 22 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Deux schémas à une boucle
Sommesomme = 0pour i dans {1,..., nombre d’éléments de tableau} :
somme = somme + tableau [i]
Minimumposition = 1pour i dans {1,..., nombre d’éléments de tableau} :
if tableau [i] < tableau [position] :position = i
Xavier Dupré Initiation à l’algorithmie 23 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Somme avec une condition
Deux sommes en une seule bouclesomme1 = 0nb1 = 0somme2 = 0nb2 = 0pour i dans {1,..., nombre d’éléments de tableau} :
si tableau [i] verifie une condition :somme1 = somme1 + tableau [i]nb1 = nb1 + 1
sinonsomme2 = somme2 + tableau [i]nb2 = nb2 + 1
On pourrait par exemple appliquer ce schéma pour calculer la répartitiongauche-droite au sein d’un même département.
Xavier Dupré Initiation à l’algorithmie 24 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Boucles imbriquées
Somme des minimasomme = 0pour i dans {1,..., nombre de lignes de mat} :
position = 1pour j dans { 2,...,nombre de colonnes de mat} :
if mat [i][j] < mat [i][position] :position = j
somme = somme + mat [i][position]
0 0 3 0 94 10 10 5 46 45 4 2 36 1 0 1 28 5 4 3 2
Xavier Dupré Initiation à l’algorithmie 25 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Boucle dépendant d’une condition
Recherche du premier élément vérifianti = 1tant que tableau [i] vérifie une condition :
i = i + 1
Cette boucle permet par exemple de rechercher le premier départementdans l’ordre alphabétique qui vote majoritairement à gauche.
Que se passe-t-il si tous les départements votent à droite ?
La condition doit être invalidée au moins une fois.
Xavier Dupré Initiation à l’algorithmie 26 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Partie II
CoordonnéesLa programmation concrètement
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Quelques classiquesTriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Problèmes concretsEtre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Modélisation d’un phénomèneMouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Xavier Dupré Initiation à l’algorithmie 27 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Citation
Les jeunes Français sont également les plus nombreux de tous les Européensà déclarer qu’il est important pour eux d’être à la hauteur des attentes desautres et de ne pas trop se faire remarquer, comme s’ils étaient convaincusd’avoir à se plier avant tout à une norme sociale.
Olivier GallandLes jeunes français ont-ils raison d’avoir peur ?
Xavier Dupré Initiation à l’algorithmie 28 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Exemple
../exemple_eleve/2009_othello/malakothello.py
Xavier Dupré Initiation à l’algorithmie 29 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Utilité de ces algorithmes
Déjà réalisés▶ Les algorithmes présentés ici existent dans tous les langages de programmation.▶ Il est rarement utile de les réécrire. Le faire pourrait introduire des erreurs.
Culture informatique▶ Il existe plusieurs variantes. Il faut savoir choisir laquelle.▶ Cela permet de comprendre certains résultats plus rapidement.▶ Les connaître permet d’en imaginer d’autres plus rapidement.
Gros volumes de données▶ Nouveaux terrains de jeux : grille informatique.▶ Possibilité de gérer d’énormes volumes de données.▶ Il n’existe pas encore de standard dans ce domaine.
Xavier Dupré Initiation à l’algorithmie 30 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Tri et les élections
ObjectifOn souhaite maintenant classes les départements du plus proche au pluséloigné des résultats obtenus pour la France.
Définition du problème▶ On dispose d’une liste de couple
(département, distance).▶ On veut trier les départements par ordre
de distance croissant.▶ On trie sur la distance mais c’est l’ordre
des départements qui nous intéresse.
La distance est ici celle définietransparent 15. Plus elle estpetite, plus les résultats dudépartements sont proches dupays dans son ensemble.
Xavier Dupré Initiation à l’algorithmie 31 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Tri par sélection : idées
Le premier élémentC’est le plus petit élément du tableau : c’est le minimum.
Le second élémentC’est le plus petit élément du tableau sans tenir compte de l’élément trouvé en premier.
Le troisième élémentC’est le plus petit élément du tableau sans tenir compte des l’éléments trouvés en premier etsecond.
Idées1. On commence à n = 1.
2. On cherche le plus petit élément de la position n jusqu’à la fin du tableau.
3. On échange cet élément avec celui de la position n.
4. On passe de n à n + 1, puis on retourne l’étape 2 sauf s’il n’y a pas d’élément n + 1.
Xavier Dupré Initiation à l’algorithmie 32 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Tri par sélection : algorithme
On souhaite trier le tableau T . T [i ] désigne l’élément i . n son nombred’élément.
pour i allant de 1 à n-1
p = i
pour j allant de i+1 à nsi T[j] < T[p] alors p = j
x = T[p]T[p] = T[i]T[i] = x
Le programme comporte deux boucles :▶ La première boucle sur les positions.▶ La seconde recherche le minimum.
Les dernières lignes opèrent ce qu’on appelle unéchange. Il est impossible d’échanger le contenude deux variables sans en créer une troisième. Celarevient à échanger le contenu de deux tiroirs sansjamais pouvoir mettre temporairement les deuxcontenus dans le même tiroir.
Xavier Dupré Initiation à l’algorithmie 33 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Tri : illustration
Xavier Dupré Initiation à l’algorithmie 34 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Retour aux élections
L’algorithme de tri opère sur les distances. Que fait-on des départe-ments auxquels les distances sont rattachées ?
pour i allant de 1 à n-1
p = i
pour j allant de i+1 à nsi T[j] < T[p] alors p = j
x = T[p]T[p] = T[i]T[i] = x
n = nom[p]nom[p] = nom[i]nom[i] = n
On suppose que T désigne le tableau desdistances et nom celui des départements.
Il suffit d’appliquer les mêmes échanges sur le
tableau des départements : il reste de cette façon
synchronisé avec celui des distances.
Xavier Dupré Initiation à l’algorithmie 35 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Résultats : les dix départements extrêmes
les plus prochesISERESAONE-ET-LOIRECOTE-D’ORINDRE-ET-LOIREDROMEVAL-D’OISEHAUTES-ALPESSARTHEALPES-DE-HAUTE-PROVENCEDOUBS
les plus éloignésPYRENEES-ATLANTIQUESARIEGEGUYANEALPES-MARITIMESGUADELOUPEWALLIS-ET-FUTUNANOUVELLE-CALEDONIEREUNIONPOLYNESIE-FRANCAISEMARTINIQUE
Xavier Dupré Initiation à l’algorithmie 36 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Métropole
Les couleurs foncées indiquent les
départements éloignés des résultats
nationaux. La couleur dépend de
la distance et non du rang du
département.
Xavier Dupré Initiation à l’algorithmie 37 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Définition
DéfinitionLe coût d’un algorithme désigne le nombre d’opérations nécessaires àcet agorithme pour traiter un nombre fini de données. Ce coût estexprimé en fonction de la taille des données.
Le plus souvent, on se contente d’un ordre de grandeur : O(n). Cela per-met d’estimer l’évolution du temps si la taille des données double, quadru-ple, ...
Il existe plusieurs algorithmes de tri dont les coûts sont différents. Les plusrapides sont souvent les plus complexes.
Xavier Dupré Initiation à l’algorithmie 38 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Cas du tri par sélection
Une opération : c’est une opération numérique, une comparaison, une affectation.
pour i allant de 1 à n-1
p = i
pour j allant de i+1 à nsi T[j] < T[p] alors p = j
x = T[p]T[p] = T[i]T[i] = x
n(n−1)2 ∼ O(n2) valeurs pour le couple (i, j)
Le programme comporte deux boucles :▶ La première va de 1 à n − 1.▶ La seconde va de i à n.
ji
23 34 4 4 ...5 5 5... ... ...
n − 1 n − 1 n − 1 n − 1n n n n
Le nombre d’opérations dans chaque boucle est constant, il ne dépend pas de n.
On ne garde que l’expression O(n2).
Xavier Dupré Initiation à l’algorithmie 39 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Autres tris
▶ le tri par sélection▶ coût : O(n2)
▶ le tri quicksort▶ coût : O(n ln n) en moyenne▶ Un coût en moyenne signifie que selon l’ordre initial des données
dans le tableau, le coût peut varier. La moyenne sur toutes lespermutations possibles est O(n ln n).
▶ le tri par fusion▶ coût : O(n ln n)▶ inconvénient : il nécessite la création d’un second tableau
Xavier Dupré Initiation à l’algorithmie 40 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Multiplication d’une matrice
On multiplie deux matrices carrées de di-mension n.
cij =∑
k aikbkj
▶ algorithme classique▶ coût : O(n3)
▶ algorithme de Strassen▶ coût : O(nlog2 7) ∼ O(n2,807)▶ L’algorithme fonctionne avec des matrices de dimension n = 2p.▶ Il devient intéressant pour les matrices de grandes tailles.
De nombreux algorithmes sont accessibles via un langage de programma-tion ou des logiciels. On peut même trouver des programmes déjà faitsvia Internet par exemple sur Wikipedia ou grâce des mots-clés commeNumerical Recipes saisis sur un moteur de recherche.
Xavier Dupré Initiation à l’algorithmie 41 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Solutions optimales différentes selon les cas
Pour chercher une valeur v dans un tableau T , il suffit de le parcourir en entier et de s’arrêter
si on trouve la valeur cherchée.
pour i allant de 1 à nsi T[i] = v alors on a trouvé
si on n’a rien trouvé ici,c’est que la valeurn’est pas présente
Le coût de la recherche est en O(n) au pire.
Si on cherche N valeurs dans le tableau T , le coûtde ces recherches est O(Nn).
Peut-on faire mieux si N � n ?
Et si on triait le tableau d’abord avant de chercher ensuite ?
Xavier Dupré Initiation à l’algorithmie 42 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Trier puis chercher
Si on suppose le tableau T trié, en comparant avec la valeur du milieu, on sait déjà dans quelle
moitié se trouve la valeur cherchée.
a = 1b = ntant que a <= b
m = (a+b)/2if v == T[m] alors on a trouvéif v < T[m] alors b = m-1sinon a = m+1
Le coût d’une recherche est alors de
ln2 n ∼ O(ln n).
Le coût de N recherches est O(n ln n) + O(N ln n) à comparer avec O(Nn).
La meilleure solution n’est pas la même selon le nombre de recherches.
Xavier Dupré Initiation à l’algorithmie 43 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Tableau, Matrice, ...
Calcul matricielTous les langages de programmations évolués incluent la possibilité de créer des tableaux. Le
calcul matriciel est très répandu et il n’est plus besoin aujourd’hui de réinventer des roues
telles que le produit matriciel, une inversion matricielle, la recherche des valeurs propres, le
calcul d’une transformée de Fourrier...
Un concept : plusieurs descriptionIl est possible de créer des tableaux à une, deux, trois, ..., n dimensions. L’informatique
propose aussi plusieurs variantes d’un même concept là où on ne raisonne qu’avec un seul.
Ainsi on distingue les matrices creuses1 dont la plupart des coefficients sont nuls : elles évitent
de créer de grands tableaux là où il suffit de ne mémoriser que quelques coefficients.
1ou sparse matrixXavier Dupré Initiation à l’algorithmie 44 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Dictionnaires
DéfinitionUn dictionnaire2 est un tableau dont les indices ne sont pasnécessairement entiers mais des valeurs qu’on peut ordonner.
M =
0 1 0 00 0 1 01 0 0 00 0 0 1
Les dictionnaires ne se bornent pas auxmatrices creuses, l’écriture suggérée àdroite a un sens :
M[1, 2] = 1
M[2, 3] = 1
M[3, 1] = 1
M[4, 4] = 1
M[1] = 1
M[1, 1] = 1
M[1, 2] = 1
M[1, 2, 1] = 1
2ou mapXavier Dupré Initiation à l’algorithmie 45 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Les chaînes de caractères
DéfinitionLes chaînes de caractères3 modélisent une information textuelle : c’est un tableau decaractères, chaque caractère étant représenté par un code numérique.
s = "exemple"s = ’exemple’
Dans la plupart des langages, les chaînes decaractères apparaissent entre guillemets ou entreapostrophes.
L’ordinateur ne reconnaît que les nombres. La communauté informatique s’est mise d’accordpour toujours représenter le même caractère avec le même code sur toutes les machines infor-matiques. Le code ’65’ représente ’A’, 97 représente ’a’. A l’origine conçus par des anglophone,ces codes ont été étendus pour prendre en compte les accents, puis les caractères asiatiques.
La recherche au sein d’une chaîne de caractères est un problème assez fréquent résolu par lesexpressions régulières. Elles permettent par exemple de rechercher toutes les fois qu’on trouveles mots insécurité et problème proches dans un discours politique.
3 ou stringXavier Dupré Initiation à l’algorithmie 46 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Distribution
Quels type de données choisiriez-vous pour calculer la distribution d’unepopulation selon :
▶ L’âge ?▶ Le prénom ?▶ L’âge des parents ?▶ Le revenu ?
Quel type de données choisir pour représenter un arbre généalogique ?Comment obtient-on l’ensemble des ancêtres d’une personne ?
Xavier Dupré Initiation à l’algorithmie 47 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
TriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Mémoire et disque dur et...
La mémoire contient tout ce que l’ordinateur peut manipuler. Elle estlimitée à quelques giga-octets (Go).
Le disque dur peut être beaucoup plus grand. Pour manipuler son contenu,l’ordinateur doit le copier en mémoire : le disque dur entier ne peut êtremanipulé en même temps.
Ce sont plusieurs milliards de requêtes qu’un moteur de recherche reçoitpar jour. Supposons qu’elles tiennent sur un disque dur comme une longueliste de requêtes qui s’ajoutent les unes à la suite des autres au fur et àmesure qu’elles arrivent.
On suppose que le disque dur contient 10 milliards de requêtes mais quel’ordinateur ne peut en manipuler que 100.000 à la fois. Comment déter-miner le nombre de requêtes différentes ?
Xavier Dupré Initiation à l’algorithmie 48 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Partie III
CoordonnéesLa programmation concrètement
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Quelques classiquesTriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Problèmes concretsEtre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Modélisation d’un phénomèneMouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Xavier Dupré Initiation à l’algorithmie 49 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Citation
When people make significant investment decisions, they must depend onconfidence. Standard economic theory suggests otherwise. It describesa formal process for making rational decisions: people consider all theoptions available to them.
Georges A. Akerlof, Robert J., ShillerAnimal Spirits
Xavier Dupré Initiation à l’algorithmie 50 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Exemple
../exemple_eleve/2009_cluedo/projetdepythondeNPONSetRPROM1.py
Xavier Dupré Initiation à l’algorithmie 51 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Cas concrets
Quelles sont toutes les cases accessibles en 5 coups depuis le hall ?
A# # # ##
D
Combien de déplacements faut-ilpour aller de D à A ?
Xavier Dupré Initiation à l’algorithmie 52 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Débuter et propager
?# # # ##
0
?# # # ## 2
2 1 22 1 0 1 2
2 1 2
?# # # ##
11 0 1
1
?# # # ## 3 2 33 2 1 2 3
3 2 1 0 1 2 33 2 1 2 3
Xavier Dupré Initiation à l’algorithmie 53 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
De l’idée au programme
?# # # ## 3 2 3 4
4 3 2 1 2 3 44 3 2 1 0 1 2 3
4 3 2 1 2 3 4
On choisit une matrice de nombres :
M = [ [ 1000,1000,...,1000],[ 1000,1000,...,1000],...[ 1000,1000,...,1000] ]
Elle représente la distance depuis la case
(5, 6) jusqu’à n’importe quelle case.
Pourquoi 1000 ?
9 8 9 10 9 8 7 88 7 8 9 8 7 6 77 6 # # # # 5 66 5 # 3 2 3 4 55 4 3 2 1 2 3 44 3 2 1 0 1 2 35 4 3 2 1 2 3 4
On initialise :
M [3][3] = -1M [3][4] = -1M [3][5] = -1M [3][6] = -1M [4][3] = -1M [6][5] = 0
Il a fallu choisir une convention pour les
cases infranchissables.
Xavier Dupré Initiation à l’algorithmie 54 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Essai 1/3
pour toutes les lignes ipour toutes les colonnes j
si M[i][j] = 1000 etM [i][j+1] >= 0 alorsM[i][j] = M [i][j+1]+1
si M[i][j] = 1000 etM [i][j-1] >= 0 alorsM[i][j] = M [i][j-1]+1
si M[i][j] = 1000 etM [i][j] >= 0 alorsM[i+1][j] = M [i+1][j]+1
si M[i][j] = 1000 etM [i-1][j] >= 0 alorsM[i][j] = M [i-1][j]+1
L’application de l’algorithme retourne uneerreur :
Il semble impossible d’accéder à certains
éléments car ils sont hors du tableau.
Xavier Dupré Initiation à l’algorithmie 55 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Essai 2/3
pour toutes les lignes ipour toutes les colonnes j
si j <= 8 etM[i][j] = 1000 etM [i][j+1] >= 0 alorsM[i][j] = M [i][j+1]+1
si j > 1 etM[i][j] = 1000 etM [i][j-1] >= 0 alorsM[i][j] = M [i][j-1]+1
si i <= 8 etM[i][j] = 1000 etM [i][j] >= 0 alorsM[i+1][j] = M [i+1][j]+1
si i > 1 etM[i][j] = 1000 etM [i-1][j] >= 0 alorsM[i][j] = M [i-1][j]+1
L’application de l’algorithme donne :
1001 1001 1001 1001 1001 1001 1001 10021001 1001 1001 1001 1001 1001 1001 10021001 1002 -1 -1 -1 -1 1001 10021001 1002 -1 1001 1001 1001 1001 10021001 1001 1001 1001 1001 1001 1001 10021001 1001 1001 1 0 1001 1001 10021001 1001 1001 1001 1001 1001 1001 10021001 1001 1001 1001 1001 1001 1001 1002
Que s’est-il passé ?
Xavier Dupré Initiation à l’algorithmie 56 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Essai 3/3
pour toutes les lignes ipour toutes les colonnes j
si j <= 8 etM[i][j] >= 1000 etM [i][j+1] >= 0 alorsM[i][j] = M [i][j+1]+1
si j > 1 etM[i][j] >= 1000 etM [i][j-1] >= 0 alorsM[i][j] = M [i][j-1]+1
si i <= 8 etM[i][j] >= 1000 etM [i][j] >= 0 alorsM[i+1][j] = M [i+1][j]+1
si i > 1 etM[i][j] >= 1000 etM [i-1][j] >= 0 alorsM[i][j] = M [i-1][j]+1
On change :si ... et M[i][j] = 1000 et ...
ensi ... et M[i][j] >= 1000 et ...
Pour obtenir :
1001 1001 1001 1001 1001 1001 1001 10011002 1002 1002 1002 1002 1002 1002 10021003 1003 -1 -1 -1 -1 1003 10031004 1004 -1 1001 1001 1001 1004 10041005 1005 1001 1002 1 2 3 41006 1006 1002 1 0 1 2 31007 1007 1003 2 3 4 5 61008 1008 1004 3 4 5 6 7
Que reste-t-il à faire ?
Xavier Dupré Initiation à l’algorithmie 57 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Version finale
pour k allant de 1 à 12pour toutes les lignes i
pour toutes les colonnes jsi j <= 8 et
M[i][j] >= 1000 etM [i][j+1] >= 0 alorsM[i][j] = M [i][j+1]+1
si j > 1 etM[i][j] >= 1000 etM [i][j-1] >= 0 alorsM[i][j] = M [i][j-1]+1
si i <= 8 etM[i][j] >= 1000 etM [i][j] >= 0 alorsM[i+1][j] = M [i+1][j]+1
si i > 1 etM[i][j] >= 1000 etM [i-1][j] >= 0 alorsM[i][j] = M [i-1][j]+1
On répète l’opération aussi loin que peut nous
porter un coup de dés. Soit 12 fois :
9 8 9 10 9 8 7 88 7 8 9 8 7 6 77 6 -1 -1 -1 -1 5 66 5 -1 3 2 3 4 55 4 3 2 1 2 3 44 3 2 1 0 1 2 35 4 3 2 3 4 5 66 5 4 3 4 5 6 7
Le coût de l’algorithme est O(12.n2) = O(n2) où n
est la dimension de la matrice.
Il est possible de faire mieux mais ce n’est pas
toujours utile. Il vaut mieux conserver un
algorithme simple lorsqu’il n’est pas nécessaire de
faire plus efficace. Le programme est plus facile à
comprendre par la suite.
Xavier Dupré Initiation à l’algorithmie 58 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Mémoriser le chemin
9 8 9 10 9 8 7 88 7↓ ←8 9 8 7 6 77 6↓ -1 -1 -1 -1 5 66 5↓ -1 3 2 3 4 55 4↓ 3 2 1 2 3 44 3→ 2→ 1→ 0 1 2 35 4 3 2 3 4 5 66 5 4 3 4 5 6 7
Le tableau final nous donne les cases quele joueur peut atteindre étant donné soncoup de dés. Il ne donne pas d’indicationquant au chemin qu’il faut suivre.
Le nombre de chemins est très grand (O(n!)). Et pourtant il est possi-ble de retrouver le chemin le plus court à condition de conserver un peud’information lors du calcul des distances.
Xavier Dupré Initiation à l’algorithmie 59 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Mémoriser le prédécesseur
On peut conserver le voisin qui a permis d’obtenir la
distance.
si j <= 8 etM[i][j] >= 1000 etM [i][j+1] >= 0 alorsM[i][j] = M [i][j+1]+1
On utilise par exemple un second tableau de couples
(un tableau à trois dimensions) :
si j <= 8 etM[i][j] >= 1000 etM [i][j+1] >= 0 alorsM[i][j] = M [i][j+1]+1P[i][j] = (i,j+1)
Ou deux tableaux :
...Pi[i][j] = iPj[i][j] = j+1
(1, 2) (2, 2) (1, 2) (1, 5) (1, 6) (1, 7) (2, 7) (1, 7)(2, 2) *(3, 2) *(2, 2) (2, 5) (2, 6) (2, 7) (3, 7) (2, 7)(3, 2) *(4, 2) (0, 0) (0, 0) (0, 0) (0, 0) (4, 7) (3, 7)(4, 2) *(5, 2) (0, 0) (4, 5) (5, 5) (4, 5) (4, 6) (4, 7)(5, 2) *(5, 3) *(5, 4) (5, 5) (6, 5) (5, 5) (5, 6) (5, 7)(6, 2) (6, 3) *(6, 4) *(6, 5) *(0, 0) (6, 5) (6, 6) (6, 7)(7, 2) (7, 3) (7, 4) (6, 4) (7, 4) (7, 5) (7, 6) (7, 7)(8, 2) (8, 3) (8, 4) (7, 4) (8, 4) (8, 5) (8, 6) (8, 7)
Xavier Dupré Initiation à l’algorithmie 60 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Obtenir le chemin
On part de la case i = 2, j = 2.
P[i][j] indique la case d’avant.
i,j = 2,2i,j = P [i][j] # case d’avanti,j = P [i][j] # case d’encore avanti,j = P [i][j] # case d’encore avant...
Condition d’arrêt ?
On utilise une boucle qui s’arrête lorsqu’on atteint la
case de départ.
i,j = 2,2chemin = []tant que i,j != 0,0
ajoute la case i,j au chemini,j = P [i][j]
Le chemin est-il dans le bon sens ?
Résultat :
(2, 2)→ (3, 2)→ (4, 2)→ (5, 2)→ (5, 3)→ (5, 4)→ (6, 4)→ (6, 5)
Xavier Dupré Initiation à l’algorithmie 61 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Retournement
i,j = 1,ntant que i < j
t = chemin [i]chemin [i] = chemin [j]chemin [j] = ti = i + 1j = j - 1
Résultat :
(6, 5)→ (6, 4)→ (5, 4)→ (5, 3)→ (5, 2)→ (4, 2)→ (3, 2)→ (2, 2)→(6, 5)
Xavier Dupré Initiation à l’algorithmie 62 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Coloriage
On souhaite colorier la zone définie par le contour et un point qui indiquequel côté du contour on souhaite colorier.
Xavier Dupré Initiation à l’algorithmie 63 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Matrice
Ce problème est identique au précédent. L’image est un quadrillage. Ilsuffit de :
▶ remplir la matrice avec la valeur 1000▶ associer à la couleur rouge le nombre -1▶ d’inscrir le nombre 0 au point qui indique le côté du contour à
colorierIl ne reste plus qu’à utiliser l’algorithme précédent. Toutes les cases en-dessous de 1000 seront rouges.
Xavier Dupré Initiation à l’algorithmie 64 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Lors de la conception
▶ Découper un problème complexe en petits problèmes plus simples.▶ Dessiner.▶ Choisir des structures de données (matrices, dictionnaires).▶ Regarder si cela marche pour les premières et dernières itérations.
Xavier Dupré Initiation à l’algorithmie 65 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Lors de l’écriture
▶ Rassembler les constantes au même endroit.▶ Utiliser des noms explicites.▶ Tester au fur et à mesure et jamais au dernier au moment.▶ Eviter de recopier la même chose plusieurs fois de suite, s’il y a une
erreur, il faudra corriger toutes les copies.
Xavier Dupré Initiation à l’algorithmie 66 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Lors de l’exécution
▶ S’il y a des formules, tester le programme avec des données pourlesquelles vous connaissez le résultat.
▶ Si le programme est long, tester le programme avec des petits jeuxde données.
▶ Conserver des versions intermédiaires qui marchent.
Xavier Dupré Initiation à l’algorithmie 67 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
En cas de problèmes
▶ Ne pas oublier de faire des pauses. Prendre du recul est souventutile.
▶ Essayer de localiser l’erreur.▶ Afficher les résultats intermédiaires.▶ Regarder sur Internet avec un moteur de recherche.▶ Penser aux effets de bords : indices trop grands ou trop petits pour
un tableau, une matrice.▶ Deux variables qui portent le même nom : ça prête à confusion.
Xavier Dupré Initiation à l’algorithmie 68 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Etre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Quelques problèmes
Comment définir la phrase ou l’expression la plus courante d’un hommepolitique ou d’un auteur ?
Xavier Dupré Initiation à l’algorithmie 69 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Partie IV
CoordonnéesLa programmation concrètement
PrésentationUtilité de la programmationExemple : les élections présidentiellesFormalisation du problèmeSchémas récurrents
Quelques classiquesTriCoût d’un algorithmeRecherche dichotomiqueStructure de données classiquesQuelques problèmes
Problèmes concretsEtre inventifAvancer à tâtonsProlongementSimilitudeQuelques règles pour s’en sortir
Modélisation d’un phénomèneMouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Xavier Dupré Initiation à l’algorithmie 70 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Citation
C’est simplement le manque d’imagination, la recherche de la facilité et lemanque de bonne volonté qui ont condamné l’habitant des villes modernesà vivre dans les quarties surpeuplés et informes, et à supporter sa vie durant,le spectacle abrutissant des immeubles de rapport et des alignements defaçades éternellement semblables. Certes la douce puissance de l’habitudeémousse notre sensibilité et nous rend moins vulnérables à ces impressions.
Camillo SitteL’art de bâtir des villes
Xavier Dupré Initiation à l’algorithmie 71 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Exemple
../exemple_eleve/xd_paris_evolution/voisinage_evolution_cercle.py
Xavier Dupré Initiation à l’algorithmie 72 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Carte scolaire
Le prix des appartements à Paris ne cessent de grimperrejetant les populations les moins aisées en banlieue. Il n’y apas une seule raison qui explique cela :
▶ Les gens qui se ressemblent ont tendance à serassembler. On choisit son futur quartier pour saproximité avec un emploi, pour l’atmosphère, pour lesgens qui y résident déjà.
▶ Une autre raison est l’actuelle carte scolaire quiincitent des futurs parents à s’installer dans un quartieroù l’éducation accessible correspond à celle qu’ilsveulent donner à leurs enfants. Un mauvais lycée ferafuir les parents, un bon lycée les attirera. Cephénomène a aussi un impact sur l’immobilier.
On cherche à reproduire au moyen d’une simulation
informatique le comportement des Parisiens de façon à
anticiper les évolutions sociologiques au sein de Paris. Le
biais recherché est ici une tendance des gens à se
regrouper avec plus facilité s’ils sont plus riches.
Xavier Dupré Initiation à l’algorithmie 73 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Le décor
Pour faire simple, on considère que :
▶ La ville est composée de pâtés de maisons.▶ Ces pâtés sont disposés selon une grille
perpendiculaire.▶ Chaque foyer appartient à une des 6 catégories
(de 0 à 5), de la moins aisée à la plus aisée.▶ Un pâté ne contient que des foyers de la
même classe.▶ La ville est initialement un cercle.▶ Les classes sont initialement tirées
aléatoirement.
Xavier Dupré Initiation à l’algorithmie 74 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Les gens
Il faut maintenant gérer les interactions entre des foyersvoisins. Pour le moment, on suppose que ce sont les seulespossibles.
▶ On suppose deux voisins v et w de classes i , j. Si v estentouré de "j" et que w est entouré de "i" alors ilspermutent.
▶ Si un voisin est suffisamment plus riche que son voisin,il s’étendra.
▶ La ville s’étend et colonise des espaces inhabités qui lesont en premier par des foyers de la même classe quecelle des plus proches.
Est-ce réaliste ? Est-il possible d’apprendre d’une telle simulation ?
Xavier Dupré Initiation à l’algorithmie 75 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
De Paris aléatoire à Paris riche
Les couleurs rouges représentent les plus
riches, les oranges la classe moyenne, les
ocres les moins aisés.Xavier Dupré Initiation à l’algorithmie 76 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Stabilité de la simulation
Les résultats peuvent être très variables d’une simulation à l’autre. Maisil se peut que certains soient plus ou moins constants après un nombresuffisant d’itérations :
▶ la proportion de la population riche, moyenne, pauvre sur l’ensembleau centre de Paris
▶ le nombre de foyers n’ayant pas des voisins semblables.▶ caractéristiques géographiques de l’extension
simulation 0 0 1 2 3 4 5 (riche)simulation 1 509 582 455 922 1271 2141simulation 2 927 381 481 562 1872 2012simulation 3 480 1110 755 764 930 2027simulation 4 669 276 601 1144 1881 1346simulation 5 467 734 579 1609 1121 1978itération 0 325 337 318 310 324 347
Xavier Dupré Initiation à l’algorithmie 77 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Paris actuelle
Xavier Dupré Initiation à l’algorithmie 78 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Hypothétique futur de Paris
Pour prévoir l’avenir, il faudrait :▶ Connaître deux configurations à des dates
éloignées.▶ Ajuster le modèle pour simuler le passage
d’une à l’autre.▶ Continuer la simulation...
Xavier Dupré Initiation à l’algorithmie 79 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Exemple de simulation : propagation de la grippe
▶ blanc : personne saine▶ vert : personne malade▶ noir : personne morte▶ bleue : personne guérie
Xavier Dupré Initiation à l’algorithmie 80 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Modélisation d’un individu
▶ Il va au bon lui semble (son accélération est aléatoire).▶ S’il est malade, il se déplace moins vite.▶ S’il se rapproche d’un malade à une distance v , il a une probabilité
p1 de tomber malade à son tour.▶ Au bout d’un temps t, il a une probabilité p2 de mourir et 1− p2 de
guérir.▶ S’il guérit, il ne peut plus tomber malade.▶ Personne ne connaît l’état de l’autre.▶ On suppose qu’il y a une probabilité α de malades au début de la
simulation.
Le modèle dépend de cinq paramètres : v , p1, p2, t, α. On peut ajouter unsixième paramètre qui est la densité d de la population. Il est cependant reliéà v .
Xavier Dupré Initiation à l’algorithmie 81 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Graphes, probabilité de mourir p2
Nombre de morts en fonction de la probabilité de
mourir (p2).
Le taux de mortalité semble linéaire par rapport à
la probabilité de mourir.
Durée de l’épidémie en fonction de la probabilité de
mourir (p2).
La durée de l’épidémie est constante en fonction
de la probabilité de mourir (p2). C’est un résultat
attendu puisqu’une fois la maladie passée, un
sujet peut guérir ou mourir mais n’a plus aucun
impact sur la suite.
Xavier Dupré Initiation à l’algorithmie 82 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Graphes, probabilité de transmission p1
Nombre de morts en fonction de la probabilité de
transmission (p1).
Le taux de mortalité semble linéaire par rapport à
la probabilité de transmission avec une variance
d’autant plus grande que la probabilité de
transmission est grande.
Durée de l’épidémie en fonction de la probabilité de
transmission (p1).
La durée de l’épidémie ne paraît pas linéaire en
fonction de la probabilité de transmission (p1).
Xavier Dupré Initiation à l’algorithmie 83 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Graphes, proportion initiale de malades
Nombre de morts en fonction du nombre initial de
malades (α).
Le taux de mortalité croît vite puis stagne jusqu’à
atteindre le taux de mortalité p2. Il faut peu de
malades pour commencer une épidémie.
Durée de l’épidémie en fonction du nombre initial de
malade (α).
Lorsqu’il y a peu de malades, l’incertitude quant
à la durée de l’épidémie est très grande. Elle peut
survenir ou s’éteindre. Plus il y a de malades,
plus la fin de l’épidémie est proche et plus
l’incertitude est faible quant à cette durée.
Xavier Dupré Initiation à l’algorithmie 84 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Utilité
La modélisation proposée ici est loin de la réalité. Un carré uniformémentdense est loin d’une densité de population concentrée dans les grandesvilles.
Ce modèle donne une idée de la difficulté de prévoir l’évolution d’uneépidémie, de la grande variabilité des résultats.
Le comportement d’un individu ne change pas au cours de la simulation.Il pourrait être réceptif à une campagne d’information. On pourrait alorsobserver l’impact sur la propagation de l’épidémie.
Les simulations n’aboutissent pas à des résultats fiables. En imitant lecomportement des individus (micro), elles offrent un moyen simple d’avoirdes idées pour obtenir des résultats au niveau d’une population (macro).
Xavier Dupré Initiation à l’algorithmie 85 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Décrire un individu ou les lois qui régissent une population
Les deux approches visent l’observation de variables macro.
MicroOn modélise les individus qui interagissent entre eux et avec l’extérieurau travers de comportements simples. L’individu est le lien entre lesdifférentes variables macro dont on observe l’évolution.
MacroOn cherche à définir l’évolution de variables macro au travers d’une ouplusieurs relations quantitatives.
Paramètres des modèlesIls peuvent être estimés depuis des données réelles. Ils peuvent égalementêtre choisis de telle sorte que le système étudié reproduisent fidèlementles variables macro observées sur une période passée.
Xavier Dupré Initiation à l’algorithmie 86 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Quel type d’approche choisir ?
▶ Définir le prix de l’abonnement Vélib ?▶ Définir le nombre de Vélib ?▶ Définir les emplacements des stations de Vélibs ?▶ Définir la durée au delà de laquelle le vélo dévient payant ?
Xavier Dupré Initiation à l’algorithmie 87 / 88
CoordonnéesLa programmation concrètement
Quelques classiquesProblèmes concrets
Modélisation d’un phénomène
Mouvement sociologiqueParisPropagation de la grippeApproche micro, approche macroConclusion
Conclusion
Dans le cadre de cette école, l’informatique est unoutil au service de vos idées. L’objectif est d’éviterque cet outil ne devienne un frein.
La plupart des langages de programmation sontbâtis autour d’une base commune et sont spécialiséspour quelques usages spécifiques. Comprendre cettebase commune permet d’utiliser rapidement denouveaux langages.
Excès
Xavier Dupré Initiation à l’algorithmie 88 / 88