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 .