Um algoritmo é uma sequência
finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser
executada mecanicamente num período de tempo finito e com uma quantidade de
esforço finita.
O conceito de algoritmo é
frequentemente ilustrado pelo exemplo de uma receita culinária, embora muitos
algoritmos sejam mais complexos. Eles podem repetir passos (fazer iterações) ou
necessitar de decisões (tais como comparações ou lógica) até que a tarefa seja
completada. Um algoritmo corretamente executado não irá resolver um problema se
estiver implementado incorretamente ou se não for apropriado ao problema.
Um algoritmo não representa,
necessariamente, um programa de computador, e sim os passos necessários para
realizar uma tarefa. Sua implementação pode ser feita por um computador, por
outro tipo de autômato ou mesmo por um ser humano. Diferentes algoritmos podem
realizar a mesma tarefa usando um conjunto diferenciado de instruções em mais
ou menos tempo, espaço ou esforço do que outros. Tal diferença 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
calça enquanto outro algoritmo especifica que você deve primeiro vestir a calça
e depois as meias e os sapatos. Fica claro que o primeiro algoritmo é mais
difícil de executar que o segundo apesar de ambos levarem ao mesmo resultado.
O conceito de um algoritmo foi
formalizado em 1936 pela Máquina de Turing de Alan Turing e pelo cálculo lambda
de Alonzo Church, que formaram as primeiras fundações da Ciência da computação.
Etimologia
Os historiadores da palavra
algoritmo encontraram a origem no sobrenome, Al-Khwarizmi, do matemático persa
do século IX Mohamed ben Musa, cujas obras foram traduzidas no ocidente cristão
no século XII, tendo uma delas recebido o nome Algorithmi de numero indorum,
sobre os algoritmos usando o sistema de numeração decimal (indiano). Outros
autores, entretanto, defendem a origem da palavra em Al-goreten (raiz -
conceito que se pode aplicar aos cálculos). Álgebra e algorismo também formam
formas corrompidas da palavra, pois as pessoas esqueciam as derivações
originais. O dicionário Vollständiges Mathematisches Lexicon (Leipzig, 1747)
refere a palavra "Algorithmus"; nesta designação está combinado as
noções de quatro cálculos aritméticos, nomeadamente a adição, multiplicação,
subtração e divisão. A frase "algorithmus infinitesimalis" foi na
altura utilizado para significar; "maneiras de calcular com quantidades
infinitésimas" (pequenas), uma invenção de Leibnitz. Também é conhecido no
meio financeiro, como "algos"
Formalismo
Fluxograma, um exemplo de algoritmo imperativo. O estado em
vermelho indica a entrada do algoritmo enquanto os estados
em verde indicam as possíveis saídas.
|
Um programa de computador é essencialmente um algoritmo que diz ao computador os passos específicos e em que ordem eles devem ser executados, como por exemplo, os passos a serem tomados para calcular as notas que serão impressas nos boletins dos alunos de uma escola. Logo, o algoritmo pode ser considerado uma sequência de operações que podem ser simuladas por uma máquina de Turing completa.
Quando os procedimentos de um
algoritmo envolvem o processamento de dados, a informação é lida de uma fonte
de entrada, processada e retornada sob novo valor após processamento, o que
geralmente é realizado com o auxílio 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 circunstâncias. A corretividade do
algoritmo pode ser provada matematicamente, bem como a quantidade assintótica
de tempo e espaço (complexidade) necessários para a sua execução. Estes
aspectos dos algoritmos são alvo da análise de algoritmos.
A maneira mais simples de se
pensar um algoritmo é por uma lista de procedimentos bem definida, na qual as
instruções são executadas passo a passo a partir do começo da lista, uma idéia
que pode ser facilmente visualizada através de um fluxograma. Tal formalização
adota as premissas da programação imperativa, que é uma forma mecânica para
visualizar e desenvolver um algoritmo. Concepções alternativas para algoritmos
variam em programação funcional e programação lógica.
Alguns autores restringem a
definição de algoritmo para procedimentos que eventualmente terminam. Marvin
Minsky constatou que se o tamanho de um procedimento não é conhecido de
antemão, tentar descobri-lo é um problema indecidível, já que o procedimento
pode ser executado infinitamente, de forma que nunca se terá a resposta. Alan
Turing provou em 1936 que não existe máquina de Turing para realizar tal
análise para todos os casos, logo não há algoritmo para realizar tal tarefa
para todos os casos. Tal condição é conhecida atualmente como problema da
parada.
Para algoritmos intermináveis o
sucesso não pode ser determinado pela interpretação da resposta e sim por
condições impostas pelo próprio desenvolvedor do algoritmo durante sua
execução.
IMPLEMENTAÇÃO
A maioria dos algoritmos é
desenvolvida para ser implementada em um programa de computador. Apesar disso
eles também podem ser implementados por outros modos tais como uma rede neural
biológica (tal como no cérebro quando efetuamos operações aritméticas) em
circuitos elétricos ou até mesmo em dispositivos mecânicos.
Para programas de computador
existe uma grande variedade de linguagens de programação, cada uma com
características específicas que podem facilitar a implementação de determinados
algoritmos ou atender a propósitos mais gerais.
ANÁLISE DE ALGORITMOS
A análise de algoritmos é um
ramo da ciência da computação que estuda as técnicas de projeto de algoritmos e
os algoritmos de forma abstrata, sem estarem implementados em uma linguagem de
programação em particular ou implementadas de algum outro modo. Ela preocupa-se
com os recursos necessários para a execução do algoritmo tais como o tempo de
execução e o espaço de armazenamento de dados. Deve-se perceber que para um
dado algoritmo pode-se ter diferentes quantidades de recursos alocados de
acordo com os parâmetros passados na entrada. Por exemplo, se definirmos que o
fatorial de um número natural é igual ao fatorial de seu antecessor
multiplicado pelo próprio número, fica claro que a execução de fatorial consome
mais tempo que a execução de fatorial.
Um meio de exibir um algoritmo a
fim de analisá-lo é através da implementação por pseudocódigo em português
estruturado. O exemplo a seguir é um algoritmo em português estruturado que
retorna (valor de saída) a soma de dois valores (também conhecidos como parâmetros
ou argumentos, valores de entrada) que são introduzidos na chamada da função:
Algoritmo
"SomaDeDoisValores";
variável:
SOMA,A,B:
inteiro;
inicio
Escreva("Digite
um numero");
Leia(A);
escreva("digite
outro numero");
leia(B);
SOMA
← A + B;
escreva(SOMA);
fim.
Sequência: "Classificação dos Algoritmos".
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.