5.11. Ordre de mélange¶

Nous adressons à notre attention sur une stratégie de division et de conquête de manière à améliorer la performance des algorithmes de commande. Le premier algorithme que nous étudions est en train de mélanger. L’ordre de mélange est un algorithme récursif qui divise en permanence une liste en deux. Si la liste est vide ou comporte un seul élément, il est commandé par définition (le cas de base). Si la liste a plus d’un élément, nous divisons la liste et envisageons de manière récursive un ordre de mélange pour les deux moitiés. Une fois que les deux moitiés sont commandées, l’opération fondamentale est effectuée, appelée mélange. Le mélange est le processus de prise de deux listes ordonnées plus petites et de les combiner sur une seule nouvelle liste ordonnée. La figure 10 montre la liste de notre exemple de famille car il est divisé par ordenamientoPorMezcla. La figure 11 montre les listes simples, maintenant commandées, comme elles fusionnent à nouveau.

<7d28a18e96 "> ../_ images / fégesorta.png

Figure 10: Division de la liste dans un ordre de mélange

Figure 10: Division de la liste dans un ordre de mixage

./_images/mergesortb .png

3figura 11: listes comme fusionné à nouveau

Figure 11: Listes comme fusionné à nouveau

 » / div> montré dans Activecode 1 commence par demander le boîtier de base. Si la longueur de la liste est inférieure ou égale à une, nous avons déjà une liste ordonnée et plus aucun traitement n’est nécessaire. Si, d’autre part, la longueur est supérieure à une, alors nous utilisons l’opération slice de Python pour extraire les moitiés gauche et droite. Il est important de garder à l’esprit que la liste peut ne pas avoir de nombre de paires d’articles. Cela n’a pas d’importance, car les longueurs seront différentes au plus dans une.

une fois la fonction dans la moitié gauche et la moitié droite ( Les lignes 8-9), il est supposé qu’ils sont commandés. Le reste de la fonction (lignes 11-31) est chargé de mélanger les deux listes ordonnées plus petites dans une liste ordonnée plus importante. Notez que l’opération de mélange localise à nouveau les éléments dans la liste d’origine (unaLista) une à la fois prenant à plusieurs reprises le moindre élément des listes commandées.

La fonction ordenamientoPorMezcla a été augmenté avec une instruction print (ligne 2) pour afficher le contenu de la liste qui est commandée au début de chaque invocation Il y a aussi une instruction print (ligne 32) pour afficher le processus de mélange. L’impression indique le résultat de l’exécution de la fonction avec notre liste d’exemple. Notez que la liste avec les éléments 44, 55 et 20 ne sera pas divisée en parties égales. La première division donne et le deuxième jour. Il est facile de voir comment le processus de division produit occasionnellement une liste pouvant être mélangée immédiatement avec d’autres listes commandées.

initializTUnstop début du transfert vers l’avant

pour analyser la fonction ordenamientoPorMezcla, nous devons envisager les deux processus différents qui constituent sa mise en œuvre. Premièrement, la liste est divisée en moitiés. Nous sommes déjà calculés (dans une recherche binaire) que nous pouvons diviser une liste en deux dans une heure \ (\ journal n \) où n est la longueur de la liste. Le deuxième processus est le mélange. Chaque élément de la liste sera traité et placé dans la liste dérisoire. Donc, l’opération de mélange qui entraîne une liste de n nécessite n opérations. Le résultat de cette analyse est qu’ils sont effectués \ (\ journal n \) divisions, chacune des coûts \ (n \) pour un total des opérations de \ (n \ log n \). Un ordre de mélange est un algorithme \ (ou (n \ journal n) \).

N’oubliez pas que l’opérateur de partition est \ (ou (k) \) où k est la taille de la partition. Pour vous assurer que ordenamientoPorMezcla soit \ (ou (n \ journal n) \), nous devrons supprimer l’opérateur de partition. Encore une fois, cela est possible si nous transmettons simplement les index initiaux et finaux avec la liste lorsque nous effectuons l’appel récursif. Nous laissons cela comme un exercice.

Il est important de noter que la fonction ordenamientoPorMezcla nécessite d’espace supplémentaire pour stocker les deux moitiés telles qu’elles sont extraites avec des opérations de partition. Cet espace supplémentaire peut être un facteur essentiel si la liste est importante et peut poser problème à cette commande lorsque vous travaillez sur de grands ensembles de données.

auto-évaluation

    Q-2: Compte tenu de la liste des numéros suivants: laquelle des réponses suivantes correspond à la liste qui sera commandée après 3 appels récursifs vers la modération?

  • C’est la seconde moitié de la liste.
  • Oui, la commande de commande continuera à bouger de manière récursive vers le début de la liste jusqu’à ce qu’elle s’arrête avec le boîtier de base.
  • N’oubliez pas que la commandePORMEZCLA ne fonctionne pas sur la moitié droite de la liste jusqu’à ce que La moitié droite est entièrement commandée.
  • Ceci est la liste après 4 appels récursifs
    Q-3: Compte tenu de la liste des numéros suivants : Laquelle des réponses suivantes correspond aux deux premières annonces qui seront mixtes?

  • et
  • Les deux premières listes mixtes seront des listes de base, nous n’avons pas encore atteint un cas de base.
  • et
  • Ce sera le dernier Deux listes mixtes
  • et
  • les listes et sont les deux premiers cas de base trouvés par la mémoire de commande et, par conséquent, seront les deux premières listes mixtes.
  • et
  • Bien que 9 et 16 sont des valeurs voisines, elles sont dans des moitiés différentes de la liste de la première partition.

Leave a Comment

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *