Algorithme de tri de fusion à l'aide de python

Algorithme de tri de fusion à l'aide de python
Dans cet article, nous allons en apprendre davantage sur un algorithme de tri de fusion. Merge Sort est une méthode de tri et de conquis populaire. Le tri de fusion est largement utilisé en raison de sa vitesse dans les données de tri. C'est l'une des meilleures illustrations de la façon de diviser et de conquérir les algorithmes qui peuvent être utilisés dans la pratique. Merge Syt sépare une liste de données en deux moitiés, puis appelle ces sous-parties pour la diviser davantage en deux moitiés. Il répète l'opération jusqu'à ce que chaque composant de liste n'ait qu'un seul élément. En triant ces sous-parties d'un élément en deux composants, il les fusionnera plus tard ensemble. Après le tri, la sous-partie à deux éléments sera liée aux deux autres composants. Cette procédure est répétée jusqu'à ce que la liste triée finale des éléments soit obtenue en invoquant la fonction à plusieurs reprises.

L'illustration de base du tri de fusion est donnée dans l'exemple suivant:

Code python: Le code Python suivant est pour l'algorithme de tri de fusion:

Def Merge_sort (non-point de main):
Si Len (liste non triée)> 1:
mid = len (lish non sorted) // 2
LeftList = UnsortedList [: mid]
lightlist = nonttedList [mid:]
# Appel récursif lorsque nous allons deux liste (gauche et droite) pour le tri
Merge_sort (LeftList)
Merge_sort (liste de droite)
# Parce que nous avons deux listes, nous avons donc besoin d'itérateurs pour l'itération de chaque liste
m = 0
n = 0
# Nous avons besoin d'un itérateur commun qui itère à la liste principale
z = 0
tandis que m < len(leftList) and n < len(rightList):
Si la liste gauche [M] <= rightList[n]:
# Ici, nous utilisons les premiers éléments du côté gauche
non titulaire de liste [z] = liste gauche [m]
# Incrément l'itérateur principal
m + = 1
autre:
non titulaire de liste [z] = light [n]
n + = 1
z + = 1
# Si des valeurs sont laissées dans la liste, alors nous traitons ici
tandis que m < len(leftList):
non titulaire de liste [z] = liste gauche [m]
m + = 1
z + = 1
tandis que n < len(rightList):
non titulaire de liste [z] = light [n]
n + = 1
z + = 1
UsortedList = [23,56,0,23,85,100,200,12,32,78,90,102]
Merge_sort (non-liste)
Imprimer (listes non triées)

Sortir:

[0, 12, 23, 23, 32, 56, 78, 85, 90, 100, 102, 200]

C'est le moyen récursif de fusionner l'implémentation de tri. Voici les étapes suivantes pour obtenir le tableau trié en utilisant cette méthode:

  • Ligne 1: Nous définissons une fonction (Merge_sort) lorsque nous devons trier une liste d'éléments non triés. Maintenant, nous allons expliquer toutes les lignes de cette fonction Merge_sort.
  • Ligne 2-5: La première chose que nous vérifions est de savoir si les éléments de liste non triés ont plus d'un élément ou non. S'il n'y a qu'un seul élément, il n'est pas nécessaire de trier. Donc, nous vérifions cette première condition.

    Si les éléments sont supérieurs à 1, alors nous essayons d'obtenir la valeur médiane de la liste pour diviser toute la liste en deux parties (gauche et droite) pour un appel récursif supplémentaire. Chaque appel récursif divise la liste en gauche et en droite jusqu'à ce que deux entrées adjacentes soient acquises.

  • Ligne 8-9: Nous appelons le tri de fusion récursivement pour chaque subliste (gauche et droite).
  • Ligne 11-15: La procédure de tri commence maintenant. Chacun appelle deux parties traversées par les itérateurs M et N. Le z itérateur itère dans toutes les listes, apportant des modifications au fur et à mesure.
  • Ligne 17-26: La liste gauche [M] est allouée à la fente non dotée de liste [z], et m sont incrémentés si la valeur à m est inférieure à la valeur à n. Sinon, la liste de droite [n] est sélectionnée. Toutes les valeurs attribuées à z sont toutes triées.
  • Ligne 29-37: À la fin de cette boucle, l'une des pièces n'a peut-être pas été complètement croisée. Son contenu est attribué aux positions restantes de la liste.

Complexité du temps:

La complexité temporelle du tri de fusion dépend de deux facteurs:

  • Le facteur de fractionnement de la liste qui prend le journal (n)
  • Le deuxième facteur fusionne la liste des deux, qui prend du temps linéaire, donc sa complexité est O (n)

Ainsi, la complexité totale est basée sur les deux facteurs précédents du tri de fusion est O (n.Logn).

Avantages de l'algorithme de tri de fusion:

  • La fusion du tri permet de trier les ensembles de Big Data.
  • Le tri de fusion peut accéder aux données dans l'ordre, donc un accès aléatoire n'est pas requis.
  • Merge Syt est une méthode de tri fiable.

Inconvénients de l'algorithme de tri de fusion:

  • Le tri de fusion nécessite un tableau de taille similaire pour trier la liste, ce qui est un inconvénient de l'utilisation de la mémoire.
  • Lors du tri des ensembles de données plus petits, cela prend plus de temps.

Conclusion:

Le tri de fusion est une méthode de tri rapide et polyvalente. Son avantage clé est l'exécution et l'efficacité cohérentes de l'algorithme tout en triant de gros tableaux. Par rapport au tri rapide, il ne s'appuie pas sur des jugements défectueux qui entraînent de longs temps d'exécution. Le tri de fusion est le meilleur algorithme pour trier les éléments. Cependant, l'inconvénient principal du tri de fusion est qu'il utilise beaucoup de mémoire avant de fusionner les éléments. Il est également très utile pour le futur génie logiciel, où ils peuvent créer plus d'algorithmes de tri basés sur la méthode de division et de conquête.

Nous avons vu l'exemple standard du tri de fusion sans coder d'abord pour comprendre comment fonctionne cette analogie, puis nous avons implémenté des étapes similaires dans la programmation Python. Maintenant, nous sommes conscients de la technologie de division et de conquête du tri de fusion. Nous espérons que vous avez trouvé cet article utile. Consultez l'indice de Linux pour plus de conseils et d'informations.