Um algoritmo e uma sequencia finita de instrucoes bem definidas e nao ambiguas, cada uma das quais pode ser executada mecanicamente num periodo de tempo finito e com uma quantidade de esforco finita[1][2].O conceito de algoritmo e frequentemente ilustrado pelo exemplo de uma receita culinaria, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iteracoes) ou necessitar de decisoes (tais como comparacoes ou logica) ate que a tarefa seja completada. Um algoritmo corretamente executado nao ira resolver um problema se estiver implementado incorretamente ou se nao for apropriado ao problema.Um algoritmo nao representa, necessariamente, um programa de computador[3], e sim os passos necessarios para realizar uma tarefa. Sua implementacao pode ser feita por um computador, por outro tipo de automato ou mesmo por um ser humano. Diferentes algoritmos podem realizar a mesma tarefa usando um conjunto diferenciado de instrucoes em mais ou menos tempo, espaco ou esforco do que outros. Tal diferenca 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 voce vista primeiro as meias e os sapatos antes de vestir a calca enquanto outro algoritmo especifica que voce deve primeiro vestir a calca e depois as meias e os sapatos. Fica claro que o primeiro algoritmo e mais dificil de executar que o segundo apesar de ambos levarem ao mesmo resultado.O conceito de um algoritmo foi formalizado em 1936 pela Maquina de Turing de Alan Turing e pelo calculo lambda de Alonzo Church, que formaram as primeiras fundacoes da Ciencia da computacao.A palavra algoritmo tem origem no sobrenome, Al-Khwarizmi, do matematico persa do seculo IX Mohamed ben Musa[4], cujas obras foram traduzidas no ocidente cristao no seculo XII, tendo uma delas recebido o nome Algorithmi de numero indorum, sobre os algoritmos usando o sistema de numeracao decimal (indiano). Outros autores, entretanto, defendem a origem da palavra em Al-goreten (raiz - conceito que se pode aplicar aos calculos). Um programa de computador e essencialmente um algoritmo que diz ao computador os passos especificos e em que ordem eles devem ser executados, como por exemplo, os passos a serem tomados para calcular as notas que serao impressas nos boletins dos alunos de uma escola. Logo, o algoritmo pode ser considerado uma sequencia de operacoes que podem ser simuladas por uma maquina de Turing completa.Quando os procedimentos de um algoritmo envolvem o processamento de dados, a informacao e lida de uma fonte de entrada, processada e retornada sob novo valor apos processamento, o que geralmente e realizado com o auxilio de uma ou mais estrutura de dados.Para qualquer processo computacional, o algoritmo precisa estar rigorosamente definido, especificando a maneira que ele se comportara em todas as circunstancias. A corretividade do algoritmo pode ser provada matematicamente, bem como a quantidade assintotica de tempo e espaco (complexidade) necessarios para a sua execucao. Estes aspectos dos algoritmos sao alvo daanalise de algoritmos.A maneira mais simples de se pensar um algoritmo e por uma lista de procedimentos bem definida, na qual as instrucoes sao executadas passo a passo