Escolar Documentos
Profissional Documentos
Cultura Documentos
com/>
* Monograf�as </>
* Novos </New>
* Publique </participar.shtml>
* Ajuda </ayuda/ayuda.shtml>
/i/ /j/ - 1
/i/ /i/ - 1
*fim-enquanto*
/ /*
fim-para
elemento = vetor[j];
vetor[i+1] = vetor[i];
vetor[i+1] = elemento;
Voc� deve ter percebido que ao inv�s de usar tr�s linhas com uma
*declara��o*, um *condicional** *e um *incremento*, eu juntei todos num
s� *for**.* Mas por isso o algoritmo � bem simples e sempre parte do
princ�pio de que a sua linguagem � simples. Veja s� a implementa��o do
c�digo em Pascal e compare-a com a do pseudoc�digo:
elemento := vetor[j];
i := j-1;
vetor[i+1] := vetor[i];
i := i-1;
end;
vetor[i] := elemento;
end;
Linha por linha ela � exatamente igual! A �nica diferen�a � que o
pseudoc�digo � traduzido... Geralmente os pseudoc�digos s�o parecidos
sempre com essa base e suas implementa��es n�o s�o muito diferentes. E
vai ser sempre dessa maneira que eu vou representar os algoritmos
(usando pseudoc�digos e alguns traduzindo para C para mostrar
implementa��es)
Quando eu tive a minha primeira no��o do que s�o algoritmos (no dia 12
de julho de 2004, no *Curso de Programa��o** *da* **Olimp�ada Brasileira
de Inform�tica** *na* **UNICAMP*), confesso que fiquei decepcionado e
realmente n�o gostei. Eu j� programava em C e achei um saco o professor
escrevendo no quadro aqueles pseudoc�digos de problemas super simples,
perdendo tempo com isso ao inv�s de programar. Por�m, hoje percebo que
/algoritmos/ s�o muito mais legais (/e importantes/) do que eu pensava.
Claro que para somar dois inteiros n�o h� necessidade de escrever um
pseudoc�digo, mas algoritmos s�o representa��es essenciais para
problemas mais complexos e grandes aplica��es.
Acredito que voc� que j� leu os dois primeiros artigos j� deve saber,
mas n�o custa lembrar: *algoritmo � a rela��o entre entrada e sa�da do
programa, � o rascunho do programa, o projeto**.* E um projeto antes de
colocar a m�o na massa � indispens�vel. *Enquanto a implementa��o � a
fun��o dos pedreiros, o algoritmo � a fun��o dos engenheiros.* Se os
engenheiros n�o existissem, /acho/ que os pedreiros n�o iam conseguir
fazer as casas e os pr�dios que eles constroem hoje em dia!
Existe uma s�rie de algoritmos comuns que todo programador deve conhecer
(projetos prontos para muitas coisas complicadas que precisamos
implementar no dia-a-dia) e isso � o que vamos come�ar a estudar no
pr�ximo artigo.
4. Analise de algoritmo
* *
4. *fim-para*
5. *fim-para*
Se voc� j� entendeu por que cada passo � executado este n�mero de vezes,
pode pular essa parte (continuar a ler a partir da linha horizontal).
Linha 1
O loop *para* voltar� para si mesmo vezes, isso �, testar� novamente sua
condicional e incrementar� um. Por sempre testar um condicional, no
final ele ter� que testar novamente para dizer que j� passou de . Por
isso, ele ser� executado vezes, ao inv�s de simplesmente .
Linha 2
Este loop *para* ser� executado um n�mero de vezes vari�vel (), que ir�
de a . Portanto, ele ser� executado duas vezes (1 mais "o �ltimo
condicional") no primeiro loop de , tr�s (2 mais "o �ltimo condicional")
no segundo, e por a� vai. Com isso, ele ser� executado o n�mero de vezes
que equivale a soma de a , mais que s�o "os �ltimos condicionais".
Linha 3
Exatamente o mesmo n�mero que a *Linha 2*, mas sem "os �ltimos
condicionais" ().
Imprimir algo na tela pode demorar mais do que fazer uma opera��o, mas a
an�lise de algoritmos � uma coisa bem /r�stica/. Desprezamos todas as
constantes, com isso s� levando a s�rio a informa��o importante: neste
caso, apenas . Ent�o agora, vamos escrever o tempo de execu��o do
algoritmo, que � a soma dos tempos de execu��o para cada instru��o
executada.
/
Os par�nteses n�o s�o necess�rios, mas coloquei para ajudar na
visualiza��o separando o custo de cada instru��o.
/_
Sugest�o
* *
o
o
A nota��o :
A nota��o :
A nota��o :
A nota��o :
*
L�-se /"� min�sculo de g� de ene"/. Para quando h� apenas um *limite
assint�tico superior*, sem permitir que . Utiliza-se a nota��o para
denotar um limite superior que n�o � assintoticamente restrito.
, *se* /para qualquer constante/ , existe uma constante tal que para todo .
A nota��o :
, *se* /para qualquer constante/ , existe uma constante tal que para todo .
Podemos criar v�rias compara��es entre estas fun��es, mas isto n�o vem
ao caso. O importante � saber em que nota��o a nossa fun��o se encontra.
Com o tempo vamos compreendendo melhor essas f�rmulas (se voc� est�
boiando, n�o se assuste, eu tamb�m tive muita dificuldade com isso no
come�o).
Vamos ver em que nota��o ele pode se encaixar, sabendo que seria a
*ordem de crescimento* (parte importante) do nosso custo; no caso, .
*Inequa��o 1:*
*Inequa��o 2:*
(o menor valor de ) ; ; .
Bom... Nos pr�ximos artigos, veremos que um mesmo problema pode ter
v�rias solu��es diferentes com custos ainda mais diferentes! Por isso, �
importante sabermos analisar, mesmo que por cima, qual o algoritmo que �
mais eficiente.
*Tiago Madeira - **tmadeira[arroba]gmail.com*
<mailto:tmadeira[arroba]gmail.com>