terça-feira, 11 de outubro de 2011

Quantum Countdown Sort

O Countdown Sort já foi otimizado e agora entra para o reino quântico!

O módulo Quantum::Superpositions agrega dois operadores ao Perl: all e any. Eles recebem como parâmetro uma lista que é comprimida para um único valor que é a sobreposição de todos os valores da lista original. Então, magicamente, podemos realizar operações e comparações simultâneas sobre todos os valores de uma lista.

Fundamentalmente, o Countdown Sort é simples. Ele percorre uma lista de números positivos, subtraindo 1 de cada valor; cada vez que a subtração resultar em 0, o elemento original correspondente é adicionado à lista ordenada.

Com a sobreposição quântica, podemos simplificar substancialmente o código. Quanto a melhorar o desempenho, teremos que esperar um computador quântico.


use Quantum::Superpositions;

sub quantum_countdown_sort {
  my @unsorted=@_;
  my @sorted=();
  my $d=0;
  
  while($#sorted<$#unsorted) {
    push(@sorted, $d) if any(@unsorted)-$d==0;
    $d++;
  }
  
  return @sorted;
}

E um pequeno teste confirma que a rotina realmente funciona:


print join ',', quantum_countdown_sort 10,25,2,30,0,1,11;
0,1,2,10,11,25,30

O nome do método já garante a seriedade do pesquisador!

Nenhum comentário: