Adloun

L'ensemble, dictionnaire sans valeurs

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 17 — Les dictionnaires dévoilés : le hachage

Énoncé

(a) Implémenter un ensemble de clés hachables en proposant les fonctions ens_creer(m), ens_ajouter(ensemble, cle) et ens_contient(ensemble, cle). Écrire à l'aide de cet ensemble la recherche du premier doublon d'une liste premiere_repetition(t). (b) Comparer et chronométrer l'exécution de cette fonction avec une implémentation basée sur une liste de déjà-vus pour éléments. (c) Discuter du lien structurel entre dictionnaire et ensemble.

Corrigé

(a)

def ens_creer(m: int) -> list:
    return [[] for _ in range(m)]

def ens_ajouter(ensemble: list, cle) -> None:
    alv = ensemble[hash(cle) % len(ensemble)]
    if cle not in alv:
        alv.append(cle)

def ens_contient(ensemble: list, cle) -> bool:
    alv = ensemble[hash(cle) % len(ensemble)]
    return cle in alv

def premiere_repetition(t: list):
    # On crée un ensemble avec une taille suffisante pour éviter trop de collisions
    vus = ens_creer(2 * len(t))
    for x in t:
        if ens_contient(vus, x):
            return x
        ens_ajouter(vus, x)
    return None

(b) Pour une liste de taille sans doublons (pire cas) :

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.