Algoritmos

700 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
700
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Algoritmos

  1. 1. AlgoritmosHá certa controvérsia sobre como definir de maneira formal um algoritmo.Informalmente, podemos dizer que um algoritmo é uma sequência precisa,sistemática e finita de passos ou instruções para solução de algumproblema. Uma tentativa de formalização do termo teve início com atentativa de solução do problema Entscheidungs problem, ou o problema dadecisão, proposto por David Hilbert em 1928. O termo “algoritmo” tem suaorigem no cientista persa Muhammad ibn Musa al-Khwarizm.A latinização de seu nome deu origem ao termo algoritmo e algarismo nalíngua portuguesa. Suas principais contribuições incluem inovaçõesimportantes na matemática, em especial em álgebra e trigonometria.Um de seus mais importantes livros, “Sobre o Cálculo com NúmerosHindus”, do ano de 825, foi responsável pela disseminação do sistemahindu-arábico de numeração no Oriente Médio e na Europa.Um algoritmo é então um conjunto de ideias abstratas para solução de umproblema. Mais formalmente, podemos estabelecer que um algoritmo fosseuma sequência finita de instruções para resolver um problema, a qualpossui as seguintes propriedades:• Garantia de término: o problema a ser resolvido possui condiçõesespecíficas que, quando satisfeitas, a execução do algoritmo é encerrada e oproblema é então tido como “resolvido”.Além disso, estas condições devem ser satisfeitas após uma quantidadefinita de tempo, a ser contado a partir do início da execução do algoritmo;• Exatidão: a intenção de cada instrução no algoritmo deve sersuficientemente clara, deforma que não haja ambiguidade na interpretação da intenção.• Efetividade: cada instrução deve ser básica o suficiente para serexecutada, pelo menos em princípio, por qualquer agente usando apenaslápis e papel.Lidamos com algoritmos desde nossa infância em diversas situações.Por exemplo, aprendemos no ensino primário o algoritmo de Euclides paraobtenção do máximo divisor comum (MDC) entre dois números inteiros.Inicialmente, tomamos dois números inteiros a e b. Se b = 0 entãoo máximo divisor comum entre a e b é o número a. Caso contrário, omáximo divisor comum entre a e b é dado pelo máximo divisor comum deb e do resto da divisão de a por b.
  2. 2. O processo então se repete até que b seja igual a 0 (zero).Esquematicamente, podemos escrever a seguinte sequência de instruçõespara resolver o problema:PASSO 1 Chame o maior número de a e o menor de bPASSO 2 Divida a por b e chame o resto de rPASSO 3 Se r é igual a zero então o máximo divisor comum é igual a b e aexecução das instruções encerra aqui.Caso contrário, siga para a próxima instrução.PASSO 4 Atribua o valor de b a a e o valor de r a b.PASSO 5 Volte para o passo 2.É importante destacar que essa sequência de instruções sempre obtém umvalor r = 0 em algum dos passos e, portanto, sempre termina.Além disso, a sequência de instruções está correta, já que sempre produzuma resposta correta para um par de números inteiros fornecidoscomo entrada. Dessa forma, acabamos de descrever um algoritmo parasolução do problema do máximo divisor comum, o algoritmo de Euclides.Como era de se esperar, nem toda sequência de instruções para resolver umdeterminado problema pode ser considerada um algoritmo. Por exemplo, sea instrução “Divida x por y se todo número inteiro par maior que 2 é asoma de dois números primos” estiver presente na sequência, ela só poderáser executada se soubermos se a proposição “todo número inteiropar maior que 2 é a soma de dois números primos” é verdadeira ou falsa.Entretanto, esta proposição, conhecida como conjectura de Goldbach, foiproposta em 1742 e continua sem solução até hoje. Logo, nossa instruçãonão pode ser executada por qualquer agente hoje em dia e, portanto, nãopode fazer parte de um algoritmo.Outro exemplo de instrução que não pode fazer parte de um algoritmo é“Escreva todos os números ímpares”. Neste caso, temos uma instrução quenão pode ser executada porque a execução nunca terminará, apesar desabermos exatamente como determinar os números ímpares.Observe que se modificássemos a instrução para “Escreva todos osnúmeros ímpares menores do que 100”, ela poderia, perfeitamente, fazerparte de um algoritmo.Um problema para o qual existe uma solução na forma de algoritmo é ditoum problema algorítmico.O problema de encontrar o máximo divisor comum de dois númerosnaturais quaisquer é, portanto, um problema algorítmico.
  3. 3. Problemas algorítmicos, em geral, possuem muitas ocorrências. Porexemplo, para o problema de encontrar o máximo divisor comum de doisnúmeros naturais, cada ocorrência é uma dupla distinta de números naturaiscujo máximo divisor comum queremos encontrar.Um algoritmo é dito correto quando ele sempre termina e produz a respostacorreta para todas as ocorrências de um dado problema.Algoritmo, então, pode ser imaginado como a especificação de umprocesso “mecânico” que, quando executado, leva-nos à solução de algumproblema. Embora o termo algoritmo esteja relacionado intimamente comComputação, algoritmos tem sido parte de nossas vidas desde a primeiravez que uma pessoa explicou para outra como fazer alguma coisa. Aspessoas utilizam algoritmos quando seguem receitas culinárias ouinstruções para programar um tocador de músicas. Entretanto, nem todoalgoritmo pode ser executado por um computador.Um computador pode executar apenas aqueles algoritmos cujas instruçõesenvolvam tarefas que ele possa entender e executar. Este não é o caso, porexemplo, de instruções como “corte o filé em cubos” e “ligue o tocador demúsica”.Computadores executam algoritmos que manipulam apenas dados e nãocoisas físicas, tais como filé e tocador de música.A execução de um algoritmo por um computador é denominadaprocessamento de dados e consiste de três partes: uma entrada, umprocesso ou processamento e uma saída. A entrada é um conjunto deinformações que é requisitada para que as instruções do algoritmo possamser executadas. O processamento é a sequência de instruções que compõeo algoritmo. E a saída é o resultado obtido com a execução do processopara a entrada fornecida.Por exemplo, a entrada e a saída para uma computação do algoritmo para oproblema de encontrar o máximo divisor comum de dois números naturaissão, respectivamente, dois números naturais e o máximo divisor comumentre eles. Quando escrevemos algoritmos para serem executados porcomputador, temos de fazer algumas suposições sobre o modelo decomputação entrada–processamento–saída.A primeira delas é que, a fim de realizar qualquer computação, o algoritmodeve possuir um meio de obter os dados da entrada. Esta tarefa é conhecidacomo leitura da entrada.A segunda, é que o algoritmo deve possuir um meio de revelar o resultadoda computação. Isto é conhecido como escrita dos dados da saída. Todo equalquer computador possui dispositivos através dos quais a leitura e aescrita de dados são realizadas.
  4. 4. Algoritmos e resolução de problemasTodo algoritmo está relacionado com a solução de um determinadoproblema. Portanto, construir um algoritmo para um dado problemasignifica, antes de mais nada, encontrar uma solução para o problema edescrevê-la como uma sequência finita de ações.A tarefa de encontrar a solução de um problema qualquer é, em geral,realizada de forma empírica e um tanto quanto desorganizada; ocorremvários procedimentos mentais, dos quais raramente tomamosconhecimento.A capacidade para resolver problemas pode ser vista como uma habilidadea ser adquirida.Esta habilidade como qualquer outra, pode ser obtida pela combinação deduas partes:1. Conhecimento: adquirido pelo estudo. Em termos de resolução deproblemas, está relacionado a que táticas, estratégias e planos usar equando usar;2. Destreza: adquirida pela prática. A experiência no uso do conhecimentonos dá mais agilidade na resolução de problemas.Independente do problema a ser resolvido, ao desenvolvermos umalgoritmo devemos seguir os seguintes passos:• Análise preliminar: entender o problema com a maior precisão possível,identificando os dados e os resultados desejados;• Solução: desenvolver um algoritmo para o problema;• Teste de qualidade: executar o algoritmo desenvolvido com uma entradapara a qual o resultado seja conhecido;• Alteração: se o resultado do teste de qualidade não for satisfatório, altereo algoritmo e submeta-o a um novo teste de qualidade;• Produto final: algoritmo concluído e testado, pronto para ser aplicado.

×