madamasterclass.com

📔 Diviser pour Régner

Exploration de la méthode Diviser pour régner

La méthode Diviser pour Régner est une approche algorithmique qui consiste à diviser un problème complexe en sous-problèmes plus simples, les résoudre de manière récursive, puis combiner les solutions pour obtenir la solution finale. Elle repose sur la récursion et permet de résoudre efficacement des problèmes en les décomposant en parties plus gérables. Cette méthode est largement utilisée dans de nombreux domaines de l'informatique pour concevoir des algorithmes efficaces et optimisés.


1. Introduction à la méthode Diviser pour Régner :
  • La méthode Diviser pour Régner est une technique de conception algorithmique qui consiste à diviser un problème en sous-problèmes plus petits, les résoudre de manière récursive, puis combiner les solutions pour obtenir la solution finale.
  • Cette approche est basée sur la récursion et est souvent utilisée pour résoudre des problèmes complexes en les décomposant en problèmes plus simples.

2. Étapes de la méthode Diviser pour Régner:
  • Diviser : Divisez le problème initial en sous-problèmes plus petits de taille réduite.
  • Régner : Résolvez récursivement chaque sous-problème de manière indépendante.
  • Combiner : Combinez les solutions des sous-problèmes pour obtenir la solution finale au problème initial.
3. Exemple classique : Tri fusion (Merge Sort) :
  • Le tri fusion est un exemple courant d'algorithme basé sur la méthode Diviser pour Régner.
  • Voici les étapes de l'algorithme de tri fusion :
    •         1️⃣ Diviser : Divisez la liste non triée en deux moitiés égales.
    •         2️⃣ Régner : Récursivement, triez chaque moitié de la liste.
    •         3️⃣ Combiner : Fusionnez les deux moitiés triées pour obtenir la liste triée finale.

4. Exemple de code Python pour le tri fusion :
def fusionner(liste, gauche, milieu, droite):
n1 = milieu - gauche + 1
n2 = droite - milieu

# Créer des listes temporaires pour stocker les sous-listes gauche et droite
gauche_temp = [0] * n1
droite_temp = [0] * n2

# Copier les données dans les listes temporaires
for i in range(n1):
gauche_temp[i] = liste[gauche + i]
for j in range(n2):
droite_temp[j] = liste[milieu + 1 + j]

# Fusionner les sous-listes gauche et droite
i = 0 # indice initial de la première sous-liste
j = 0 # indice initial de la deuxième sous-liste
k = gauche # indice initial de la liste fusionnée

while i < n1 and j < n2:
if gauche_temp[i] <= droite_temp[j]:
liste[k] = gauche_temp[i]
i += 1
else:
liste[k] = droite_temp[j]
j += 1
k += 1

# Copier les éléments restants de la sous-liste gauche
while i < n1:
liste[k] = gauche_temp[i]
i += 1
k += 1

# Copier les éléments restants de la sous-liste droite
while j < n2:
liste[k] = droite_temp[j]
j += 1
k += 1

def tri_fusion(liste):
if len(liste) > 1:
milieu = len(liste) // 2
gauche = liste[:milieu]
droite = liste[milieu:]

tri_fusion(gauche) # Tri de la sous-liste gauche
tri_fusion(droite) # Tri de la sous-liste droite

fusionner(liste, 0, milieu - 1, len(liste) - 1) # Fusion des deux sous-listes triées

# Exemple d'utilisation du tri fusion
liste = [64, 34, 25, 12, 22, 11, 90]
tri_fusion(liste)
print(liste) # Affiche [11, 12, 22, 25, 34, 64, 90]

3. Conclusion

La méthode Diviser pour Régner est une approche puissante pour résoudre des problèmes complexes en les décomposant en sous-problèmes plus simples, les résolvant de manière récursive, puis en combinant les solutions pour obtenir la solution finale. Cette méthode repose sur la récursion et permet de résoudre efficacement de nombreux problèmes algorithmiques.

Exercice 1: ★ ★ ★ ★ ☆

Écrire une fonction récursive pour calculer la somme des éléments d'une liste en utilisant la méthode Diviser pour Régner.
1. Écrire une fonction somme_liste(liste) qui retourne la somme des éléments de la liste.
2. Tester votre fonction avec la liste [1, 2, 3, 4, 5].

1. Fonction somme_liste :

def somme_liste(liste):
    if len(liste) == 0:
       return 0
    milieu = len(liste) // 2
    return somme_liste(liste[:milieu]) + somme_liste(liste[milieu:])


2. Tester la fonction :

print(somme_liste([1, 2, 3, 4, 5])) # Retourne 15


