“pourquoi je ne vais ni réparer ton imprimante ni hacker ton Insta”
romuald.thion@unc.nc
https://romulusfr.github.io/expose-science-informatique/
29 juillet 2022, “les lycéens à la fac”, UNC
Clause de non-responsabilité : ni philosophe, ni sociologue, ni développeur : enseignant-chercheur en informatique.
Réparer l’imprimante, le téléphone ou le wifi n’est pas le métier d’un développeur (*) ni celui d’un enseignant-chercheur.
Quels sont ces métiers ? Qu’est ce qui les différencie ?
(*) ni celui d’un architecte logiciel, d’un intégrateur, d’un testeur, d’un administrateur réseaux.
Un parallèle entre utiliser, réaliser et penser un couteau en acier et un programme informatique.
| Couteau | Programme | |
|---|---|---|
| Utilisation | cuisinier | utilisateur |
| Technique | artisan forgeron | développeur |
| ingénieur méttalurgiste | ingénieur informaticien | |
| Science | physico-chimiste, cristallographe | scientifique en informatique |
Informatics is the scientific discipline that underpins the digital world.
Informatics Reference Framework for School.
NDA : informatics synonyme de computer science.
L’informatique parle d’objets de différente nature : informations, langages, machines et algorithmes.
Chacun de ces quatre concepts est antérieur à l’informatique, mais ce qui ce que l’informatique apporte sans doute de nouveaux est leur organisation en une science cohérente.
La place de l’informatique dans la classification des sciences, Gilles DOWEK, 2014
min-maxProblème trouver le plus grand élément et le plus petit élément d’une collection linéaire non-vide d’entiers naturels (par exemple : liste, tableau).
def min_max_etudiant(arr):
min_courant = arr[0]
max_courant = arr[0]
for v in arr:
if v < min_courant:
min_courant = v
if v > max_courant:
max_courant = v
return min_courant, max_courant
min_max_etudiant([1, 42, 3, 2, 0, 5]) #renvoie (0, 42)C’est une solution classique et correcte : une suite d’opérations élémentaires, au plus proche de l’algorithmique.
def min_max_sorter(arr):
arr_trie = sorted(arr)
# arr_trie[0] le premier élément après le tri
# arr_trie[-1] le dernier élément après le tri
return arr_trie[0], arr_trie[-1]C’est une solution correcte, où le développeur utilise une fonction de tri qu’il sait disponible dans à peu près tous les langages.
C’est une solution correcte aussi, où le développeur connait bien le langage Python et propose une solution “Pythonique”.
On va ici évaluer l’efficacité en temps
Comment avoir une évaluation robuste des trois solutions ?
Comment faire des prédictions quant-à leurs comportements selon la taille des données ?

Peut-on déterminer quelle est la meilleure solution ?

Peut-on déterminer quelle est la meilleure solution ?
def min_max_etudiant(arr):
# soit n la longueur de la séquence, n = len(arr)
the_min = arr[0]
the_max = arr[0]
for v in arr: # on passe (n) fois dans cette boucle
# une comparaison ici
if v < the_min:
the_min = v
# une autre comparaison là
if v > the_max:
the_max = v
return the_min, the_maxPour une entrée de longueur \(n\), on effectue \(2 \times n\) comparaisons
Ce qui compte, c’est l’ordre de grandeur, ici, proportionnel à \(n\), qu’on note \(O(n)\), dit grand \(O\) de n.
| notation | compléxité | exemple |
|---|---|---|
| \(O(1)\) | constante | accès à un élément |
| \(O(log(n))\) | logarithmique | recherche dichotomique |
| \(O(n)\) | linéaire | recherche 👈 |
| \(O(n.\log(n))\) | “bon” tri 👈 | |
| \(O(n^2)\) | quadratique | “mauvais” tri |
| \(O(n^c)\) | polynomiale | produit de matrice naïf (\(c=3\)) |
| \(O(c^n)\) | exponentielle | voyageur de commerce |
min-maxmin_max_etudiant est en \(O(n)\)min_max_pythonista est en \(O(n)\)
min et max le sontmin_max_sorted est en \(O(n.\log(n))\)
sortedScience et technique et art
Sciences et techniques (et art !) se déclinent :
Notation de Landau, dite grand \(O\) :
Soient \(f,g : \mathbb{N} \to \mathbb{R}^+\) deux applications, on dit que f est dominée par g (en \(+\infty\)) que l’on note \(f(n) = O (g(x))\) lorsqu’il existe un rang \(N \in \mathbb{N}\) et une constante \(C \in \mathbb{R}^+\) tels que \(\forall n > N, f(n) \leq C g(x)\).