Você está na página 1de 5

Algoritmo

Fonte: http://pt.wikipedia.org/wiki/Algoritmo Origem: Wikipdia, a enciclopdia livre. Ir para: navegao, pesquisa

Uma animao do algoritmo de ordenao quicksort de uma matriz de valores ao acaso. As barras vermelhas marcam o elemento pivot, no incio da animao, estando o elemento para o lado direito escolhido como o piv. Um algoritmo uma sequncia infinita de instrues bem definidas e no ambguas, cada uma das quais pode ser executada mecanicamente num perodo de tempo finito e com uma quantidade de esforo finita[1][2]. O conceito de algoritmo frequentemente ilustrado pelo exemplo de uma receita culinria, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iteraes) ou necessitar de decises (tais como comparaes ou lgica) at que a tarefa seja completada. Um algoritmo corretamente executado no ir resolver um problema se estiver implementado incorretamente ou se no for apropriado ao problema. Um algoritmo no representa, necessariamente, um programa de computador[3], e sim os passos necessrios para realizar uma tarefa. Sua implementao pode ser feita por um computador, por outro tipo de autmato ou mesmo por um ser humano. Diferentes algoritmos podem realizar a mesma tarefa usando um conjunto diferenciado de instrues em mais ou menos tempo, espao ou esforo do que outros. Tal diferena pode ser reflexo da complexidade computacional aplicada, que depende de estruturas de dados adequadas ao algoritmo. Por exemplo, um algoritmo para se vestir pode especificar que voc vista primeiro as meias e os sapatos antes de vestir a cala enquanto outro algoritmo especifica que voc deve primeiro vestir a cala e depois as meias e os sapatos. Fica claro que o primeiro algoritmo mais difcil de executar que o segundo apesar de ambos levarem ao mesmo resultado. O conceito de um algoritmo foi formalizado em 1936 pela Mquina de Turing de Alan Turing e pelo clculo lambda de Alonzo Church, que formaram as primeiras fundaes da Cincia da computao.

Etimologia
A palavra algoritmo tem origem no sobrenome, Al-Khwarizmi, do matemtico persa do sculo IX

Mohamed ben Musa[4], cujas obras foram traduzidas no ocidente cristo no sculo XII, tendo uma delas recebido o nome Algorithmi de numero indorum, sobre os algoritmos usando o sistema de numerao decimal (indiano). Outros autores, entretanto, defendem a origem da palavra em Algoreten (raiz - conceito que se pode aplicar aos clculos).[5]

Formalismo

Fluxograma, um exemplo de algoritmo imperativo. O estado em vermelho indica a entrada do algoritmo enquanto os estados em verde indicam as possveis sadas. Um programa de computador essencialmente um algoritmo que diz ao computador os passos especficos e em que ordem eles devem ser executados, como por exemplo, os passos a serem tomados para calcular as notas que sero impressas nos boletins dos alunos de uma escola. Logo, o algoritmo pode ser considerado uma sequncia de operaes que podem ser simuladas por uma mquina de Turing completa. Quando os procedimentos de um algoritmo envolvem o processamento de dados, a informao lida de uma fonte de entrada, processada e retornada sob novo valor aps processamento, o que geralmente realizado com o auxlio de uma ou mais estrutura de dados. Para qualquer processo computacional, o algoritmo precisa estar rigorosamente definido, especificando a maneira que ele se comportar em todas as circunstncias. A corretividade do algoritmo pode ser provada matematicamente, bem como a quantidade assinttica de tempo e espao (complexidade) necessrios para a sua execuo. Estes aspectos dos algoritmos so alvo da anlise de algoritmos. A maneira mais simples de se pensar um algoritmo por uma lista de procedimentos bem definida, na qual as instrues so executadas passo a passo a partir do comeo da lista, uma idia que pode ser facilmente visualizada atravs de um fluxograma. Tal formalizao adota as premissas da programao imperativa, que uma forma mecnica para visualizar e desenvolver um algoritmo. Concepes alternativas para algoritmos variam em programao funcional e programao lgica.

