Perfil

Não há conhecimento isolado: qualquer informação só é relevante no contexto de outras. E nada melhor para explorar esta teia de infinitos nexos do que um blog na rede. Em 100nexos, este autor, Kentaro Mori, tenta partilhar seu entusiasmo pela ciência e os caminhos inesperados a que cada fio de conhecimento pode levar.

Busca

Please translate this!

Posts recentes

Comentários Recentes

Arquivos

Do mesmo autor

« Deveriam ter enviado um poeta… | Main | Azul mental »

O algoritmo de ordenação Maggie

Category: computadoresdiversãomatemática
Posted on: junho 20, 2009 1:59 PM, by Kentaro Mori

É um dos problemas clássicos em computação. Como ordenar uma lista de elementos? O prazer (ou desculpa) de organizar discos em ordem alfabética agora é substituído por um clique que faz a tarefa em frações de segundo. Mas fazê-lo nas menores frações de segundo possíveis, encontrando o algoritmo de ordenação mais eficiente, é o que torna este problema aparentemente trivial um tema de pesquisa até hoje.

Ou, como Eric Schmidt do Google perguntou a Barack Obama, “qual é a maneira mais eficiente de ordenar um milhão de inteiros de 32 bits?”.

Incrivelmente, o presidente responde “acho que bubble sort não seria o caminho certo”. Incrível porque, se a piada não foi combinada, a resposta é uma saída muito boa. O algoritmo bubble sort, de simples implementação e entendimento intuitivo rápido, é no entanto um dos mais ineficientes. Não é recomendado para listas maiores que uma dezena, muito menos de 1 milhão de elementos. Combinado ou não, a piada em si prova que temos o primeiro presidente nerd da era moderna.

Mesmo o algoritmo de ordenação Maggie pode acabar sendo mais eficiente que o bubble sort. A garotinha de 4 anos testa duas caixas por vez, mas é capaz de vasculhar todas as caixas bem como de criar pilhas diferentes de caixas ordenadas. Além de ser muito mais bonitinha. Resta ver se o Ricbit calcula a complexidade desse algoritmo. [via Kenjiria]

No TrackBacks

TrackBack URL: http://scienceblogs.com/mt/pings/112930

Comments (4)

1

Observando o maggie sort, a gente vê que ela usa características intrínsecas dos objetos a serem ordenados para decidir a posição dos mesmos: Ela consegue ver pelo "encaixe" de um cubinho no outro se ele é o correto para aquela posição ou não. Também ela parte do conhecimento prévio de qual é o menor (ela vai direto no menor, sem precisar fazer nenhuma comparação). Eu diria que é uma variação do [url]http://en.wikipedia.org/wiki/Pigeonhole_sort[/url], com uma pitada de não determinismo. Uma heurística baseada no Pigeonhole sort. O pior caso continua sendo O(n^2), mas o caso médio e o melhor caso são O(n).

Eu descreveria o algoritmo assim:

def sort(A):


# introduz não determinismo, o erro é no máximo de 1
A2 = [n for n in range(len(A)) + random(-1, 1)]
for i in range(len(A2)):

j = i+1
while A2[i] != i:

tmp = A2[i]
A2[i] = A2[j]
A2[j] = tmp

return A2

Posted by: Girino | junho 20, 2009 5:05 PM

2

A resposta do Obama é realmente incrível, deve ter sido combinada, não? Quer dizer, é o tipo de tecnicalidade que não é exatamente difícil, mas obscura para gente não envolvida com ciência da computação ou programação e mesmo quem é pode acabar esquecendo o nome desse tipo de ordenação.

E a garotinha ordenando é realmente uma graça... Excelente artigo.

Posted by: Patola | junho 20, 2009 5:26 PM

3

hahaha obrigado, girino! A intuição estava certa, é um pouco melhor que bubble sort! :-D

Posted by: Kentaro Mori Author Profile Page | junho 20, 2009 6:39 PM

4

Eu fiz uns testes aqui e basicamente depende da estratégia de escolha do próximo bloco. Se a escolha for relativamente inteligente (i.e. eu sempre sei qual o próximo bloco, com um erro pequeno) o algorítmo é O(e . N) ~= O(N), onde e é o erro médio, inclusive no pior caso. Já se a escolha for burra e eu tenho de tentar aleatoriamente todos os blocos até achar o correto, então e ~= N e o algoritmo passa a ser O(N^2), inclusive no caso médio. O melhor caso é sempre O(N).

Posted by: Girino | junho 21, 2009 1:48 AM

Comente

(Um email será necessário somente para autenticação. Comentários serão moderados por causa de spam. O seu comentário pode não aparecer imediatamente. Obrigado por esperar.)

ScienceBlogs Brasil

Buscar ScienceBlogs Brasil:

Vá para:

Publicidade
Publicidade

ScienceBlogs por Seed Media Group. Group. ©2006-2009 Seed Media Group LLC. Todos direitos garantidos.

Páginas da Seed Media Group Seed Media Group | ScienceBlogs | SEEDMAGAZINE.COM