Está en la página 1de 12

Estructuradedatos InstitutoTecnolgicodeOrizaba

UnidadIAnlisisdealgoritmos
Unodelosproblemasmsgrandesenlaprogramacindecomputadoras,es
disear algoritmos que permitan la ejecucin eficiente de los programas. Todo
algoritmo que se disea se puede analizar para determinar el rendimiento que
proporcionaalaejecucindeunprograma.
Este rendimiento estadadoporlosrecursos queutiliza(memoriaytiempo)
para su ejecucin, en esta unidad se trataran los aspectos de cmo analizar
algoritmos y que ayuden a determinar cual es el indicado para el problema que
deseamosresolver.

1.1ConceptodeComplejidaddealgoritmos.
El espacio que un algoritmo utiliza esta relacionada con la informacin
estructurada que se va a procesar y alguna otra informacin estructurada que
dar soporte a la ejecucin de los procesos computacionales que el algoritmo
requiere.
El tiempo que un algoritmo necesita para su ejecucin depende de la
estructuradelalgoritmo(operaciones). Estasalejecutarsepodrndarnoscomo
resultadountiempooptimo,untiempopromedioountiempopsimoconrespecto
aotrosalgoritmosqueresuelvenelmismoproblema.
El tiempo de ejecucin del algoritmo tambin depende de la cantidad y
organizacin de los datos a ser procesados; de acuerdo a esto, de un mismo
algoritmosepuedeobtenersurendimientoenelmejordeloscasos,enelpeorde
loscasosyencasospromedios.
Aspueslacomplejidaddeunalgoritmosedefinecomoeltiempoqueun
algoritmonecesitaparaejecutarsesobreunconjuntodedatos.
Alevaluardosomasalgoritmosnecesitamossabercualdeellostieneel
mejorrendimiento seacualfueralaformaenque losdatosestn organizados
considerandoelpeordeloscasos,comounparmetroesencial.
Como se observa los algoritmos estn relacionados con los datos que
tienenqueprocesaromanipular.Lasestructurasdedatosdesdeelpuntodevista
delaprogramacinorientadaaobjetossontiposdedatosabstractos(TDAs).
Lic.RafaelHerreraGarca PginaNo.1

Estructuradedatos InstitutoTecnolgicodeOrizaba
Untipodedatoabstractoesuntipodedatodefinidoporelprogramador,el
cualdefinelosdatosylasoperacionesquepermitirnmanipularlos.
Enunlenguajeorientadoaobjetosseutilizaunaclaseparadefiniruntipo
dedatoabstracto.
La intencin es construir estructuras de datos donde las operaciones
implementenalgoritmosqueseanlosmsptimos.
Una forma de medir el rendimiento de un algoritmo es implementarlo y
tomarlostiemposquesellevaenejecutarseconconjuntosdedatosdedistintos
tamaos,tomandoencuentaelmejordeloscasos,elpeordeloscasosyelcaso
promedio.
Suponerquetenemosunalgoritmopararecuperarlaposicindelaltima
ocurrenciadeunnmeroenunarreglo.
intUltimaOcurrencia(int[]x,intvalue){
inti,pos=1;
for(i=0;i<x.length;i++)
if(x[i]==value)
pos=i;
returnpos;
}
En Java se puede medir el tiempo de ejecucin con el mtodo
System.currentTimeMillis(),condistintostamaosdedatos,estemtodoretorna
eltiempodelsistemaenmilisegundos.Paracalculareltiempodeejecucindeun
algoritmodebemosobtenereltiempodelsistemaantesydespusdelaejecucin
deeste,paraobtenerladiferencia.
inta[];
intvalor;
:
longt1=System.currentTimeMillis();
intr=UltimaOcurrencia(a,valor);
longt2=System.currentTimeMillis();
intt=(int)(t2t1);

Lic.RafaelHerreraGarca PginaNo.2