Trmino do algoritmo
Alguns autores restringem a definio de algoritmo para procedimentos que eventualmente terminam. Marvin Minsky constatou que se o tamanho de um procedimento no conhecido de antemo, tentar descobri-lo um problema indecidvel, j que o procedimento pode ser executado infinitamente, de forma que nunca se ter a resposta. Alan Turing provou em 1936 que no existe mquina de Turing para realizar tal anlise para todos os casos, logo no h algoritmo para realizar tal tarefa para todos os casos. Tal condio conhecida atualmente como problema da parada. Para algoritmos interminveis o sucesso no pode ser determinado pela interpretao da resposta e sim por condies impostas pelo prprio desenvolvedor do algoritmo durante sua execuo.

Implementao
A maioria dos algoritmos desenvolvida para ser implementada em um programa de computador. Apesar disso eles tambm podem ser implementados por outros modos tais como uma rede neural biolgica (tal como no crebro quando efetuamos operaes aritmticas) em circuitos eltricos ou at mesmo em dispositivos mecnicos. Para programas de computador existe uma grande variedade de linguagens de programao, cada uma com caractersticas especficas que podem facilitar a implementao de determinados algoritmos ou atender a propsitos mais gerais.

Anlise de algoritmos
Ver artigo principal: Anlise de algoritmos A anlise de algoritmos um ramo da cincia da computao que estuda as tcnicas de projeto de algoritmos e os algoritmos de forma abstrata, sem estarem implementados em uma linguagem de programao em particular ou implementadas de algum outro modo. Ela preocupa-se com os recursos necessrios para a execuo do algoritmo tais como o tempo de execuo e o espao de armazenamento de dados. Deve-se perceber que para um dado algoritmo pode-se ter diferentes quantidades de recursos alocados de acordo com os parmetros passados na entrada. Por exemplo, se definirmos que o fatorial de um nmero natural igual ao fatorial de seu antecessor multiplicado pelo prprio nmero, fica claro que a execuo de fatorial(10) consome mais tempo que a execuo de fatorial(5). Um meio de exibir um algoritmo a fim de analis-lo atravs da implementao por pseudocdigo em portugus estruturado. O exemplo a seguir um algoritmo em portugus estruturado que retorna (valor de sada) a soma de dois valores (tambm conhecidos como parmetros ou argumentos, valores de entrada) que so introduzidos na chamada da funo: Algoritmo "SomaDeDoisValores"; varivel: SOMA,A,B: inteiro; inicio Escreva("Digite um numero"); Leia(A); escreva("digite outro numero"); leia(B); SOMA A + B; escreva(SOMA); fim.

Classificao
Classificao por implementao
Pode-se classificar algoritmos pela maneira pelo qual foram implementados. Recursivo ou iterativo - um algoritmo recursivo possui a caracterstica de invocar a si mesmo repetidamente at que certa condio seja satisfeita e ele terminado, que um mtodo comum em programao funcional. Algoritmos iterativos usam estruturas de repetio tais como laos, ou ainda estruturas de dados adicionais tais como pilhas, para resolver problemas. Cada algoritmo recursivo possui um algoritmo iterativo equivalente e vice-versa, mas que pode ter mais ou menos complexidade em sua construo. Lgico - um algoritmo pode ser visto como uma deduo lgica controlada. O componente lgico expressa os axiomas usados na computao e o componente de controle determina a maneira como a deduo aplicada aos axiomas. Tal conceito base para a programao lgica. Serial ou paralelo - algoritmos so geralmente assumidos por serem executados instruo a instruo individualmente, como uma lista de execuo, o que constitui um algoritmo serial. Tal conceito base para a programao imperativa. Por outro lado existem algoritmos executados paralelamente, que levam em conta as arquiteturas de computadores com mais de um processador para executar mais de uma instruo ao mesmo tempo. Tais algoritmos dividem os problemas em subproblemas e o delegam a quantos processadores estiverem disponveis, agrupando no final o resultado dos subproblemas em um resultado final ao algoritmo. Tal conceito base para a programao paralela. De forma geral, algoritmos iterativos so paralelizveis; por outro lado existem algoritmos que no so paralelizveis, chamados ento problemas inerentemente seriais. Determinstico ou no-determinstico - algoritmos determinsticos resolvem o problema com uma deciso exata a cada passo enquanto algoritmos no-determinsticos resolvem o problema ao deduzir os melhores passos atravs de estimativas sob forma de heursticas. Exato ou aproximado - enquanto alguns algoritmos encontram uma resposta exata, algoritmos de aproximao procuram uma resposta prxima a verdadeira soluo, seja atravs de estratgia determinstica ou aleatria. Possuem aplicaes prticas sobretudo para problemas muito complexos, do qual uma resposta correta invivel devido sua complexidade computacional.

Classificao por paradigma


Pode-se classificar algoritmos pela metodologia ou paradigma de seu desenvolvimento, tais como: Diviso e conquista - algoritmos de diviso e conquista reduzem repetidamente o problema em sub-problemas, geralmente de forma recursiva, at que o sub-problema pequeno o suficiente para ser resolvido. Um exemplo prtico o algoritmo de ordenao merge sort. Uma variante dessa metodologia o decremento e conquista, que resolve um sub-problema e utiliza a soluo para resolver um problema maior. Um exemplo prtico o algoritmo para pesquisa binria. Programao dinmica - pode-se utilizar a programao dinmica para evitar o re-clculo de soluo j resolvidas anteriormente. Algoritmo ganancioso - um algoritmo ganancioso similar programao dinmica, mas difere na medida em que as solues dos sub-problemas no precisam ser conhecidas a cada passo, uma escolha gananciosa pode ser feita a cada momento com o que at ento parece ser mais adequado. Programao linear

Reduo - a reduo resolve o problema ao transform-lo em outro problema. chamado tambm transformao e conquista. Busca e enumerao - vrios problemas podem ser modelados atravs de grafos. Um algoritmo de explorao de grafo pode ser usado para caminhar pela estrutura e retornam informaes teis para a resoluo do problema. Esta categoria inclui algoritmos de busca e backtracking. Paradigma heurstico e probabilstico - algoritmos probabilsticos realizam escolhas aleatoriamente. Algoritmos genticos tentam encontrar a soluo atravs de ciclos de mutaes evolucionrias entre geraes de passos, tendendo para a soluo exata do problema. Algoritmos heursticos encontram uma soluo aproximada para o problema.

Classificao por campo de estudo


Cada campo da cincia possui seus prprios problemas e respectivos algoritmos adequados para resolv-los. Exemplos clssicos so algoritmos de busca, de ordenao, de anlise numrica, de teoria de grafos, de manipulao de cadeias de texto, de geometria computacional, de anlise combinatria, de aprendizagem de mquina, de criptografia, de compresso de dados e de interpretao de texto.

Classificao por complexidade


Ver artigo principal: Complexidade computacional Alguns algoritmos so executados em tempo linear, de acordo com a entrada, enquanto outros so executados em tempo exponencial ou at mesmo nunca terminam de serem executados. Alguns problemas possuem mltiplos algoritmos enquanto outros no possuem algoritmos para resoluo.

Referncias
1. Cruz, Adriano Joaquim de Oliveira (1 de janeiro de 1997). Algoritmos. Ncleo de Computao Eletrnica da Universidade Federal do Rio de Janeiro. Pgina visitada em 12 de janeiro de 2012. 2. Linder, Marcelo Santos. Programao para Computao. Universidade Federal do Vale de So Francisco. Pgina visitada em 12 de janeiro de 2012. 3. Introduo programao cientfica. Grupo de Estudos sobre Movimento Humano (20 de abril de 2011). Pgina visitada em 12 de janeiro de 2012. 4. Loureiro, Antnio Alfredo Ferreira (1 de janeiro de 2010). Anlise de complexidade. Departamento de Computao da Universidade Federal de Ouro Preto. Pgina visitada em 12 de janeiro de 2012. 5. TAVARES, P. de Campos; Algoritmo, in "Enciclopdia Verbo Luso-Brasileira da Cultura, Edio Sculo XXI", Volume II, Editorial Verbo, Braga, Janeiro de 1998 ISBN 972-221864-6.