[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 11:11:15 -0200 |
Pois é, julio, se eu falar de anilhas pro meu pai, a resposta vai ser
a mesma...rs
Essa ideia do seq -w é interessante, vou colocar como switch no script.
Só pra gente fechar (até que alguem venha com mais uma otimização :-D ):
Juntando tudo em apenas 2 linhas:
real 0m1.961s
user 0m1.712s
sys 0m0.044s
Pra mim essa é a prova de que loops deveriam ser evitados sempre que
possível, pois apesar de simples, impactam bastante sobre o
desempenho.
Abraços,
Jeferson dos Santos
www.jeferson.info
2010/1/17 Jeferson Santos <address@hidden>:
> 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
>
--
Abraços,
Jeferson Santos
- Re: [shell-script] Minha contribuição de Feliz Ano novo, Julio C. Neves, 2010/01/01
- Re: Minha contribuição de Feliz Ano novo, lordhulk, 2010/01/16
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Julio C. Neves, 2010/01/16
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Jeferson Santos, 2010/01/16
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Marcelo Salhab Brogliato, 2010/01/17
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Julio C. Neves, 2010/01/17
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Marcelo Salhab Brogliato, 2010/01/17
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Julio C. Neves, 2010/01/17
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Jeferson Santos, 2010/01/17
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo,
Jeferson Santos <=
- Re: [shell-script] Re: Minha contribuição de Feliz Ano novo, Marcelo Salhab Brogliato, 2010/01/17