Information

Author(s) Vincent Branders, Pierre Dupont
Deadline 08/04/2026 14:00:00
Submission limit No limitation

Sign in

[TP08] N'en faisons pas une montagne

Attention

Ce dernier exercice peut sembler un peu plus difficile. Il est néanmoins recommandé à chaque étudiant de le faire jusqu'au bout car les équations de récurrence sont un des thèmes revenant très régulièrement à l'examen...

De plus, les concepteurs de cette exercice ont veillé à vous fournir un feedback détaillé pour expliquer chaque réponse. Des informations importantes vous seront donc souvent données, même en cas de mauvaise réponse (lorsque ce n'est pas le cas, c'est parce que le choix d'une telle réponse est jugé mauvais de façon "évidente"...). En cas de bonne réponse, un feedback est aussi généralement prévu afin de justifier en détails pourquoi la réponse est bonne. C'est ce genre de justification qui constitue une preuve de compréhension de la matière.

L'algorithme suivant permet de créer une chaîne de caractères représentant une montagne (ou un sapin, selon votre point de vue...) en ASCII.

def mountain(n):
    """
    pre: n >= 0
    post: renvoie un str représentant une montagne de hauteur `n`
    """
    def mountain_aux(n, m):
        """
        pre: n >= 0, m >= 0
        """
        line = (n * " ") + "/" + ("+" * m) + "\\" + (n * " ")
        if n == 0:
            return line
        return line + "\n" + mountain_aux(n - 1, m + 2)
    return mountain_aux(n, 0)

Le résultat de l'appel mountain(4) est :

    /\
   /++\
  /++++\
 /++++++\
/++++++++\

On vous demande de calculer les complexités temporelle et spatiale de l'implémentation proposée ci-dessus. À cette fin, commencez par écrire les équations de récurrence de l'algorithme. Pensez en termes de cas de base et de cas récursif. Utilisez ensuite la méthode de substitution vue au cours pour en déduire la complexité.

Note :

La complexité temporelle du produit d'un nombre entier \(i\) par une chaîne de caractères \(s\) est en \(\Theta(i \times \text{len}(s))\) car cette opération consiste à recopier la chaîne \(i\) fois.
La complexité spatiale pour mémoriser le résultat est donc également en \(\Theta(i \times \text{len}(s))\).

Question 1: Fonction récursive

La fonction mountain est-elle récursive ?

Question 2: Définition du cas de base de la récurrence

Sélectionnez, parmi les réponses proposées, celle qui définit le cas de base de la récurrence de la fonction mountain_aux.

Note : il est vivement conseillé d'essayer d'identifier l'équation de récurrence du cas de base avant de regarder les propositions ci-dessous. En effet, il sera plus facile d'identifier la bonne réponse parmi les nombreuses propositions. Dans le cas de cette fonction auxiliaire, il y a 2 arguments n et m qui peuvent jouer un rôle dans l'analyse de la complexité. Les équations de récurrence s'expriment donc en fonction de ces 2 arguments.

Question 3: Définition de l'équation de récurrence dans le cas général

Sélectionnez, parmi les réponses proposées, celle qui définit le cas général de la récurrence de la fonction mountain_aux.

Question 4: Profondeur maximale

Quelle est la profondeur de récursion maximale, désignée généralement par \(i_{max}\), atteinte lors de l'exécution de la fonction mountain_aux?

Note: cette profondeur maximale peut dépendre de l'un ou l'autre des paramètres \(n\) et \(m\), éventuellement d'une combinaison des deux. C'est à vous de déterminer ce qui est pertinent ici, en fonction des conditions qui caractérisent le fait que la profondeur maximale est atteinte.

Question 5: Complexité temporelle de la fonction

Quelle est la complexité temporelle de la fonction mountain_aux obtenue en résolvant les équations de récurrence de cette fonction ? Sélectionnez, parmi les réponses proposées, la complexité temporelle représentée par la notation \(\Omega(.), \Theta(.), O(.)\) la plus appropriée pour décrire cette complexité.

Question 6: Complexité temporelle de la fonction mountain

Quelle est la complexité temporelle de la fonction mountain ? Sélectionnez, parmi les réponses proposées, la complexité temporelle représentée par la notation \(\Omega(.), \Theta(.), O(.)\) la plus appropriée pour décrire cette complexité.

Question 7: Complexité spatiale de la fonction mountain

Quelle est la complexité spatiale de la fonction mountain ? Sélectionnez, parmi les réponses proposées, la complexité spatiale représentée par la notation la plus appropriée pour décrire cette complexité.