L'énoncé
Cocher la ou les bonnes réponses.
Tu as obtenu le score de
Question 1
Comment fonctionne un algorithme par dichotomie ?
En balayant chaque élément de la liste et en le comparant à l'élément recherché
En divisant successivement la liste en deux, et en ne gardant qu'une des deux moitiés.
Question 2
En utilisant la fonction de la vidéo précédente, que renvoie dicho(a,T) avec :
a = 6
T = [1,3,3,6,7,12]
True
False
3
4
Question 3
Cet algorithme l'algorithme suivant ne fonctionne pas. Quelles lignes pose problème ? (essayez de ne pas regarder l'algorithme de la vidéo)
def dichoto(a,T):
g = 0
d = len(T)
while g < d :
k = (g+d)/2
if a < T[k] :
d = k
else :
g = k
if a == T[g] :
return g
else :
return False
k = (g+d)/2
while g < d :
d = len(T)
-
k = (g+d)/2
Ici, le problème est qu'une division non entière est réalisée. k=(g+d)/2 peut donner un nombre à virgule, de type flottant, et ça n'aurait donc pas de sens d'écrire T[k]. Il faut donc mettre une double barre // pour ne conserver que la partie entière du résultat de la division (autrement dit, le quotient de la division euclidienne)
-
while g < d :
Ici, il faut remplacer le d par d-1 : en effet, il avec cette fausse ligne, on ne sort de la boucle qu'une fois que g=d, ce qui est donc une liste à un seul élément. Il n'y a pas besoin d'aller jusque là, on peut s'arrêter à une liste à 2 éléments comme indiqué dans la vidéo (cf l'exemple qui finit par
Question 4
L = [1,2,3,4,5]
Que renvoie la ligne de code suivante ?
L[2]
1
2
3
4
5
Question 5
Quelle est la dernière valeur prise par c ici ?
n = 42
c = 0
while c < n:
c = c + 1
41
42
Question 6
Que renvoie l'algorithme de dichotomie pour ces entrées ?
T = [13, 1, 42, 7, 0]
a = 1
1
2
True
False
Il y a un problème avec les entrées
La liste T n'est pas triée ! L'algorithme de dichotomie ne fonctionne qu'avec des listes triées dans l'ordre croissant. Cela peut se faire manuellement, ou à l'aide de la fonction sort de Python.
Question 7
Quel est le variant de boucle dans cet algorithme ?
def dichoto(a,T):
g = 0
d = len(T)
while g < d-1 :
k = (g+d)//2
if a < T[k] :
d = k
else :
g = k
if a == T[g] :
return g
else :
return False
a
T
d
g
k
d-g
Question 8
On suppose que T est bien triée, et on reste sur le même algorithme :
def dichoto(a,T):
g = 0
d = len(T)
while g < d-1 :
k = (g+d)//2
if a < T[k] :
d = k
else :
g = k
if a == T[g] :
return g
else :
return False
Au fur et à mesure d'itérations, d-g :
diverge
converge vers 1
ça dépend de a et T
Question 9
Dans quelle autre situation utilise-t-on la dichotomie ?
Lors de la recherche du zéro d'une fonction
En géométrie
Pour les formules de trigonométrie
Question 10
Quelle est la méthode la plus efficace (rapide) selon vous ?
Recherche d'une occurrence d'un élément dans une liste par balayage (c'est à dire examiner les éléments de la liste un à un et les comparer à l'élément recherché)
Recherche d'une occurrence d'un élément dans une liste par dichotomie (expliquée dans cette vidéo)