Adloun

informatique (tronc commun des prépas scientifiques) · Chapitre 2 · Exercice de TD

Deux sommes pour une cible

Recherche séquentielle et dictionnaires · niveau 2

Énoncé

Écrire une fonction deux_sommes(t, cible) déterminant s'il existe deux indices distincts tels que t[i] + t[j] == cible, avec une complexité temporelle de .

Corrigé

Pour chaque élément du tableau, son complémentaire recherché est . On conserve l'historique des valeurs déjà rencontrées dans un dictionnaire :

def deux_sommes(t: list, cible: float) -> bool:
    vus = {}
    for x in t:
        # Invariant : vus contient exactement les valeurs de t[0..i-1] rencontrées
        partenaire = cible - x
        if partenaire in vus:
            return True
        vus[x] = True
    return False

Chaque itération effectue une recherche et une insertion en dans le dictionnaire vus. La complexité totale est donc linéaire .

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre