On souhaite écrire une fonction recherche(liste:list, n:int)->int qui prend une liste d'entiers et un entier en paramètres et renvoie la position de l'entier dans la liste s'il y est, ou -1 s'il n'y est pas.
L'objectif de cette activité est d'étudier plusieurs algorithmes.
Toutes les fonctions recherche écrites pourront être testées avec la suivante :
A faire : Compléter la fonction du programme ci-dessous :
def recherche_seq(E, L):
'''
Recherche un élément dans une liste d'entiers.
Renvoie la position de la première occurrence l'élément s'il est présent dans la liste.
Renvoie -1 si l'élément n'est pas présent dans la liste.
param L : (list) une liste d'entiers
param E : (int) un entier
return : (int) position de l'entier ou -1
'''
# partie à compléter
def test_fct_recherche_seq():
L1 = [2, 8, 12, 15]
assert recherche_seq(1, L1) == -1
assert recherche_seq(2, L1) == 0
assert recherche_seq(7, L1) == -1
assert recherche_seq(8, L1) == 1
assert recherche_seq(15, L1) == 3
assert recherche_seq(20, L1) == -1
print('Les tests sont validés')
# ----- programme principal -----
test_fct_recherche_seq()
Recherche séquentielle dans une liste triée
On souhaite optimiser la fonction précédente lorsque la liste est triée.
A faire : Compléter la fonction du programme ci-dessous :
def recherche_seq_triee(E, L):
'''
Recherche un élément dans une liste d'entiers triée.
Renvoie la position de l'élément s'il est présent dans la liste.
Renvoie None si l'élément n'est pas présent dans la liste.
param L : (list) une liste d'entiers triés par ordre croissant
param E : (int) un entier
return : (int) position de l'entier ou -1
'''
# partie à compléter
Recherche dichotomique
Dans cette partie, on s'intéresse encore à la recherche dans une liste triée, et on souhaite encore optimiser le programme du III.
Préambule
🖊️ Quelle est la meilleure stratégie pour trouver la bonne réponse au Jeu du plus/moins ?
Principe
Lorsque la liste dans laquelle la recherche se fait est triée, il est possible d'appliquer la même méthode que pour le jeu du Plus/Moins : la recherche dichotomique.
Écriture d'un algorithme
🖊️ Écrire la fonction recherche_dichotomique(E,L) basée sur la recherche par dichotomie.