Files
1ereNSI/algorithmes/PROPRIETES.md

56 lines
3.6 KiB
Markdown
Raw Normal View History

2022-03-17 22:54:29 +01:00
## Propriétés et caractéristiques d'un algorithme
Il est essentiel, pour un bon algorithme, de posséder certaines propriétés :
- La **terminaison** : Votre algo doit donner un résultat en un **nombre fini d'étapes** et donc ne surtout pas rester coincé dans une boucle.
- La **validation** : Votre algorithme doit amener au résultat attendu, peu importe la situation.
En plus de ces deux propriétés, on peut également citer ***le coût*** ou ***complexité*** :
- en **temps** : le nombre d'opérations nécessaires à son exécution
- en **espace** : la quantité d'espace mémoire nécessaire à son exécution
Ici, nous ne nous intéresserons uniquement qu'au **coût en temps, la complexité temporelle.**
### Complexité d'un algorithme
On ne va pas vous demander de chronométrer l'exécution, mais plutôt de trouver **l'ordre de grandeur**.
Il s'agit de différencier les algorithmes selon un type de complexité : on va les grouper par *familles*.
Soit *n* la taille des données d'entrée, on notera la complexité d'un algorithme en fonction de *n* :
$$
O(f(n))
$$
> On note O pour ***Ordre de grandeur***
| Complexité | Notation | Temps pour n = 10 | Temps pour n = 1000 | Temps pour n = 10<sup>6</sup> |
| ------------- | ---------------- | ----------------- | ------------------- | ----------------------------- |
| Constante | O(1) | 10 ns | 10 ns | 10 ns |
| Logarithmique | O(log(n)) | 10 ns | 30 ns | 60 ns |
| Linéaire | O(n) | 100 ns | 10 μs | 10 ms |
2022-03-30 16:27:52 +02:00
| Quadratique | O(n<sup>2</sup>) | 1 μs | 10 ms | 2,8 heures |
2022-03-17 22:54:29 +01:00
2022-03-28 14:32:01 +02:00
*Pour comprendre la notion de complexité, utilisons l'exemple de tri de tableau : il s'agit d'un des cas les plus récurrents d'utilisation d'un algorithme. On a un tableau, contenant des élèments que l'on devra trier dans un ordre précis.*
2022-03-17 22:54:29 +01:00
2022-03-28 14:32:01 +02:00
*Si un algorithme met un temps donné pour trier un tableau de taille n, combien de temps lui faudra t-il pour trier un tableau 10 ou 100 fois plus grand ?*
2022-03-17 22:54:29 +01:00
- La **complexité d'un algorithme** est une mesure du temps requis par l'algorithme pour accomplir sa tâche, en fonction de la taille des données à traiter.
- On dira d'un problème qu'il est aussi complexe que le meilleur algorithme connu pour le résoudre.
- Si la **complexité** est **constante**, alors le temps d'execution sera sensiblement toujours le même, peu importe la taille du tableau traité.
- Si elle est **logarithmique**, alors le temps d'execution augmente très faiblement quand le paramètre croit.
- **Complexité** **linéaire** : le nombre d'étapes à effectuer va varier en proportion directe de la taille de l'échantillon à traiter : si l'échantillon croît par un facteur de 10000, la complexité sera accrue elle aussi par un facteur de 10000.
2022-03-20 19:19:41 +01:00
- **Complexité Quadratique** : Dans le cadre du tri par insertion, par exemple, quand on double la taille du tableau, le nombre de comparaisons sera lui multiplié par...4.
2022-03-17 22:54:29 +01:00
2022-05-06 10:32:24 +02:00
------
Auteur : Florian Mathieu
Licence CC BY NC
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licence Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a> <br />Ce cours est mis à disposition selon les termes de la <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas dUtilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.