Este artigo foi desenvolvido juntamente com os colegas da faculdade: Bruno Alisson, Higor Vinicius, Jean Silvestre. Ele pretende mostrar a importância da otimização de algoritmos e a definição de algoritmo e de otimização.
Segundo BENNATON (2006:1): "Otimizar é melhorar até onde pudermos. No ideal, melhorar até o máximo. Até aquela situação ideal na qual, como vulgarmente se diz, se mexer mais, piora".
Otimizar então é melhorar, essa melhora é uma mudança de um processo que resulta em um ganho. Otimizar algoritmos é efetuar essa melhora em algum algoritmo pronto para resolução de um determinado problema, mas que ainda pode ser alterado para efetuar a resolução da melhor maneira possível ou encontrada, visto que para selecionar a melhor maneira dependemos de termos escolhas e critérios. Abaixo serão apresentados dois algoritmos um sem nenhuma otimização para resolver o problema de ordenação de uma matriz utilizando o método bolha e o segundo corresponde a otimização do mesmo.
O primeiro algoritmo chama a função bolha passando a quantidade de elementos (n) e a matriz (v) que se deseja ordenar de ordem crescente. Então esta função utiliza duas estruturas de repetição. A primeira estrutura percorre da posição n-1 até 1, decrementando a variável i, onde i recebe n-1 no começo da repetição. Enquanto que a segunda em conjunto com a primeira estrutura de repetição percorre 1 até i, verificando se a posição atual é maior do que a próxima, caso positivo será efetuado a troca. Na figura 1 abaixo, é apresentado o algoritmo em questão.
Figura 2 - Algoritmo de ordenação sem otimização
O segundo algoritmo é uma implementação otimizada do primeiro. O processo de ordenação é o mesmo, porém o segundo algoritmo possui uma variável que diz se ocorreu uma troca dentro do repita interno, caso não tenha ocorrida nenhuma troca o função retorna, pois o vetor já esta ordenado. Na figura 2 abaixo, tem-se a visualização do algoritmo.
[5] Comentário enviado por jcaj em 18/07/2006 - 10:39h
Caro tobias_felipe a intenção não era de disfarçar e sim passar o conhecimento que obtivemos fazendo o trabalho. Se você acha que trabalho escolar não é interessante ficar exposto aqui no site, de onde você acha que vem o avanço da tecnologia?
[6] Comentário enviado por Ragen em 18/07/2006 - 11:02h
jcaj,
O artigo é bastante didatico, mas muito superficial. Você poderia ter abordado questões mais práticas e aplicadas ao desenvolvimento real de softwares.
Por exemplo: abordado pre-processamento e pre-caching, praticas que se adaptam a quase qualquer tipo de problema.
[10] Comentário enviado por htampieri em 04/08/2006 - 20:16h
a importancai de artigo nao é esclarecer todas as duvidas do leitor mas sim acrescentar conteudo ao seu intelectuo. nao vejo diferença em puplicar um artigo cientifico de faculdade pois a maioria deles são mesmo de faculdade. o que importa é conteudo.
[11] Comentário enviado por ubuntuvitor em 17/09/2007 - 19:40h
Gente vamos com calma porque, o connhecimento se adquire com pequenas coisas, sei que o trabalho dos colegas esta superficial so que lembre-se sempre temos novos cadastro no site de pessoas que estão começando a programar. Por isso se ao é do seu interesse o material apenas agradeça a pessoa porque ele ao menos teve a boa vontade de ajudar.
" ninguem sabe tudo mas todos juntos sabem tudo"
Vitor Cloves
[12] Comentário enviado por vagnerpolles em 07/07/2009 - 11:50h
Acredito que todos os artigos na area de logica sao bem vindos, o processo de adquirir conhecimento e algo ciclico, comeca com pequenos passos.
Nos instigamos por algum assunto;
Aprendemos algo;
Aplicamos este conhecimento;
Temos novas interesses;
Nos instigamos por algo novo... e repetimos o processo inúmeras vezes.
Caro Joao Carlos, nao se deixe influenciar pelo negativismo e aprenda com todos os comentários.
O Sabio tem certeza apenas de uma coisa: Que ele nao sabe tudo!