Jumpi’s Notepad

My annotations about the life, universe and everything!!! ;)

Fibonacci Series Test (Perl and Python)

with 7 comments

Post in portuguese about my tests with Fibonacci Series using perl and python…

Esses dias, para ser mais exato, na segunda-feira, o meu colega de trabalho marcio a.k.a. tio estava falando sobre a sua escolha para criar um projeto de site que ele esta fazendo e para testar ele implementou o algorítimo de Fibonacci usando C, C++, Ruby e Python e mediu o tempo utilizando o comando time… C e C++ entraram na lista so para ele poder criar um parâmetro. E então ele decidiu escolher pelo python devido ao tempo, porem, ele esqueceu do nosso velho amigo Perl e eu disse a ele que perl executava o mesmo teste mais rápido que python e ele me desafiou, ou seja, estou fazendo esse teste para demonstrar que o nosso velho amigo perl pode ser bom, lembrando que não sou um bom programador python, mais tentei deixar o código o mais próximo possível entre ambas as linguagens para que nenhum boi-corneta (como diria o meu amigo Caloni, gostei da expressão, por isso a utilizei aqui também) venha se espantar aqui…

Bem… para a realização desse teste, utilizei o meu laptop, um macbook com perl 5.8.8 e python 2.5.1 como podem ver abaixo:

[jumpi@Painkiller]~/Sources: perl -v
This is perl, v5.8.8 built for darwin-thread-multi-2
level (with 1 registered patch, see perl -V for more detail)
Copyright 1987-2006, Larry Wall
[jumpi@Painkiller]~/Sources: python -V
Python 2.5.1

Para fazer os testes, utilizei uma versão iterativa do algorítimo de Fibonacci (afinal de contas, poderia apelar para a recursiva, porem achei melhor utilizar essa para o teste), segue abaixo o código:

Em perl:

#!/usr/bin/perl
use strict;
my $n = shift;
my ($a,$b)=(1,2);
print "$a\n$b\n";
for(1..$n-2) {
  ($a,$b) = ($b,$a+$b);
  print "$b\n"
}

Em python:

#!/usr/bin/python
import sys
def fib(n):
 a, b = 0, 1
  for i in range(n):
   print b
   a, b = b, a+b
n = int(sys.argv[1])
fib(n)

E executei ambos os códigos, fazendo 10000 iterações e medindo o tempo usando o comando time, onde obtive o seguinte resultado:

Em perl:

real	0m0.188s
user	0m0.054s
sys	0m0.047s

Em python:

real	0m10.778s
user	0m8.104s
sys	0m0.231s

Well… ai esta a prova, pelo que posso ver o nosso velho amigo rabugento perl terminou a sua tarefa em um tempo menor que o python, pelo que posso enxergar, 10x mais rápido???

Brincadeiras a parte, através desse teste simples, podemos perceber que o perl, mesmo estando ultrapassado na visão de muitos, ainda executa muito bem o serviço, logico que poderíamos utilizar n técnicas em ambas as linguagens. Porem, como eu disse no principio, tentei simplificar ao máximo para não criar vantagens para nenhum dos lados.

Quero nesse post agradecer ao tio, pois sem ele, não teria o porque executar esses testes e ao amigo Caloni de onde tirei expressões para compor esse post…

Tio, vamos fazer o projeto utilizando perl + catalyst??? Hein??? Hein??? To Brincando!!! ;D

About these ads

Written by jumpi

January 9, 2008 at 4:07 am

Posted in Math, Pessoal, Programming

Tagged with , ,

7 Responses

Subscribe to comments with RSS.

  1. Que valor de n você usou? Números de Fibonacci tendem a ficar grandes bem rápido. É possível, que quando os resultados estouraram a precisão de inteiros, o Python passou a usar inteiros com precisão arbitrária, enquanto que o Perl passou para ponto flutuante. Se você quer um teste justo, faça o Perl usar números inteiros grandes também, com algo como “use bigint;”.

    blah

    January 9, 2008 at 2:31 pm

  2. Ola amigo,

    Estou fazendo revisoes aqui e posso usar um Math::BigInt para refazer os testes, porem tentei realizar as operacoes do jeito mais puro e simples possivel.

    Logo farei um post com as correções

    jumpi

    January 9, 2008 at 5:22 pm

  3. Você não precisa usar Math::BigInt diretamente. É só colocar um “use bigint;” no começo do arquivo para Math::BigInt ser usado de forma transparente em todas as operações. Se você tiver Math::BigInt::GMP instalado, pode tentar “use bigint lib => ‘GMP’;”.

    blah

    January 9, 2008 at 5:53 pm

  4. Adorei o blog

    Cara, apesar de eu achar python muito “bunitinho”, em *todos* os testes de propósito geral que eu fiz, Perl ficou em 10 e 20 vezes mais rápido.

    Mas como sempre discutimos, eu e meus amigos, medir diferença de performance entre linguagens é muito complicado. O máximo que dá pra fazer com alguma credibilidade, é medir a implementação de um algoritmo, em determindada versão da implementação de uma linguagem.

    Tudo é muito subjetivo. Por exemplo, num contexto macro, 20x quando representa segundos, pode ser considerado absurso e quando representa microssegundos, pode ser considerado aceitável.

    Bom é a minha opinião

    Abraços

    Blabos

    May 10, 2008 at 5:10 pm

  5. oi,estava vendo os programas gerados e gostaria de saber se você tem a série de Fibonacci implementado no programa R.
    abraço
    Débora Pessoa

    debora pessoa

    August 27, 2008 at 7:10 pm

  6. Ola Debora.

    Fiquei sem entender a sua duvida, todos os códigos utilizados para o teste estão disponíveis no post…

    Alias, obrigado pela visita!!! :D

    jumpi

    August 27, 2008 at 7:53 pm

  7. procurando no google sobre ‘velocidade x python’ acabei caindo no seu blog… e resolvi também executar os testes… e ocorreu o mesmo, perl foi muito mais rápido, porém eu percebi que o perl parou de calcular os números em 1.3069892237634e+308, retornando ‘inf’ para números maiores, oque não aconteceu no python… então acho que não da para estabelecer um parâmetro de velocidade entre as linguagens para cálculos.

    Thiago

    April 18, 2009 at 2:59 pm


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: