BogoSort

Publicado por Renan Birck Pinheiro (última atualização em 27/11/2011)

[ Hits: 5.281 ]

Homepage: http://renanbirck.rocks

Download bogo.py




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

  



Esconder código-fonte

#!/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()

Scripts recomendados

Equação de 2º grau no Tkinter

"Executar" - programa útil que executa comandos com histórico. PyGtk

Cálculo de IPI

Algoritmo de Euclides estendido em Python3

Lista Ligada - Versão Recursiva


  

Comentários
[1] Comentário enviado por Century_Child em 28/11/2011 - 20:13h

Pessoal, pra quem não sacou, esse algoritmo é uma piada, ou uma ótima forma de trollar alguém ou de deixar um pouquinho mais lerdo aquele sistema que o cliente reclamou que "tá muito rápido". ^^


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts