shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Re: Minha contribuição de Feliz Ano novo


From: Jeferson Santos
Subject: Re: [shell-script] Re: Minha contribuição de Feliz Ano novo
Date: Sun, 17 Jan 2010 10:25:31 -0200

Opa! Deu diferença mesmo!
Engraçado que apesar de não estarmos lidando com um scrip que
necessariamente dependa da velocidade, as técnicas de otimização
utilizadas aqui irão trazer ganhos em diversos outros scripts.

O último script tinha esses tempos, de 1 à 100000:
real    0m2.938s
user    0m2.496s
sys     0m0.064s

Testando . no lugar de [0-9], de 1 à 100000:
real    0m2.246s
user    0m1.740s
sys     0m0.108s


Com isso, temos um ganho real de 0.692, no teste realizado, que eu
posso considerar um realmente razoavel, julgando a simplicidade da
tarefa.


2010/1/17 Marcelo Salhab Brogliato <address@hidden>:
> Olá Jeferson e Julio,
>
> neste linha: Tudo=$(sed 's/ //g;s/\([0-9]\)/\1\n/g' <<< $Tudo)
> sabemos que tudo o que sobra são números e, pelos meus testes, substituir
> [0-9] por . melhora 40% a performance (deste comando, não do todo).
>
> A explicação seria não ter que verificar se o digito está entre 0 e 9,
> evitando milhares de comparações.
>
> abraços,
> Salhab
>
>
>
> 2010/1/17 Jeferson Santos <address@hidden>
>
>>
>>
>> Olá Julio,
>>
>> Que bom que gostou da observação, pois é fruto de muito chope virtual
>> no botequim do shell...rs
>>
>> Voltando ao assunto, refiz os testes.
>> O seu script foi um pouco mais rapido que o meu, de 1 a 1000, sendo
>> assim, resolvi deixar as coisas mais interessantes e aumentei pra
>> 100.000, só pra deixar a coisa ferver.
>> Obviamente não daria pra te vencer num duelo de script mais de 1x...rs
>> sendo assim, veja os resultados da surra q levei contra seu script
>> novo:
>>
>> Meu script, de 1 a 100000
>> real 0m58.144s
>> user 0m56.128s
>> sys 0m2.144s
>>
>> Seu script, de 1 a 100000
>> real 0m3.202s
>> user 0m2.740s
>> sys 0m0.084s
>>
>> Tendo como base estes dados, resolvi mesclar os 2 scripts, linha por
>> linha, pra ver o melhor de cada um. A única coisa que testei e deu
>> diferença foi usar o seq no lugar do eval echo. Também adicionei uma
>> linha em awk (que incrivelmente nao causou impacto no desempenho, até
>> pelo fato de ter sido usado apenas uma vez) pra deixar a saída
>> exatamente como estava no meu script original.
>> Eis o resultado:
>>
>> real 0m2.938s
>> user 0m2.496s
>> sys 0m0.064s
>>
>> Aqui está o script modificado:
>> -----------------------------------
>> #!/bin/bash
>> Tudo=$(seq $1 $2)
>>
>> Tudo=$(sed 's/ //g;s/\([0-9]\)/\1\n/g' <<< $Tudo)
>> sort -n <(echo "$Tudo") | uniq -c | awk '{print $2" = "$1}'
>> -----------------------------------
>>
>> Abraços à todos,
>> Jeferson dos Santos
>>
>>
>>
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como 
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>



-- 
Abraços,
Jeferson Santos


reply via email to

[Prev in Thread] Current Thread [Next in Thread]