formations/algorithmique/cours/presentation.txt

73 lines
3.4 KiB
Plaintext
Raw Normal View History

2017-04-07 15:28:36 +02:00
Avant propos
2017-04-10 12:25:40 +02:00
============
2017-03-18 16:37:36 +01:00
2017-04-10 12:25:40 +02:00
Introduction
~~~~~~~~~~~~
2017-03-18 16:37:36 +01:00
| "**Que nul n'entre ici s'il n'est géomètre**"
| Maxime apposée au porche d'entrée de l'École de Platon
2017-03-20 10:21:52 +01:00
- L'accent est mis sur l'approche **algorithmique scientifique**, dite algorithmique
algébrique. L'algorithmique est un sous-domaine de l'algèbre et des
approches modulaires (arithmétique modulaire...)
2017-04-07 15:28:36 +02:00
- Le point de vue mathématique étant assez exigeant, **aucun formalisme fort** de
2017-03-22 09:13:07 +01:00
l'algorithmique mathématique ne sera présenté. Aucun symbole mathématique donc, et
2017-03-20 10:21:52 +01:00
seulement du pseudo-code.
2017-03-22 09:13:07 +01:00
L'approche mathématique forte utilisant le formalisme mathématique de
l'algorithmique algébrique est en général enseignée en France uniquement aux cours
2017-03-20 10:21:52 +01:00
des grandes écoles.
- L'algorithmique présentée ici est donc délibérément pseudo-scientifique mais en revanche
2017-04-07 15:28:36 +02:00
ouverte au **multi-paradigme**. En général l'évocation d'un algorithme en pseudo code est toujours
2017-03-20 10:21:52 +01:00
réducteur car limité au style de programmation le plus à la mode actuellement, c'est-à-dire le
2017-04-07 15:28:36 +02:00
**style impératif**. Nous présenterons un éventail des plus grands paradigmes de programmation
existants. Nous nous limiterons à la **programmation impérative, fonctionnelle, modulaire,
générique et objet**. Nous envisagerons les structures de données et les structures de contrôle
2017-03-20 10:21:52 +01:00
spécifiques à chacun des styles évoqués.
2017-04-07 15:28:36 +02:00
- Et parce qu'un honnête programmeur doit avoir une vue d'ensemble de **l'état de son art**,
2017-03-20 10:21:52 +01:00
nous évoquerons un panorama des différents langages existants -- historiques et contemporains --
en les comparants les uns aux autres.
- Durant tout le cours, nous souhaitons proposer une pédagogie par l'exemple, et nous
2017-04-07 15:28:36 +02:00
limiterons l'exposé à deux langages d'implémentation des algorithmes : le **Python** pour la programmation
impérative modulaire et objet, et le **OCaml**, car nous évoquerons aussi certains points
de programmation fonctionnelle et modulaire, polymorphe et teintée de généricité.
Intérêt
-------
| "**Il ne suffit pas d'avoir les mains propres, il faut avoir l'esprit pur.**"
| Thalès de Milet ; Sentences - VIe s. av. J.-C.
L'algorithmique en tant que rapport à la vérité et à la pensée juste et vraie,
en tant qu'art de découper un problème complexe en tâches élémentaires,
en tant qu'énoncés de compréhension et de sémantique,
est la seule chose vraiment profonde dans l'informatique. Le reste n'est que 0 ou 1.
Cette notion d'algorithme est profondément enracinée dans le désir humain de
transmettre des méthodes pour comprendre des problématiques,
qu'il s'agisse de processus scientifiques ou mathématiques, de secrets,
de philosophie ou de divination au sens des anciens Grecs.
De règles linguistiques, aussi, chez les Romains.
2017-04-10 12:25:40 +02:00
Objectifs de ce cours
~~~~~~~~~~~~~~~~~~~~~
Il s'agit de :
- maîtriser et concevoir un algorithme de base,
- choisir une représentation appropriée des données,
2017-04-10 12:25:40 +02:00
- décomposer en sous-problèmes et affinements successifs,
- organiser en fonction et en modules.
2017-04-10 12:25:40 +02:00
Le développement raisonné dalgorithmes et leur implantation
permet d'acquérir les qualités suivantes :
+ Analyser et modéliser un problème, spécifier,
+ Exprimer une problématique, une solution ou un algorithme,
2017-04-10 12:25:40 +02:00
+ Traduire un algorithme dans un langage de programmation,
+ Concevoir une réponse à un problème précisément posé.