Exercices de complexité
Reading time2h30Consignes globales
Résumé de l’article
Dans cette partie, nous vous proposons de travailler sur l’analyse de plusieurs fonctions, allant de structures simples à des processus récursifs plus complexes. Le but sera de dérouler les algorithmes pour comprendre ce qu’ils font et d’analyser la complexité qui en découle. Cet atelier pratique sera à faire sur papier sans utiliser un ordinateur donnant les réponses.
Une fois tous les exercices réalisés, vous pourrez utiliser le code donné dans le cours pour comparer les complexités temporelles et spatiales en python. Puis à nouveau sur papier, vous pourrez essayer de trouver pour chaque fonction des versions améliorant la complexité temporelle ou spatiale.
Contenu de l’activité
Complexité de fct1
Quelles sont les complexités temporelle et spatiale dans le pire des cas de l’algorithme suivant ? Justifiez votre réponse.
Complexité de fct2_1 et fct2_2
Quelles sont les complexités temporelle et spatiale dans le pire des cas de l’algorithme fct2_1 ? Justifiez votre réponse.
Et maintenant donnez celles de l’algorithme fct2_2 ? Justifiez votre réponse.
Complexité de fct3
Quelles sont les complexités temporelle et spatiale dans le pire des cas de l’algorithme fct3 ? Justifiez votre réponse.
Complexité de fct4
Quelles sont les complexités temporelle et spatiale dans le pire des cas de l’algorithme fct4 ? Justifiez votre réponse.
Complexité de product_matrix
Quelles sont les complexités temporelle et spatiale dans le pire des cas de l’algorithme product_matrix ? Justifiez votre réponse.
Complexité de somme_diviser
Quelles sont les complexités temporelle et spatiale dans le pire des cas de l’algorithme somme_diviser ? Justifiez votre réponse.
Complexité de somme_sous_ensembles
Quelles sont les complexités temporelle et spatiale dans le pire des cas de l’algorithme somme_sous_ensembles ? Justifiez votre réponse.
Que deviennent ces complexités si au lieu d’afficher les sommes, nous voulons les stocker dans une variable globale res de type list ? (Au lieu de print(courant), nous aurions res.append(courant))
Analyse de fct5
- Déterminez ce que fait l’algorithme
fct5. Puis donnez les complexités temporelle et spatiale dans le pire des cas de l’algorithme en justifiant votre réponse.
- Re-écrivez l’algorithme
fct5de manière plus lisible (le résultat reste le même).
Complexité d’une suite récurrente
Soit la suite $U_i$ définie par :
- $U_0=1$
- $U_i=2*U_{i-1}+(U_{i-1}*U_{i-1})$ si $i>0$
Ecrire une fonction récursive $u_i$ qui si $i\geq 0$ retourne la valeur de $U_i$. Etudier la complexité temporelle et spatiale dans le pire des cas de votre implémentation. Proposez des versions différentes en améliorant au mieux votre code.
Analyse de fct6
- Déterminez ce que fait l’algorithme
fct6. Puis donnez les complexités temporelle et spatiale dans le pire des cas de l’algorithme en justifiant votre réponse.
- Que se passe-t-il dans le meilleur cas ? Améliorez l’algorithme en réduisant le nombre de pas de boucles inutiles pour
i. Quelles sont les nouvelles complexités ?
- Que remarquez vous sur la boucle interne parcourue par
jà chaque incrémentation dei? Améliorez l’algorithme en réduisant le nombre de pas de boucles inutiles pourj. Quelles sont les nouvelles complexités ?