Exercice 2: ★ ★ ★ ★ ★

Créer un algorithme de recherche binaire en utilisant la méthode Diviser pour Régner.
1. Écrire une fonction recherche_binaire(liste, valeur) qui retourne l'index de valeur dans liste triée, ou -1 si la valeur n'est pas présente.
2. Tester votre fonction avec une liste triée et une valeur à rechercher.

1. Fonction recherche_binaire :

def recherche_binaire(liste, valeur):
    if len(liste) == 0:
       return -1
    milieu = len(liste) // 2
    if liste[milieu] == valeur:
       return milieu
    elif liste[milieu] < valeur:
       return recherche_binaire(liste[milieu + 1:], valeur)
    else:
       return recherche_binaire(liste[:milieu], valeur)


2. Tester la fonction :

print(recherche_binaire([1, 2, 3, 4, 5], 3)) # Retourne 2


Exercice 3: ★ ★ ★ ★ ☆

Écrire une fonction pour trouver le maximum d'une liste en utilisant la méthode Diviser pour Régner.
1. Écrire une fonction maximum_liste(liste) qui retourne le plus grand élément de la liste.
2. Tester votre fonction avec la liste [7, 2, 9, 4, 5].

1. Fonction maximum_liste :

def maximum_liste(liste):
    if len(liste) == 1:
       return liste[0]
    milieu = len(liste) // 2
    max_gauche = maximum_liste(liste[:milieu])
    max_droite = maximum_liste(liste[milieu:])
    return max(max_gauche, max_droite)


2. Tester la fonction :

print(maximum_liste([7, 2, 9, 4, 5])) # Retourne 9


Exercice 4: ★ ★ ★ ★ ★

Créer un algorithme pour calculer le produit des éléments d'une liste en utilisant la méthode Diviser pour Régner.
1. Écrire une fonction produit_liste(liste) qui retourne le produit des éléments de la liste.
2. Tester votre fonction avec la liste [2, 3, 4].

1. Fonction produit_liste :

def produit_liste(liste):
    if len(liste) == 0:
       return 1
    milieu = len(liste) // 2
    return produit_liste(liste[:milieu]) * produit_liste(liste[milieu:])


2. Tester la fonction :

print(produit_liste([2, 3, 4])) # Retourne 24


Exercice 5: ★ ★ ★ ★ ☆

Écrire une fonction pour trier une liste en utilisant la méthode Diviser pour Régner (Tri fusion).
1. Écrire une fonction tri_fusion(liste) qui trie les éléments de la liste en utilisant l'algorithme de tri fusion.
2. Tester votre fonction avec la liste [38, 27, 43, 3, 9, 82, 10].

1. Fonction tri_fusion :

def fusionner(liste, gauche, milieu, droite):
n1 = milieu - gauche + 1
n2 = droite - milieu
gauche_temp = [0] * n1
droite_temp = [0] * n2
for i in range(n1):
gauche_temp[i] = liste[gauche + i]
for j in range(n2):
droite_temp[j] = liste[milieu + 1 + j]
i = j = 0
k = gauche
while i < n1 and j < n2:
if gauche_temp[i] <= droite_temp[j]:
liste[k] = gauche_temp[i]
i += 1
else:
liste[k] = droite_temp[j]
j += 1
k += 1
while i < n1:
liste[k] = gauche_temp[i]
i += 1
k += 1
while j < n2:
liste[k] = droite_temp[j]
j += 1
k += 1

def tri_fusion(liste):
if len(liste) > 1:
milieu = len(liste) // 2
tri_fusion(liste[:milieu])
tri_fusion(liste[milieu:])
fusionner(liste, 0, milieu - 1, len(liste) - 1)


2. Tester la fonction :

liste = [38, 27, 43, 3, 9, 82, 10]
tri_fusion(liste)
print(liste) # Affiche [3, 9, 10, 27, 38, 43, 82]


Forum(s) associé(s)

Mathématiques Magiques : Dévoilez les Mystères des Nombres

08 Apr, 2016

Les mathématiques ont souvent la réputation d'être une discipline austère et difficile, mais ...

Read more.

Voyage à Travers les Suites Numériques : Découvertes et Applications

27 Jan, 2014

Plongez dans l'univers fascinant des suites numériques, où chaque terme révèle des patterns surprenants et des applications pratiques dans les mathématiques et au-delà.

Read more.

Fonctions en Action : Comprendre et Explorer les Relations Mathématiques

30 Feb, 2015

Découvrez comment les fonctions tissent des liens entre les nombres et les concepts, transformant des idées abstraites en outils puissants pour résoudre des problèmes du quotidien.

Read more.
Page: