BogoSort
Publicado por Renan Birck Pinheiro (última atualização em 27/11/2011)
[ Hits: 5.783 ]
Homepage: http://renanbirck.rocks
Implementação do BogoSort em Python, que permite visualizar a "pontuação" de cada tentativa de "ordenação" do vetor. Fiz para testar a matplotlib.
http://pt.wikipedia.org/wiki/Bogosort
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
# (cc) Copyleft 2011 Renan Birck
# renan.ee.ufsm @ (serviço de e-mail do google)
from random import shuffle, sample
from sys import argv, exit
from matplotlib import pyplot as plt
from matplotlib import rc
from scipy import mean, std
from operator import mul
qualities = []
i = 0;
def measureSolutionQuality(seq):
""" Mede a qualidade da solução se comparada com o vetor original. """
score = 0
for z in enumerate(seq):
score += reduce(mul,z)
return score
def bogosort(seq):
""" BogoSort em si """
global i
while not all(x <= y for x, y in zip(seq, seq[1:])):
shuffle(seq)
#print "Iteration %d, quality is %d. " % (i,measureSolutionQuality(seq)), seq
qualities.append(measureSolutionQuality(seq))
i += 1
return seq
if len(argv) == 1:
n = 10
else:
n = int(argv[1])
if n>1000:
exit("Tu tá tirando uma com a minha cara, né?")
data = sample(range(1000),n)
goodSol = measureSolutionQuality(sorted(data))
print "A qualidade da melhor solução é %d." % goodSol
sorted = bogosort(data)
print "Precisei de %d iterações para fazer o BogoSort dela." % i
print "Qualidade min/max/média/desvpad: %f, %f, %f, %f" % (min(qualities),max(qualities),mean(qualities),std(qualities))
# Plotar o diagrama
plt.plot(range(len(qualities)),qualities,'ro')
rc('text', usetex=True) # Para usar acentos com a matplotlib
plt.xlabel('Itera\c c\~ao')
plt.ylabel('Qualidade')
plt.title("BogoSort: itera\c c\~ao x qualidade")
plt.show()
"Executar" - programa útil que executa comandos com histórico. PyGtk
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
SystemD e mais polêmicas. (12)
Qual melhor distro para esse notebook? (5)
Novos requisitos de sistema para a versão 26.04 (7)









