NSI, un nouvel algorithme

On désire mettre en place d’un algorithme permettant de déterminer si une valeur est présente ou non dans une liste de nombres aléatoires rangée par ordre croissant.

1. Générer une liste aléatoire de n nombres entiers différents d’une valeur k

Ecrire une fonction répondant à sa docstring :

def liste_alea(n,k):
    '''
    génère une liste aléatoire de n entiers compris entre
    0 et n différents de k
    '''

2. Tester un premier algorithme

Compléter la fonction suivante

def presence(liste,val):
    '''
    déterminer si une valeur est présente dans une liste
    >>>presence([1,2,3],5)
    False
    >>>presence([1,2,3],2)
    True
    '''
    for i in .......:
        if .....==.....:
            return .......
    return ........
    

3. Mesurer le temps d’exécution et déterminer si il est linéaire ou quadratique

Ajouter les lignes suivantes dans votre programme

import time
l=liste_alea(100000,8)
l=sorted(l)
t0 = time.time()
presence(l,8)
t1 = time.time()
temps=t1-t0
print(temps)

Déterminer si le temps d’exécution de la fonction presence() est linéaire ou quadratique

4. Un algorithme plus performant : la dichotomie

def recherche_dichotomique(v, T):
    """
    T : tableau d’entiers trié dans l’ordre croissant
    v : nombre entier
    La fonction renvoie True si T contient v et False sinon
    """
    debut = 0
    fin = len(T) - 1
    while debut <= fin:
        m = ...
        if v == T[m]:
            return ...
        elif v > T[m]:
            debut = m + 1
        else:
            fin = ...
    return ...

Tester le temps d’exécution de ce nouvel algorithme