[PYTHON] Visualisez le comportement de l'algorithme de tri avec matplotlib

introduction

Lors de la recherche d'algorithmes de tri sur Internet, nous voyons souvent des animations qui visualisent le comportement des algorithmes. J'ai pensé que ce serait intéressant si je pouvais faire une telle animation moi-même, alors j'ai essayé d'utiliser matplotlib.

supposition

Code source

[Tri à bulles](https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3% Code qui génère le comportement de 83% 88) vers une animation gif.

import matplotlib.pyplot as plt
import matplotlib.animation as ani
from random import shuffle

COLOR_PINK = '#ffc0cb'
COLOR_GOSSIP = '#cbffc0'


def draw_bar(li, color=COLOR_PINK):
  x_axis = list(range(1, len(li) + 1))

  plt.bar(x_axis, li,
          tick_label=li, align='center', width=0.4, color=color)


def draw_frame(frame, sorted_li, steps):
  plt.clf()
  li = steps[frame]
  options = {'color': COLOR_GOSSIP} if li == sorted_li else {}
  draw_bar(steps[frame], **options)


def bubble_sort(li):
  sorted_li = list(li)
  steps = []

  for i in range(0, len(sorted_li)):
    for j in range(1, len(sorted_li) - i):
      if sorted_li[j - 1] > sorted_li[j]:
        sorted_li[j], sorted_li[j - 1] = sorted_li[j - 1], sorted_li[j]

      if len(steps) == 0 or steps[-1] != sorted_li:
        steps.append(list(sorted_li))

  return sorted_li, steps


if __name__ == '__main__':
  li = list(range(1, 11))
  shuffle(li)

  sorted_li, steps = bubble_sort(li)

  fig = plt.figure(figsize=(6.0, 6.0))

  #Faites apparaître le résultat du tri plus long de 5 images dans l'animation.
  # FuncAnimation()Répéter_Il existe une option de délai, mais cela ne fonctionne pas.
  steps = steps + [steps[-1]] * 5

  anim = ani.FuncAnimation(fig, draw_frame,
                           fargs=(sorted_li, steps), frames=len(steps))
  anim.save('bubble_sort.gif', writer='imagemagick', fps=5)

animation

bubble_sort.gif

référence

Recommended Posts

Visualisez le comportement de l'algorithme de tri avec matplotlib
Visualisons le nombre de personnes infectées par le virus corona avec matplotlib
Alignez la taille de la barre de couleurs avec matplotlib
Augmentez la taille de la police du graphique avec matplotlib
Ajoutez des informations au bas de la figure avec Matplotlib
Visualisez la gamme d'insertions internes et externes avec python
Visualisez le vocabulaire caractéristique d'un document avec D3.js
Visualisez le statut d'appréciation des œuvres d'art avec OpenCV
Ajustez le rapport de plusieurs chiffres avec le gridspec de Matplotlib
comportement de matplotlib: histgramme normé
[Neta] Algorithme de tri de O (1)
Changer le style de matplotlib
Visualisez la trajectoire de Hayabusa 2
Visualisez les résultats des arbres de décision réalisés avec Python scikit-learn
Reformatez l'axe des temps du graphique de la série chronologique des pandas avec matplotlib
J'ai essayé d'implémenter l'algorithme FloodFill avec TRON BATTLE de CodinGame
Visualisez le flux des tweets avec Diamond + Graphite + Grafana
J'ai écrit le fonctionnement de base de matplotlib dans Jupyter Lab
Implémentation de la méthode Dyxtra par python
À propos du comportement de yield_per de SqlAlchemy
À propos de la taille des points dans matplotlib
Visualisez l'état de la réponse du recensement national 2020
Trouvez la valeur optimale de la fonction à l'aide d'un algorithme génétique (partie 2)
Résolution du labyrinthe avec Python-Supplément au chapitre 6 de la référence rapide de l'algorithme-
Visualisez la fréquence des occurrences de mots dans les phrases avec Word Cloud. [Python]
[Python] J'ai essayé de visualiser le prix en argent de "ONE PIECE" plus de 100 millions de caractères avec matplotlib.
[Python] Définissez la plage du graphique avec matplotlib
Vérifiez le comportement du destroyer en Python
Ajustez l'espacement entre les chiffres avec Matplotlib
Comportement lors du retour dans le bloc with
Ajustez la largeur du bac de manière nette et précise avec l'histogramme de matplotlib et seaborn
Gymnastique algorithmique 24 Milieu de la liste liée
Visualisez la valeur limite du perceptron multicouche
Essayez l'algorithme Variational-Quantum-Eigensolver (VQE) avec Blueqat
Rechercher le labyrinthe avec l'algorithme python A *
Visualisez les effets de l'apprentissage profond / de la régularisation
Définissez la couleur des xticklabels individuellement avec matplotlib
La troisième nuit de la boucle avec pour
La deuxième nuit de la boucle avec pour
Alignez la barre de couleurs sur la figure avec matplotlib
Visualisez les données d'exportation du journal Piyo
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
Compter le nombre de caractères avec écho
Définissez les paramètres communs avec le sous-graphique de matplotlib
J'ai essayé de visualiser facilement les tweets de JAWS DAYS 2017 avec Python + ELK
Je voulais visualiser la simulation de particules 3D avec la bibliothèque de visualisation Python Matplotlib.
Remarque: préparez l'environnement de CmdStanPy avec docker
À propos du comportement de copy, deepcopy et numpy.copy
À propos de la notation de l'axe X du graphique à barres de Matplotlib
[Python] axe limite du graphe 3D avec Matplotlib
Mathématiques Todai 2016 résolues avec Python
Conseils de dessin avec matplotlib côté serveur
[Note] Exportez le html du site avec python.
Visualisez la couche interne du réseau neuronal