Information

Author(s) Vincent Branders, Pierre Dupont
Deadline 06/03/2024 14:00:00
Submission limit No limitation

Sign in

[TP.03] Paire de somme maximale - brute force

Considérons un tableau d’entiers non trié contenant au moins deux entrées. Il est possible de déterminer toutes les paires d’éléments du tableau. C’est ce que fait l’algorithme paire_max, décrit en pseudo-code ci-après, pour identifier la plus grande somme de deux nombres du tableau.

Déterminer toutes les paires peut être vu comme une approche par force brute du problème : la solution est trouvée en analysant tous les cas possibles jusqu’à ce que la meilleure solution soit identifiée.

https://inginious.info.ucl.ac.be/course/LINFO1103/S03_1_1_paire_max_brute/Paire_max.png

Question 1: Complexité temporelle

Quelle est la complexité temporelle de l’algorithme ? Choisissez la borne la plus simple et la plus stricte possible.

Question 2: Somme de quatre éléments

Si vous deviez adapter cet algorithme (en gardant l'approche par force brute) pour identifier la somme maximale d'un quadruplet d'éléments, quelle serait la complexité temporelle de l’algorithme ? Choisissez la borne la plus simple et la plus stricte possible.

Question 3: Un meilleure solution

Comme vous le savez sûrement, il existe souvent des approches plus efficace que l’approche par force brute. Proposez un algorithme paire_max_efficace qui résout le même problème que paire_max mais qui présente une complexité temporelle inférieure. Pour vous aider, vous pourriez commencer par imaginer la recherche de l’élément maximal et voir comment l’adapter à la recherche d’une paire de somme maximale. Attention, il vous est interdit d’utiliser un algorithme de tri.

Vous êtes chargés d'implémenter la fonction suivante en Python. Pour préparer votre code, vous pouvez télécharger le fichier paire_max_efficace.py qui contient la signature de la fonction et quelques exemples de tests.

Attention : seul le résultat renvoyé est évalué et non la complexité temporelle.

Note: Lorsqu'il vous est demandé d'implémenter une fonction, vous êtes invités à ne remplir que le corps de la fonction à implémenter.

def paire_max_efficace(a):
    """
    Calcule la somme maximale d'une paire d'entiers de `a`
    pre: `a` est un tableau (list) d'entiers
    pre: len(`a`) >= 2
    post: retourne la somme maximale obtenue à partir d'une
        paire d'entiers de `a`
    """
Question 4: Complexité de votre solution

Quelle est la complexité temporelle de l’algorithme que vous proposez (paire_max_efficace)? Choisissez la borne la plus simple et la plus stricte possible.