Estructuradedatos InstitutoTecnolgicodeOrizaba
EJERCICIO:Elaborarprogramaquedeterminelostiemposqueelalgoritmo
sellevaalejecutarsecondatosdistribuidosaleatoriamente,hacerlapruebacon
arreglosde1000000,2000000,3000000,..,hasta10000000devalores,losvalores
permitidos en elarreglo debern ser entre 1 y 50000. Analizar lostiempos de
ejecucinquecadacasonosproporcionaygraficarlos.
CODIGOPARAGRAFICARDATOS
importjava.awt.*;
importjavax.swing.*;
publicclassGraficador{
//=====================================
staticintmaximo(intx[]){
intmax=x[0];
inti;
for(i=1;i<x.length;i++)
if(x[i]>max)
max=x[i];
returnmax;
}
//======================================
staticvoiddibuja(Graphicsg,int[]r,intmax){
g.setColor(Color.BLUE);
intlimite=300;
intproporcion=limite/(max==0?1:max);
g.drawLine(10,limite,(r.length+10)*20,limite);
g.drawLine(10,limite,10,0);
inti,x=10,y;
for(i=0;i<r.length1;i++){
g.setColor(Color.GREEN);
y=limiter[i]*proporcion;
g.drawRect(x1,y1,3,2);
g.setColor(Color.RED);
g.drawLine(x,y,x+20,limiter[i+1]*proporcion);
x=x+20;
}
g.setColor(Color.GREEN);
y=limiter[i]*proporcion;
g.drawRect(x1,y1,3,2);
}
//===========================================
staticvoidGrafica(finalintr[]){
finalintmax=maximo(r);
JPanelp=newJPanel(){
publicvoidpaint(Graphicsg){
dibuja(g,r,max);
}
};
JFramef=newJFrame("Grafica");
Containerc=f.getContentPane();
c.add(newJLabel("Yponetiquetaquedesees"),BorderLayout.NORTH);
c.add(newJLabel("Xponetiquetaquedesees"),BorderLayout.SOUTH);
c.add(p,BorderLayout.CENTER);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(550,400);
f.show();
}
//=================================================
publicstaticvoidmain(String[]args){
inta[]={4,60,80,100,78,34,34,23,12,0,23,43,89};
Grafica(a);
}
}

DESCRIPCION

Mtodo para obtener el valor mximo de


unarreglo.

Mtodo que dibuja en un componente


grfico los valores de un arreglo que
representanelejeY,cuyovalormayores
max. Se considera al eje X distribuido
uniformemente. El Eje Y tiene lmite de
300puntos.

Ciclo para dibujarlos puntos y las lneas


quelosunen.

Mtodo que se invoca desde una


aplicacin para hacer un polgono de
frecuencias con valores uniformes en eje
X.

Estofuncionasoloconversiones1.4.2de
JREomayores.

Ejemplo de arreglo que se utiliza en


invocacin.

Lic.RafaelHerreraGarca PginaNo.3

Estructuradedatos InstitutoTecnolgicodeOrizaba

Estaeslapantallaobtenidadelaejecucindelprograma.
Elsiguientemtodorealizalabsquedadelaltimaocurrenciadeunvalor
enunarreglodeunaformadistintaalanteriormtodo.
intUltimaOcurrencia2(int[]x,intvalue){
inti,p=1;
for(i=x.length1;i>=0;i)
if(x[i]==value){
p=i;
break;
}
returnp;
}

Lic.RafaelHerreraGarca PginaNo.4

Estructuradedatos InstitutoTecnolgicodeOrizaba
Asimplevistaparecieraqueesuncdigomsgrande,lointeresantees
evaluarlo con las misma condiciones que al mtodo anterior y determinar el
comportamientoquetieneconrespectoalcasoanterior.
1.2AritmticadelanotacinO.
Elestudioexperimentaldelosalgoritmostieneciertasdesventajas:
a) Losvaloressobrelosquesepruebaelalgoritmo,muchasdelasveces
sonciertoscasosquesonescogidosaleatoriamente.Locualpuedeno
incluirloscasosrealesconloscualesseutilizarelalgoritmo.
b) Esdifcilcompararlaeficienciadedosomsalgoritmossinquesus
ejecucionessellevenacaboenlosmismosambientesdehardwareo
software.
c) Esnecesarioimplementaryejecutarelalgoritmo,paraestudiardeforma
experimentalsustiemposderespuesta.
Existendiversostiposdecomplejidad:
La complejidad temporal es el tiempo que necesita un algoritmo para
ejecutarse.
La complejidad espacial es la cantidad de memoria que un algoritmo
consumeoutilizadurantesuejecucin.
Lacomplejidadcomputacionaldelosalgoritmosindicaelesfuerzoquehay
querealizarparaaplicarunalgoritmoylocostosoquesteresulta.
Lacomplejidadasintticaconsisteenelclculodelacomplejidadtemporal
apriorideunalgoritmoenfuncindeltamaodelproblema(n),prescindiendode
factoresconstantesmultiplicativosysuponiendovaloresdenmuygrandes.
Estaultimanosirveparaestablecereltiempoexactodeejecucin,sinoque
permite especificar una cota(inferior, superior o ambas) para el tiempo de
ejecucindeunalgoritmo.

Lic.RafaelHerreraGarca PginaNo.5

