[PYTHON] Utilisez le tri par bulles pour générer des nombres aléatoires basés sur une distribution normale standard à partir de nombres aléatoires uniformes

introduction

C'est une idée inutile que j'ai imaginée et mise en œuvre tout en implémentant divers algorithmes de tri tout en pratiquant python pour tuer le temps.

Utilisez le tri à bulles pour générer des nombres aléatoires basés sur une distribution normale standard

Lors de la mise en œuvre du tri par bulles, du tri des données générées aléatoirement et de la recherche du nombre moyen de fois, tout le monde pense naturellement que le nombre de tris est basé sur une distribution normale standard uniforme. J'ai créé un programme pour générer des nombres aléatoires basé sur une distribution normale standard à partir de nombres aléatoires uniformes.

Le programme est-il utile? ~~ opération vectorielle python numpy

R = np.random.rand()


 Des nombres aléatoires basés sur une distribution normale standard peuvent être générés sans utiliser. ~~

 Même aléatoire

#### **`random.normalvariate(mu, sigma)`**
```normalvariate(mu, sigma)

 Vous pouvez générer des nombres aléatoires basés sur une distribution normale en utilisant.

 ~~ En d'autres termes, c'est une idée inutile qui peut générer des nombres aléatoires basés sur la distribution normale standard sans mettre numpy en python. ~~
 Pas vraiment utile.

## Le programme suivant
```python
# -*- coding: utf-8 -*-
import random
import matplotlib.pyplot as plt

def bubble_sort(data,data_num):
	count = 0
	for i in range(0,data_num):
		for j in range(data_num-1,i,-1):
		 	if data[j] <= data[j-1]:
		 		count += 1
		 		data[j] , data[j-1] = data[j-1] , data[j]
	return count

if __name__ == '__main__':
	t = 10 #Nombre de nombres aléatoires pour effectuer chaque tri de bulles
	n = t*(t-1)/2 #Une distribution normale standard est créée dans la plage de n
	y = [0]*n #Stocke le nombre de fois qu'il a fallu pour trier lorsque chaque tri à bulles a été effectué
	data = [] #T pour trier les données à chaque fois

	for j in range(0,100000):
		count = 0
		for i in range(0,t):
			data.append(random.randint(1,100))

		count = bubble_sort(data,t)
		y[count] = y[count] + 1
		del data[:] #Initialisation des données

	plt.plot(y,marker="o")
	plt.show() 

figure_1.png

À propos du résultat

Cette fois, j'ai trié une liste de 10 nombres aléatoires 100 000 fois et compté le nombre de fois que chaque tri a été effectué comme un nombre aléatoire nouvellement généré et j'ai fait un graphique. Comme vous pouvez le voir sur le graphique, cela ressemble à une distribution normale standard. Le nombre maximum de tris lorsque n éléments de données sont triés par tri à bulles est n (n-1) / 2, donc cette fois il y a 10 sortes de données, donc 10 * (10-1) / 2 = Le calcul est de 45. On pense que la raison pour laquelle cela ressemble à une distribution normale standard est le modèle de nombres aléatoires appartenant au nombre de sortes.

Résumé

C'est juste un programme d'auto-satisfaction.

Recommended Posts

Utilisez le tri par bulles pour générer des nombres aléatoires basés sur une distribution normale standard à partir de nombres aléatoires uniformes
J'ai essayé de trier une colonne FizzBuzz aléatoire avec un tri à bulles.
Générer une distribution normale avec SciPy
Programme pour élire un président basé sur la démocratie Puri Ketsu parmi les participants ATND
Créer un graphique de distribution normale standard en Python
Comment générer un objet Python à partir de JSON
J'ai essayé de générer une chaîne de caractères aléatoire
Python: décompressez depuis l'entrée standard en utilisant zipfile