Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
dicas3d

Eficiência de um programa.

Recommended Posts

dicas3d

Olá comunidade, Estou a criar este tópico para dar umas dicas sobre eficiência. Neste tópico gostava que indicassem as vossas dicas, indicando tambem a linguagem a que se refere se for exclusivo de alguma linguagem segundo o exemplo que darei na próxima mensagem.


Abraços

dicas3d

Share this post


Link to post
Share on other sites
dicas3d

Vecotores/ variavies : Devem usar as variáveis ou vectores sempre sempre com a mais pequena quantidade de valores possivel e evitando vectores, especialmente bidimensionais e tridimnesionais.

Funções/procedimentos : Sempre que possível deve-se usar o algoritmo da função directamente no sitio onde eventualmente seria necessário usar uma função. Isto vale tambem para funções e procedimentos pré-programados.

Tamanho dos algoritmos : Quando se usam funções pré-programadas para se obter um valor, sempre que saibamos que os valores da funçãos são <>, o ideal é colocálos numa variável.

Obs: Vale mais vários if's ou cases encaixados ou uma unica linha de if com todas as condições?


Abraços

dicas3d

Share this post


Link to post
Share on other sites
ruileal

eu opto por utilizar case's e if's encadeados...permite uma melhor leitura embora tenha o "vício" de reduzir código

Share this post


Link to post
Share on other sites
dicas3d

Já agora, antes que escrevas esse tópico, quando se fala aqui em eficiência é falar em ideias com desempenho diferente.

Não se está a falar de truques que dão ganhos de centésimos ou milésimos de segundo. Esses são irrelevantes!!!

Tipicamente, a ideia correcta resolve um problema em menos de um segundo, enquanto as ideias para 40..70 pontos poderão precisar de minutos,horas,dias ou mais para o resolver.

Aproveito para acrecentar que tambem podem fazer a sugestão do mogers, isto é por aqui ideias vossas, e podem tambem dar exemplos, como eu agora.

Se tiverem que avaliar um conjunto de nºs primos contidos numa string, que tem x comprimento, o ideal é sempre que tiverem de programar a excepção á regra eliminar os multiplos de 2, 3, 5 e 7 (os proprios 2, 3, 5 e 7), façam um if logo que saibam o comprimento para dizer ao programa para não fazer o resto do algoritmo, como? Se numero = '2 'então primo <- false, etc.


Abraços

dicas3d

Share this post


Link to post
Share on other sites
Warrior

Todas as optimizações que referiste são completamente irrelevantes.

A maioria já é efectuada pelo compilador (assim como coisas muito mais complexas), e mesmo que não seja, são optimizações que na melhor das hipóteses nos poupam algo na casa dos microsegundos.

Tirando raras excepções, qualquer optimização digna de esforço encontra-se no lado do algoritmo, não do código.

Share this post


Link to post
Share on other sites
ruileal

Todas as optimizações que referiste são completamente irrelevantes.

A maioria já é efectuada pelo compilador (assim como coisas muito mais complexas), e mesmo que não seja, são optimizações que na melhor das hipóteses nos poupam algo na casa dos microsegundos.

Tirando raras excepções, qualquer optimização digna de esforço encontra-se no lado do algoritmo, não do código.

Concordo plenamente, eu prefiro dar prioridade a leitura do próprio código em si por parte de quem o venha a alterar mais tarde

Share this post


Link to post
Share on other sites
pedroserra

Era uma vez um software que consumia muita memória usado numa empresa.

Um dia a equipa de programação resolveu por fim ao "desperdício" de recursos e passaram um mês inteiro a analisar a aplicação e a implementar optimizações.

No final do mês apresentaram os resultados às chefias lá da zona: tinham conseguido reduzir para 1/10 a memória necessária para executar o software.

Comentário do chefe: "- Quanta memória tem o servidor actualmente? E quanto é que custava ter comprado uns MB extra?"

Regra de ouro: "Os computadores são baratos, os programadores são caros."

Vale mais ter um código legível que poupe tempo aos "humanos" do que tentar ganhar uns milisegundos naquela funcionalidade que nem sequer é muito usada.


Ah e tal não sei quê...

Share this post


Link to post
Share on other sites
mjamado

Era uma vez um software que consumia muita memória usado numa empresa.

Regra de ouro: "Os computadores são baratos, os programadores são caros."

... o chefe despediu os programadores, e gastou 100€ em memória novas. Passado uns meses, o negócio ia de vento em popa, menos despesa, mais lucros. O programa, que geria os stocks, as contas, o volume de vendas, os ordenados de toda a gente, corria perfeitamente.

Um belo dia, ao lançar umas encomendas novas, o programa crasha com um erro tão trivial como Array Index Out of Bounds. Telefona ao ex-chefe da equipa de programação, que tem a maior satisfação da vida dele ao responder... "temos pena"...  :cheesygrin:

Se as optimizações, tal como deste no teu exemplo, são de 1000%, tem lá paciência, mas são optimizações a fazer mesmo, porque a versão original era uma verdadeira nódoa.

Para ganhar alguns milissegundos, então é melhor estar quieto - mas o teu exemplo é fraquito.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Share this post


Link to post
Share on other sites
Knitter

Acho que não se tratou tanto de um exemplo mas sim de uma história que demonstra bem o quão inútil é a tentativa de qualquer optimização como as mencionadas.

Se estão preocupados com este tipo de optimizações, então têm as prioridades trocadas. A não ser que tenham um algoritmo que seja a causa de algum problema, não têm nada para optimizar, e mesmo o algoritmo problemático só pode ser detectado durante a utilização da aplicação, com tudo pronto, já que antes de termos a aplicação a funcionar não temos forma de adivinhar se vai ou não ser lento, e mesmo que seja, pode ser um problema que se pode ignorar.

Share this post


Link to post
Share on other sites
Edo

Escrever um algoritmo que seja cache/memory friendly. Isto é alinhar os dados, e armazena-los pelo padrão de acesso.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.