Estructuradedatos InstitutoTecnolgicodeOrizaba
Elenfoquetericooaprioripermite(complejidadasinttica):
a) Utilizarunadescripcindealtoniveldelalgoritmo(v.g.enpseudocdigo)
b) Determinar, matemticamente, la cantidad de recursos necesarios para
ejecutarelalgoritmo
c) Obtenerunafuncingenricaf(n)quepermitahacerprediccionessobrela
utilizacinderecursos,siendoneltamaodelproblema

Dadas las funciones f(n) y g(n), se dice que f(n) es O(g(n)) si existen
constantespositivascyn0talesque
f(n)cg(n)parann0

Podemosdecirque
f(n)eslafuncinquedeterminaeltiempodeejecucindeunalgoritmoen
elpeordeloscasos.
g(n)eslafuncinquedeterminaelorden(O)bigOhdelafuncinf(n).
cesunaconstanteentera>0.
n0esunaconstanteentera>=1

Considerarqueparaunafuncindelaforma:
f(n)=5n3siempreserO(n),yaqueesunafuncinlineal.
f(n)=4n2+2n5siempreseraO(n2),yaqueesunafuncincuadrtica

Lic.RafaelHerreraGarca PginaNo.6

Estructuradedatos InstitutoTecnolgicodeOrizaba
LasiguientetablamuestralasprincipalesbigOhqueencontramosenlos
algoritmos.

O(1)

Constante

Nodependedeltamao
delproblema

O(logn)

Logartmica

Bsquedabinaria

O(n)

Lineal

Bsquedalineal

O(nlogn) Casilineal

Quicksort

O(n2)

Cuadrtica

Algoritmodelaburbuja

O(n3)

Cbica

Productodematrices

O(nk)k>3

Polinmica

O(kn)k>1

Exponencial

O(n!)

Factorial

Algunosalgoritmosde
grafos

Eficiente

Tratable

Intratable

1.3Complejidad.
1.3.1Tiempodeejecucindeunalgoritmo.
Todoalgoritmosepuededescribirenterminodelasoperacionesquevaa
ejecutarycuantasvecesseejecutaranestas.Unaoperacincomputacionales
aquella que describe una operacin simple como las que se mencionan a
continuacin:
1.Asignacindeunvaloraunavariable(noexpresin)
2.Invocacinaunmtodo(call)
3.Ejecutarunaoperacinaritmtica,relacionalolgica.
4.Resolverelndicedeunarreglo(a[i])
5.Retornarunvalordeunmtodo.
Sitengoelmtodoquelocalizaelmayordeloselementosdeunarreglode
enteros:

Lic.RafaelHerreraGarca PginaNo.7

Estructuradedatos InstitutoTecnolgicodeOrizaba
METODO
intmayor(intx[]){
inti;
intmax=x[0];
for(i=1;i<x.length;i++)

if(x[i]>max)
max=x[i];
returnmax;
}

DESCRIPCION

2 Operaciones (asignacin e ndice que se


resuelve)
i=1 , es una operacin , i<x.length es otra
operacinyi++son2operaciones(incrementay
asigna)
x[i]>max,son2operaciones
Tambinaquexisten2operaciones
Esunasolaoperacin.

EJERCICIO:Delosmtodossiguientesdeterminadecuantasoperaciones
estncompuestos.

intPrimeraOcurrencia(intx[],intvalue){
inti,pos=1;

for(i=0;i<x.length;i++)
if(x[i]==value){
pos=i;
break;
}
returnpos;
}

intVecesRepite(intx[],intvalue){
inti,c=0;

for(i=0;i<x.length;i++)
if(x[i]==value)
c++;
returnpos;
}

Lic.RafaelHerreraGarca PginaNo.8

Estructuradedatos InstitutoTecnolgicodeOrizaba
intpromedio(intx[]){
inti,s=x[0];
for(i=1;i<x.length;i++)
s=s+x[i];
returns/x.length;
}
Para realizar un anlisis formal de un algoritmo necesitamos una
metodologa para llevar a cabo dicho anlisis, esta consiste en los siguientes
pasos:
1. Elabore el algoritmo en pseudocodigo (aproximacin a la
implementacin).
2.Determineparacadaoperacincomputacionaleltiempo(ti)necesario
paraejecutarla.
3. Determine para cada operacin el nmero de veces (ni) que dicha
operacinserejecutadacuandoelalgoritmoseaimplementado.
4.Sumelosproductos(ni ti)detodaslasoperaciones,elresultadoserel
tiempoqueelalgoritmonecesitaraparaejecutarse.
5.Siesnecesarioconsiderarelnmerodeveces(ni)quedichaoperacin
serejecutadaenelmejorypeordeloscasos.
Paraprobaresteanlisisvamosutilizarelmtodoquelocalizaalelemento
mayorenunarreglo.Considerarquetodaslasoperacionesseejecutanenuna
unidaddetiempo.
intmayor(intx[]){
inti;
intmax=x[0];
for(i=1;i<x.length;i++)
if(x[i]>max)
max=x[i];
returnmax;
}
Lic.RafaelHerreraGarca PginaNo.9

