En anglais, on dit divide and conquer.
On appelle diviser pour régner une méthode algorithmique de résolution d'un problème consistant à :
On dispose d'une fonction efficace pour traduire une phrase et on veut traduire tout un texte : on décompose (phase "Diviser") alors le texte en phrases (terminées par certains signes de ponctuation) que l'on traduit avec la fonction connue (phase "Régner"), puis on juxtapose les phrases traduites (phase "Combiner").
La recherche dichotomique dans un tableau trié est un autre exemple d'application de la méthode diviser pour régner. En effet, l'idée de la recherche dichotomique est de comparer la valeur v
cherchée à l'élément central et, selon le cas, on a trouvé v
ou on poursuit la recherche dans la moitié de gauche ou de droite. On réduit ainsi le problème initial (recherche dans le tableau tout entier) à un problème plus simple (recherche dans une portion du tableau dont la taille est divisée par deux), jusqu'à trouver un cas simple (en trouvant la valeur v
ou en arrivant à la dernière valeur du tableau sans la trouver).
En classe de Première, l'algorithme de recherche dichotomique a été écrit avec une boucle while
mais il s'écrit également de manière récursive assez naturellement.
# Recherche récursive de v dans le tableau T[g..d]
def recherche(T, v, g, d):
"""Renvoie une position de v dans T[g..d],
ou None si v ne s'y trouve pas"""
if g > d:
return None
m = (g + d) // 2
if T[m] > v:
return recherche(T, v, g, m - 1)
elif T[m] < v :
return recherche(T, v, m + 1, d)
else:
return m
# Recherche dichotomique en commençant la recherche sur le tableau entier
def recherche_dichotomique(T, v):
"""Renvoie une position de v dans le tableau T,
ou None si v ne s'y trouve pas"""
return recherche(T, v, 0, len(T) - 1)
On peut vérifier que tout fonctionne :
>>> tab = [1, 1, 2, 2, 3, 4, 4, 6, 7, 8, 8, 9, 10]
>>> recherche_dichotomique(tab, 3)
4
>>> recherche_dichotomique(tab, 5) # renvoie None
Les algorithmes mettant en jeu la méthode diviser pour régner sont assez nombreux, certains seront abordés dans les activités. Citons par exemple :
Les trois étapes illustrées avec l'algorithme du tri fusion
Crédits : Fschwarzentruber, CC BY-SA 4.0, via Wikimedia Commons
Références :
Germain BECKER, Lycée Mounier, ANGERS
Voir en ligne : info-mounier.fr/terminale_nsi/algorithmique/diviser-pour-regner