Professional Documents
Culture Documents
Formalismo
T�rmino do algoritmo
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.
Exemplos
Imagem da torre de Han�i (com tr�s discos), mostrando como estariam as pe�as no
in�cio e no fim da solu��o.
Alguns exemplos gen�ricos de algoritmos s�o: uma coreografia, um manual de
instru��es, uma receita culin�ria, T�cnicas para resolver problemas matem�ticos,
uma pesquisa na internet, dentre outros.
Torre de Han�i
Um cl�ssico problema que trabalha o desenvolvimento da l�gica e do racioc�nio
matem�tico � a torre de Han�i, inventado pelo matem�tico franc�s �douard Lucas em
1883.[7] O quebra-cabe�a � composto por tr�s hastes e v�rios discos de tamanhos
diferentes, que podem deslizar para qualquer haste. O quebra-cabe�a come�a com os
discos em uma pilha organizada em ordem crescente de tamanho em uma haste, a menor
no topo, fazendo assim uma forma c�nica.
Neste exemplo, toma-se o seguinte problema: tem-se tr�s hastes. Umas das hastes
serve de suporte para tr�s discos. Deseja-se mover todos os discos para outra
haste, por�m deve-se movimentar um disco de cada vez e um disco maior nunca pode
ser colocado sobre um disco de menor tamanho.
An�lise de algoritmos
Ver artigo principal: 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(10) consome mais tempo que a execu��o de fatorial(5).
Classifica��o
Classifica��o por implementa��o
Pode-se classificar algoritmos pela maneira pelo qual foram implementados.
Implementa��o
Algoritmos podem ser implementados em circuitos el�tricos ou at� mesmo em
dispositivos mec�nicos (aut�matos).Mania dos inventores do s�culo XIX, os aut�matos
eram m�quinas totalmente mec�nicas, constru�das com a capacidade de serem
programadas para realizar um conjunto de atividades aut�nomas. Em 2011, o filme A
Inven��o de Hugo Cabret(tradu��o brasileira) do cineasta Martin Scorsese traz a
hist�ria do ilusionista Georges M�li�s precursor do cinema e um colecionador de
aut�matos, sendo uma de suas m�quinas o fio condutor desta hist�ria. O aut�mato
espec�fico era capaz de desenhar a cena emblem�tica do seu filme "Viagem � Lua".
Programa de Computador
Ada Lovelace escreveu o primeiro algoritmo para ser processado por uma m�quina, a
m�quina anal�tica de Charles Babbage. Um programa de computador � essencialmente um
algoritmo que diz ao computador os passos espec�ficos e em que ordem eles devem ser
executados.Usando o Pseudoc�digo (uma linguagem simples, nativa a quem o escreve,
de forma a ser entendida por qualquer pessoa) que � uma forma gen�rica de escrever
o algoritmo, sem necessidade de conhecer a sintaxe de nenhuma linguagem de
programa��o. Um exemplo de pseudoc�digo � o Portugol, que utiliza o compilador
VisuALG[8]. O VisuAlg � um programa que edita, interpreta e executa algoritmos com
uma linguagem pr�xima do portugu�sestruturado como um programa normal de
computador. � um programa de livre uso e distribui��o, empregado no ensino de
programa��o em v�rias escolas e universidades no Brasil e no exterior. 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 um conjunto de
instru��es e estrutura de dados.Um exemplo, ?para ser feito nas escolas � fazer os
passos a serem tomados para calcular as notas que ser�o impressas nos boletins dos
alunos de uma escola, informando se o anulo foi aprovado ou reprovado.
Exemplo:
// Se��o de Declara��es
var
inicio
// Se��o de Comandos
LEIA(NOTA1)
LEIA(NOTA2)
LEIA(NOTA3)
LEIA(NOTA4)
FIMSE
FIMSE
fimalgoritmo
Tradutor e Interpretador
Ao receber uma bicicleta no natal Carlinhos precisa ler o manual de instru��es e
seguir passo a passo as tarefas descritas no documento para poder se divertir com
seu presente. Podemos dizer que Carlinhos � um interpretador dos comandos
fornecidos pelo manual de instru��es. Entretanto seu pai encontrou uma promo��o na
internet e comprou um produto fabricado na Fran�a e o menino ao se deparar com o
manual percebeu que o mesmo n�o poderia ser �interpretado� j� que n�o sabia ler em
franc�s. Para resolver o problema seu pai contratou um tradutor de franc�s para
portugu�s, assim, este novo manual p�de ser �interpretado� por Carlinhos e enfim
sua bicicleta seria montada.
Tradutores
Os tradutores podem ser divididos em dois grupos, dependendo da rela��o existente
entre a linguagem fonte e a linguagem alvo. Quando a linguagem fonte for
essencialmente uma representa��o simb�lica para uma linguagem de m�quina num�rica,
o tradutor � chamado de montador e a linguagem fonte � chamada de linguagem de
montagem. Quando a linguagem fonte for uma linguagem de alto n�vel, como � o caso
do Pascal ou do C, e a linguagem alvo for uma linguagem de m�quina num�rica ou uma
representa��o simb�lica desta linguagem (linguagem de montagem), o tradutor �
chamado de compilador.
Processo de Compila��o
Diferente do processo de montagem de um programa em linguagem de montagem para um
programa em linguagem de m�quina, que � bastante simples, pois existe um mapeamento
direto de um para um entre os comandos em linguagem de montagem e os equivalentes
em c�digo bin�rio, o processo de compila��o de linguagens � muito mais complexo.
Passos da compila��o
Considere o comando simples abaixo:
A = B + 4;
O compilador tem que resolver um n�mero grande de tarefas na convers�o deste
comando em um ou mais comandos em linguagem de montagem:
Comando de atribui��o.
Processo de Montagem
O processo de traduzir um programa em linguagem de montagem para programa em
linguagem de m�quina � chamado de processo de montagem. Este processo � muito
simples, uma vez que existe um mapeamento um para um de comandos em linguagem de
montagem para seus correspondentes em linguagem de m�quina. Isto � o contr�rio da
compila��o, onde um comando em linguagem de alto n�vel pode ser traduzido em v�rios
comandos em linguagem de m�quina.
Nessas condi��es, por que algu�m escolheria programar em uma linguagem de montagem?
Existem duas raz�es que justificam esta op��o: performance e acesso aos recursos da
m�quina. Um expert na linguagem de montagem pode produzir um c�digo menor e muito
mais eficiente do que o gerado por um programador usando linguagem de alto n�vel.
Em segundo lugar, certos procedimentos precisam ter acesso total ao hardware. Por
exemplo, se a m�quina alvo tiver um bit para expressar o overflow de opera��es
aritm�ticas, um programa em linguagem de montagem pode testar diretamente este bit,
coisa que um programa em Java n�o pode fazer. Al�m disso, um programa em linguagem
de montagem pode executar qualquer uma das instru��es do conjunto de instru��es da
m�quina alvo.
Tarefas do montador
Embora a montagem seja um processo simples, � tedioso e pass�vel de erros quando
feito manualmente. Montadores comerciais t�m ao menos as seguintes caracter�sticas:
Os endere�os dos itens de dados e instru��es s�o determinados por meio do uso de um
contador de programa para a montagem, chamado contador de localiza��o. O contador
de localiza��o gerencia o endere�o da instru��o executada e dos itens de dados
durante a montagem, que geralmente � inicializada com 0 (zero). No in�cio do
primeiro passo, � incrementado de acordo com o tamanho de cada instru��o.
A raz�o principal para exigir uma segunda passagem � permitir que s�mbolos sejam
usados no programa antes de serem definidos. Ap�s a primeira passagem, o montador
ter� identificado todos os s�mbolos e os colocado na Tabela de S�mbolos, j� durante
a segunda passagem, gerar� c�digo de m�quina, inserindo os identificadores dos
s�mbolos que agora s�o conhecidos.
Liga��o e Carregamento
A maioria dos programas � composto de mais de um procedimento. Os compiladores e os
montadores geralmente traduzem um procedimento de cada vez, colocando a sa�da da
tradu��o em disco. Antes que o programa possa rodar, todos os seus procedimentos
precisam ser localizados e ligados uns aos outros de maneira a formarem um �nico
c�digo.
Liga��o
A fun��o do ligador � coletar procedimentos traduzidos separadamente e lig�-los uns
aos outros para que eles possam executar como uma unidade chamada programa bin�rio
execut�vel.
Carregamento
O carregador � um programa que coloca um m�dulo de carregamento na mem�ria
principal. Conceitualmente, a tarefa do carregador n�o � dif�cil. Ele deve carregar
os v�rios segmentos de mem�ria com seus valores corretos e inicializar certos
registradores, tais como o apontador para pilha do sistema, respons�vel pelo escopo
das rotinas que estar�o em execu��o e o contador de instru��es contido no
processador, com seus valores iniciais, indicando assim onde o programa deve ser
iniciado.
Interpretadores
O software interpretador � um programa de computador que executa instru��es
escritas em uma linguagem de programa��o. Por exemplo, as linguagens Basic, Prolog,
Python e Java, s�o frequentemente interpretados. Um interpretador geralmente usa
uma das seguintes estrat�gias para a execu��o do programa: executar o c�digo fonte
diretamente ou traduzir o c�digo fonte em alguma eficiente representa��o
intermedi�ria e depois executar este c�digo.
Para isso, certos tipos de tradutores transformam uma linguagem fonte em uma
linguagem simplificada, chamada de c�digo intermedi�rio, que pode ser diretamente
�executado� por um programa chamado interpretador. N�s podemos imaginar o c�digo
intermedi�rio como uma linguagem de m�quina de um computador abstrato projetado
para executar o c�digo fonte.
Ver tamb�m