Estructuradedatos InstitutoTecnolgicodeOrizaba
Tomaremos primero el peor de los casos y que todas las operaciones
consumenelmismotiempo,considerandoelsiguientearreglo:

12

23

27

34

45

49

Comosepuedeobservar,endichoarreglo,elmayorestaalfinal,asque
analizaremoselalgoritmodelasiguienteforma:
OPERACIN
x[0]
max=x[0]
i=1
i<x.length
i++
x[i]
x[i]>max
x[i]
max=x[i]
returnmax

VECESQUESEREPITE
1
1
1
n
n1(2operaciones)
n1
n1
n1
n1
1

Elresultadosepuederepresentarmedianteunafuncinmatemtica,como
lasumadelasoperaciones.
1+1+1+n+6(n1)+1=
3+n+6(n1)+1=
3+n+6n6+1=
3+7n6+1=
7n+46=7n2
Tomaremosahora elmejordeloscasosyserconsiderado elsiguiente
arreglo:
49

45

34

27

13

11

Comosepuedeobservar,endichoarreglo,elmayorestaalprincipio,as
queanalizaremoselalgoritmodelasiguienteforma:

Lic.RafaelHerreraGarca PginaNo.10

Estructuradedatos InstitutoTecnolgicodeOrizaba
OPERACIN
x[0]
max=x[0]
i=1
i<x.length
i++
x[i]
x[i]>max
x[i]
max=x[i]
returnmax

VECESQUESEREPITE
1
1
1
n
n1(2operaciones)
n1
n1
0
0
1

1+1+1+n+4(n1)+1=
3+n+4(n1)+1=
3+n+4n4+1=
3+5n4+1=
5n+44=5n
As podemos decir que el algoritmo para obtener el valor mayor de un
arreglo,paraelpeordeloscasostieneuntiempode7n2yparaelmejordelos
casossutiempoesde5n.
Tomaremosa7n2comounafuncin(f(n))quedescribeeltiempoquese
ejecutaestealgoritmoenelpeordeloscasos.
Unavezobtenidalafuncinf(n)esfcildeterminarelordendelalgoritmo,
paraelcasodelalgoritmoqueobtieneelmayordeloselementosdeunarreglo
dadalafuncin:
7n2suordenesO(n)

EJERCICIOS:Diseaydeterminaelordendeunalgortimoformalmentede
lossiguientesproblemas.
a) Disear un algoritmo que de un arreglo obtenga un arreglo sin los
elementosqueserepitenenel,sitengo3,4,5,6,4,3,6,7,6,5,9,1elresultadoser
7,9,1

Lic.RafaelHerreraGarca PginaNo.11

Estructuradedatos InstitutoTecnolgicodeOrizaba
b)Disearunalgoritmoqueobtengaelnmerodevecesqueserepiteun
valorenelarreglo.
c) Disear un algoritmo que dado un arreglo bidimensional, retorne el
numerodevecesqueunnumeroparselocalizaenelarreglo.
d) Disearunalgoritmoquedadounarreglounidimensional,obtengapara
cadavalordelarreglocuantosvaloresenelarreglosonmultiplosdeel.Si
a=4,8,5,3,6,7,9,10,5,2elarregloresultanteserb=1,0,2,2,0,0,0,2,3
1.3.2Complejidadenespacio
Estetipodecomplejidadadiferenciadelatemporal,tienequeverconlos
recursos de memoria que se utilizan. Podemos decir que un algoritmo que no
utilizamemoriaadicionalsucomplejidadespacialesn.
Cuandounalgoritmoutilizaeldobledesumemoriasucomplejidadespacial
es2nyassucesivamente.
Analizar los algoritmos vistos anteriormente (complejidad temporal) para
determinarelespacioqueutilizan.
1.4Seleccindeunalgoritmo.
La eleccin del algortimo nunca debera afectar a la correccin de la
solucinnialaclaridad(evitaralgoritmosimcomprensibles).
Avecesseeligenalgoritmosaproximadosoheursticosporquelasolucin
correcta resulta inmanejable. No alcanzan la solucin ptima pero s a una
solucinaceptable.
Ejemplo:
a)Elproblemadelaraizcuadrada.
b)Elproblemadelagenteviajero
Unalgortimoesmseficientecuantomenoscomplejosea.Laeficienciase
midecomoyasemencionoanteriormenteentrminosdeconsumoderecursos
(temporalesyespaciales).
Lic.RafaelHerreraGarca PginaNo.12

También podría gustarte