# Rime/oral💻🌐📶
**Quel est l’impact de la complexité sur l’efficacité de l’algorithme :**
**Intro :** Quand on fait une recherche sur internet, le moteur de recherche nous donne de maniére quasi imédiate, une liste de site web triée par leur pertinence. Pour cela on a utilisé un algorithme de tri rapide. Mais pour déterminer lequel est le plus performant pour donner un résultat à l'utilisateur, on a du comparer leur complexité, une méthode qui permet de déterminer si la rapidité d'un programme ou l'espace qu'il prend dans la mémoire.
On peut alors se demander, quel impact à la complexité sur l’algorithme et comment le déterminer.
**I Complexité temporelle :** Il y a d’abord la complexité temporelle qui prend en compte le temps que mets l’algorithme pour exécuter son programme. On va pour cela compté les différentes «actions» comme les opérations, les affectations, les comparaisons, les initialisations… . Chacune de ces actions individuelles sont comptées d’une unité, mais les boucles (for/ while) dépendent elles de n unités, car on à n itérations (la boucle tourne n fois).
On peut ainsi déterminer si le programme est rapide ou non pour l'optimiser ou les comparer, si on souhaite par exemple faire un gâteau en peu de temps, on choisira la recette la plus rapide.
**II Complexité spatiale :** Puis il y a la complexité spatiale qui elle détermine l’espace que prend l’algorithme dans la mémoire au cours de son exécution. On va donc prendre en compte les variables qui sont stockées et leur nature (entiers, float, booléens, liste…).
Déterminer le "poid" d'un programme permet alors de juger son efficacité. En effet, les programmes plus "légers" son beaucoup plus efficace et préferé. Certaines application cherche d'économiser le plus de mémoire afin d'étre plus performant et plus économique. En reprenant l'exemple du gâteau, si on a un petit budget, on va préferer une recette avec peu d'ingredient.
**III Notation :** Pour déterminer la complexité on utilise la comparaison asymptomatique, traduite par la notation grand O ou notation asymptotique (O(f(n)))=> grand O de f(n). Ainsi, au lieu de se référer à une valeur exacte d’une fonction T (n) on va le déterminer de manière globale.
Grâce à cette notation, on peut déterminer plus facilement la complexité de l’algorithme pour l’améliorer.
En effet, selon le type de complexité, le temps pour que l’algorithme s’exécute varie, allant des nanosecondes aux milliers d’années.
la complexité O(n) allant jusqu'à l'ordre des secondes est alors plus rapide et efficace que O(n^2) pouvant aller jusqu'à plusieurs heures en fonction de ce qu'on a entrée dans le programme.
On peut alors juger parmis les différent algoiyhme de tri qui est le plus efficace, par exemple le tri par tas qui est de complexité O(nlogn) est plus efficace que le tri par selection complexité O(n^2) en effet le premier peut atteindre l'ordre des secondes tandis que l'autre les heures. Ou bien toujours dans l'exemple du gateau, selon le nombre de part que l'on veut faire, le gateau demanderas plus de temps de preparation et d'ingrediens selon la recette.


**Conclusion :** Ainsi, si le programme prend plus de temps ou trop d’espace, on aura pour but de l’améliorer et de l’optimiser et on prefereras les programmes plus rapides et légers qui repondent le mieux à nos attentes. La complexité est donc un outil qui permet de déterminer si le programme est efficace et utile ou encore s’il faut l’améliorer pour le rendre encore plus performant. Cela permet ainsi une économie des ressources et garantie un résultat rapide et efficace, s'avérant utile dans bien des domaines aussi bien qu'en informatique que dans notre quotidiens.
📎