Está en la página 1de 21

UPG FCM Formalismo, Abstraccin y complejidad 2012

Augusto Cortez Vsquez Pag. 1/21



GUIA I Formalismo, abstraccin y
complejidad

Tres clases hay de ignorancia: no saber lo que debiera
saberse, saber mal lo que se sabe, y saber lo que no
debiera saberse.

Faccois de la Rochefoucald
(1613-1680) Escritor francs



Donald Ervin Knuth Nacido el 10 de enero de
1938, es uno de los ms renombrados cientficos
de la computacin, profesor emerito de la
Universidad de Stanford. Es conocido como
autor de mltiples volmenes: El arte de la
programacin de computadoras, considerado
como una referencia en el rea de ciencias de la
computacin, prcticamente fue el creador del
anlisis de algoritmos y contribuyo
significativamente a varias ramas de teora de
las ciencias de la computacin






Objetivos de aprendizaje

1. Conocer las tcnicas de formalizacin de algoritmos
2. Especificar e implementar algoritmos
3. Evaluar la eficiencia de los algoritmos



Introduccin

Antes de planear el programa, debe realizarse una revisin de la necesidad para la
existencia del programa y definirse de alguna forma los objetivos que desean
lograrse a travs del programa (requerimientos). El proceso de plantacin de un
programa tiene como finalidad lograr el diseo de un programa que cumpla con los
requerimientos. Generalmente es conveniente disear primero la estructura general
del programa y trabajar luego la lgica detallada.

UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 2/21
La plantacin de un programa es semejante a la planeacin de un edificio o una
casa. Primero, se realiza un diagrama general en el que se muestran las diferentes
habitaciones (las diferentes funciones que debern realizarse), y la relacin entre
ellos. A continuacin se realiza el diseo detallado de cada habitacin. De manera
similar es necesario que exista una estructura general para el programa de
computadora.


PROGRAMAS Y CODI GOS

La especificacin de un problema
Programar una solucin no solo es codificar el programa, sino hallar una solucin
(algoritmo), especificar la solucin y luego implementar la solucin. Especificar
consiste en esencia, responder a la pregunta que hace el programa?, no interesa los
detalles de cmo sera el programa. [6]



La implementacin de un problema

Despus de que la especificacin ha sido realizada, el siguiente paso consiste en
responder cmo se consigue la funcin pretendida?, a este paso se le denomina
implementacin [6]




UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 3/21
La especificacin de un algoritmo tiene un doble destinatario:
Los usuarios del algoritmo.- La especificacin debe incluir todo lo necesario
para el uso correcto de los programas, as como las obligaciones del usuario
cuando invoque al algoritmo
El implementador del algoritmo(programador) .- La especificacin debe incluir
las restricciones que el implementador debe considerar en el programa.

Una solucin mal especificada producir un programa que no satisface el requerimiento
del problema planteado.

Consideremos un lenguaje hipottico como un conjunto que contiene:

1 Todos los operadores aritmticos y funciones de biblioteca
2 Bloques de sentencias que comienzan con una llave { y termina con un }.
3 La estructura de decisin Si..Entonces.. Fin_si
La estructura repetitiva Mientras hacer .. Fin_Hacer

Los programas en este lenguaje trabajan con estados de programas y estos estados
se modifican por accin de las partes del cdigo. Las partes del cdigo son
funciones que proyecta el estado inicial, que es el estado al comienzo, sobre el
estado final, que es el estado al finalizar la parte del cdigo. Para convertirse en
una funcin, las sentencias que comprenden la parte de un cdigo deben ser
independientes.

Varias partes del cdigo pueden estar concatenadas, lo que significa simplemente
que se ejecutan secuencialmente.

ASERCI ON

Una asercin es cualquier sentencia referente a un estado del programa, y se
denota como {A}

Si P es una parte de un cdigo, entonces:

Una precondicin de P, es cualquier asercin {A} que solo implica el estado
inicial.

Una postcondicin de P, es cualquier asercin {B} que solo implica el estado
final.
Si P tiene como precondicin a {A} y postcondicin a {B}, escribimos la terna :
{A} P {B} , llamada la terna de Hoare.

Ejemplo 1
Considere el cdigo:
{A} x = x+y,y=x-y,x=x-y {B}

{A} es la precondicion
UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 4/21
{B} es la postcondicion

es obvio que x, y son modificados por el codigo.
Supongamos que B: { x = X; y = Y} resultados de x , y despues de ejecutar el
codigo.
Puede verse que el codigo realiza el intercambio de los valores de x , y, es decir
X= x ; Y = y.

Ejemplo 2

Considere el cdigo:
a := 1/b precondicin {b 0}
postcondicin {a = 1/b}

terna de Hoare : {b 0}a:=1/b {a = 1/b}

Ejemplo 3
Queremos especificar un algoritmo que verifique si en una matriz existen dos
columnas con igual suma de sus elementos

Definimos TIPO MAT = MATRIZ [1..MAX, 1..MAX] de enteros

A : { 1s M,N s MAX , M=N, es decir A es cuadrada}
P : FUN VERIFCACOLU(A:MAT, M,N:entero) DEV (b : booleano)

B : { b ~ - p, q e {1..n} tal que
}



Ejemplo 3
Queremos especificar un algoritmo que halla la recta L que pase por dos
puntos P y Q

Sea el tipo struct punto{ x: real,
y: real}

Sea el tipo struct recta{ m: real,
b: real}

Sea P = (X
1
,Y
1
) Q = (X
2
,Y
2
) La recta L se define y = m x + b
Donde m es La pendiente de L

A : { P,Q son de tipo punto , P =Q}
P : FUN HallarRecta(P,Q: punto) DEV (L : recta)
B : { L : m= (Y
2
-Y
1
)/( X
2
-X
1
) b = Y
1
- m X
1
}


M M
E A[i ,p] = E A[j ,q]
i=1 j=1

UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 5/21

Ejemplo 4
Se quiere especificar un algoritmo para ordenar en forma ascendente la fila K de la
matriz A de orden MxN.


Definimos TIPO MAT = MATRIZ [1..MAX, 1..MAX] de enteros
A : { 1s M,N s MAX , 1s K s M }
P : FUN ORDENARFILA(A:MAT, M,N:entero, K : ENTERO) DEV (a:
MAT)
B : { i e {1..N-1} , A[K , i] s A[K , i+1]


Como la fila K es fija, podemos considerarla como si fuera un vector.
Entonces nos encargaremos de ordenar el vector. Para ello fijamos K y
comparamos el elemento A[K , i] con A[K , i+1]

Ejemplo 5
Un nmero natural es GUAY si es igual a la suma de cierto nmero de naturales
consecutivos comenzando con 1. Los tres primeros nmeros GUAY son 1, 3=
1+2, 6=1+2+3. Especificar una funcin que dado un natural n, decida si es o no
un numero GUAY.

DEBI LI TAMI ENTO DE POSTCONDI CI ONES

REGLAS DE LAS PRECONDI CI ONES Y POSTCONDI CI ONES

- Si A y B son aserciones y A B, entonces se dice que A es mas fuerte que
B.

- Si A es mas fuerte que B, entonces se dice que B es mas dbil que A


REFORZAMI ENTO DE PRECONDI CI ONES

Si una parte de un cdigo P es correcta bajo una precondicin {A}, entonces
permanece correcta si se refuerza{A}.


Si {A}P {B}es correcto. Y se demuestra que
A
1
A , entonces, {A
1
}P {B}es correcto,

es decir
A
1
A
{A}P {B}

{A
1
}P {B}
UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 6/21


El programa P que tenga la precondicion mas debil es el programa mas
general.

Ejemplo 6

{x0} y:=1/x {y=1/x}
x = 5 x 0
{x=5} y:=1/x {y=1/x}

{x > 0} y := raz(x) {x = y
2
}
x > 1 x > 0
{ x > 1} y := raz(x) {x = y
2
}

{x<5} x:= x -1 {x <4}
x = 4 x < 5
{x=4} x:=x - 1 {y<4}

Ejemplo 7
Queremos especificar un algoritmo que calcule el cociente por defecto y el resto
de la division entera de dos enteros

A : { b = 0 }
P : FUN DIVIDE (a,b : entero) DEV (q,r:entero)
B : { a =b*q + r }
Una implementacion de divide puede ser

P : q = 0 ; r = a ,pues satisface la postcondicion B
Sin embargo eso no es lo que se pretende implementar

Reforzamos la precondicion
A : {a > 0 , b = 0 }
P : FUN DIVIDE (a,b : entero) DEV (q,r:entero)
B : { a = b*q + r . r > 0 . r < b}
Solo existen dos enteros a, b que satisfacen {B}

Ejemplo 8

Queremos especificar un algoritmo que calcule el valor mximo en un vector de
enteros tipo VECT
Definimos TIPO VEC = VECTOR [1..100] de enteros

A : { n > 1 . n s 100 }
P : FUN MAXIMO (V : VEC) DEV (x:entero)
UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 7/21
B : { o e {1..n} . x > V(o) }

B resulta muy debil y aceptaria una implementacion
P : x = K donde K > maximo{V(o)}
Pero no calcula realmente el maximo de V[1..100]

Reforzamos la precondicion

B :{ o e {1..n} . x > V(o)}.{ - | e {1..n} . x = V(|)}

DEBI LI TAMI ENTO DE POSTCONDI CI ONES

Si una parte de un cdigo P es correcta bajo una postcondicin {B}, entonces
permanece correcta si se debilita {B}.


Si {A}P {B}es correcto. Y se demuestra que
B B
1
, entonces, {A}P {B
1
}es correcto
Es decir
{A}P {B}
B B
1

{A}P {B
1
}


Si el estado final de P saatisface B, siempre que el estado inicial satisface
A, y ademas B B
1
, entonces el estado final de P debe satisfacer
tambien B
1
.

Ejemplo 9

Consideremos los ssiguientes ejemplos

{} mayor = a {mayor =a}
(mayor = a) (mayor > a)
{} mayor = a {mayor > a}


{x>6} y= x+2 {x>6 ,y>8}
{y>8} {x>6} {y>8}
{x>6} y= x+2 {y>8}



REGLA DE CONJ UNCI ON
UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 8/21

Si P es un cdigo, y {A
1
}P {B
1
}y {A
2
}P {B
2
}son correctos, se
puede afirmar que {A
1
A
2
}P {B
1
B
2
}tambien lo es. Es decir

{A
1
}P {B
1
}
{A
2
}P {B
2
}

{A
1
A
2
}P {B
1
B
2
}.


Ejemplo 10

premisa {}a:=a+2 {a
f
:=a
i
+2}
premisa {a
i
>0}a:=a+2 {a
i
>0}

conclusion {a
i
>0}a:=a+2 {(a
i
>0)( a
f
:=a
i
+2)}

a
i
: estado actual a
f
: estado final

podemos verificar que la postcondicion se debilita, produciendo una
nueva postcondicion

1 ( a
i
>0) ( a
f
:=a
i
+2) postcondicion
2 ( a
i
>0) ( a
i
:=a
f
-2) aritmetica
3 (a
f
-2 >0) ( a
i
:=a
f
-2) reemplazo
4 ( a
f
-2 >0) simplificacion
5 ( a
f
>2)

el debilitamiento de la postcondicion produce que:
conclusion {a
i
>0}a:=a+2 {a
i
>0}

COMPLEJ I DAD ALGORI TMI CA

TIEMPO DE EJECUCIN DE UN PROGRAMA

Objetivos que se persiguen al elegir un algoritmo.

O
1
Que el algoritmo sea fcil de entender, codificar y depurar.
O
2
Que el algoritmo use eficientemente los recursos del computador y en especial que se
ejecute con la mayor rapidez posible.


CONSIDERACIONES:

UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 9/21
Si el programa se va a usar pocas veces o una vez O
1
es el mas importante. En tal
caso el costo de tiempo de programacin puede exceder en mucho al costo del tiempo
de ejecucin del programa.

Cuando el programa se ve a usar muchas veces el costo de ejecucin del programa
puede superar en mucho al de escritura, en especial si en la mayor parte de las
ejecuciones se dan entradas de gran tamao. En este caso es ms ventajoso desde el
punto de vista econmico, realizar un algoritmo complejo siempre que el tiempo de
ejecucin del programa resultante sea significativamente menor que el de un
programa mas evidente

FACTORES DEL CUAL DEPENDEN EL TIEMPO DE EJECUCIN DE UN PROGRAMA

1. Los datos de entrada al programa
2. Calidad del cdigo generado por el computador utilizado para crear el programa objeto
3. La naturaleza y rapidez de las instrucciones de mquina empleadas en la ejecucin del
programa.
4. La complejidad del tiempo del algoritmo.

ASPECTOS IMPORTANTES :

1. Si un programa se va a utilizar solo algunas veces, el costo de escritura y depuracin
es dominante, de manera que el tiempo de ejecucin raramente influir en el costo
total. En este caso debe elegirse el algoritmo que sea mas fcil de aplicar
correctamente.

2. Si un programa se va a ejecutar solo con entradas pequeas la velocidad de
crecimiento del tiempo de ejecucin puede ser menos importante que el factor
constante de la formula de ejecucin.

3. Un algoritmo eficiente pero complicado puede no ser apropiado porque posteriormente
puede tener que darle mantenimiento otra persona distinta del escritor.

4. Debe considerarse la posibilidad de que un programa resulte intil debido a que nadie
entienda sus sutiles y eficientes algoritmos.

5. Existen ejemplos de algoritmo eficientes que ocupan demasiado espacio para ser
aplicados sin almacenamiento secundario lenta, lo cual anula la eficiencia.

6. En algoritmos numricos, la precisin y estabilidad son tan importantes como la
eficiencia.

Evaluacin de Algoritmos
* Elementos a ser tomados en cuenta:
-Eficacia (fin que se busca).
-Eficiencia (tiempo y espacio).
* Eficiencia: Determina la cantidad de recursos computacionales
consumidos por el algoritmo. El tiempo y el espacio utilizados en dicha
solucin miden la mayor o menor eficiencia de un algoritmo.

* Para la evaluacin de algoritmos se toma en cuenta:
- La eficiencia en cuanto al uso de recursos de computacin.
-La calidad de la solucin obtenida.
UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 10/21

Parmetros de la Eficiencia
* Por lo que solo se tomara en cuenta el evaluar a los algoritmos por
eficiencia:
- Tasa de crecimiento en tiempo
-Tasa de crecimiento en espacio

* Tiempo de ejecucin: Tiene que ver con el tiempo que tarda un
programa para ejecutarse (tiempo de procesamiento).

* Espacio de memoria: Estudia la cantidad de espacio que es necesario
para las operaciones durante la ejecucin del programa (espacio de
almacenamiento).

Relacin entre la Estructura de Datos y el Algoritmo
* La relacin determina un anlisis cuantitativo.
*El tipo de estructura de datos elegida es dependiente de:
- Tipo de datos que administra el algoritmo.
-Operaciones que se realizan sobre dicha estructura
-El compromiso espacio de almacenamiento - tiempo de procesamiento que se desea
obtener.
Criterios para definir la complejidad

-Criterio de Costo Uniforme: Cada instruccin de la maquina es
ejecutada en una unidad de tiempo.
*Sea x
1
, x
2
, ... x
n
instrucciones; entonces t(xi) = 1 para i = 1, 2, ..., n.
*Entonces el tiempo de ejecucin es el nmero de operaciones.

-Criterio de Costo Logartmico: El tiempo de ejecucin como
proporcional al tamao de los datos (nmero de bits necesario para
codificar los datos).


Introduccin al anlisis de Eficiencia
-Es sencillo verificar la validez de una supuesta solucin que encontrar
una solucin partiendo de cero.
-El anlisis de los algoritmos suele efectuarse desde adentro hacia fuera.
-Primero se determina el tiempo requerido por instrucciones
individuales.
-Luego se combinan de acuerdo a las estructuras de control que enlazan
las instrucciones.
-Tomaremos como costo unitario una operacin que requiera realmente
una cantidad de tiempo polinmica.
-Contaremos las sumas y multiplicaciones con un coste unitario, aun en
aquellos operndos cuyo tamao crece con el tamao del caso, siempre
que est acotado por algn polinomio.
-Si se necesita operndos tan grandes, es preciso descomponerlos n
UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 11/21
segmentos, guardarlos en un vector, e invertir el tiempo necesario para
efectuar la aritmtica de precisin mltiple; tales algoritmos no pueden
ser de tiempo polinmico.

-Es necesario conocer principios generales para analizar las estructuras de
control ms frecuentemente conocidas.
Estructuras Secuenciales
-Sean P
1
y P
2
dos fragmentos de un algoritmo (instrucciones simples
una simple y una compuesta).

-Sean t
1
y t
2
los tiempos requeridos por P
1
y P
2
respectivamente.

-Regla de la composicin secuencial: El tiempo necesario para
calcular P
1
;P
2
(primero P
1
y luego P
2
) es simplemente t
1
+ t
2
.

-Si las instrucciones son compuestas slo se procede a sumar los tiempos
respectivos.

Ejemplo 11

Hallar la suma y el promedio de los N primeros numeros enteros positivos


















Pasos operaciones

1 1 lectura
2 1 asignacin
3 5n-1
3.1 2 adicin y asignacin
4 2 divisin y asignacin

Total 1+1+5n-1+2=5n+3

Paso 3
Accion SumaPromedio()
Inicio
Leer N 1
S=0 2
Para i desde 1 hasta N 3
S = S + I 3.1
FinPara
P=S/N 4
Fin

N

S

precondicin : N eZ
+

Postcondicion : P=S/N
UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 12/21

Para i desde 1 hasta N 3
S = S + I 3.1
FinPara

En la primera iteracin se realiza 2 operaciones : una asignacin (i=1), y un test (
i < N ? )
En las demas iteraciones (n-1 veces) se realiza 3 operaciones: un incremento( i+1) ,
una asignacin (i=i+1) y un test test ( i < N ?)

A esto debemos sumarle el numero de operaciones del cuerpo del para (2
operaciones)

En total se realizan :
Primera iteracin : 2 + 2 = 4 operaciones
Segunda iteracin: 3 + 2 = 5 operaciones
Tercera iteracin: 3 + 2 = 5 operaciones
.
N-esimaiteracin: 3 + 2 = 5 operaciones

Total paso 3 4 + 5(n-1) = 5n - 1

Complejidad temporal: 5n+3
Complejidad espacial: 4
se obtiene contabilizando el numero total de datos,
variables temporales y de salida: n, s, i, p
Ejemplo 12

Crear una fila con los N primeros nmeros enteros positivos

La entrada es el entero positivo N, y la salida es la fila secuencial F que contiene los N
primeros nmeros enteros positivos

<precondicin : N eZ
+

Postcondicion : F contiene los primeros nmeros enteros positivos














Accion CrearFila()
Inicio
PRIMER(F) 1
Leer N 2
Para i desde 1 hasta N 3
V = i 3.1
PONER(F,V) 3.2
FinPara
MARCAR(F) 4
Fin
UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 13/21
Pasos operaciones

1 1
2 1
3 6n - 1
4 1
Total 1+1+6n-1+1=6n+2

Complejidad temporal : 6n-2

Complejidad espacial : n+3 (n, v, i y n elementos de la fila)

Ejemplo 13 Hallar el producto interno de dos vectores










Evaluar el tiempo de complejidad del siguiente algoritmo:
Evaluaremos por partes
Inicio: 2n + 2
El bloque inicio est conformado por una instruccin de lectura y una de asignacin.
Siendo X e Y dos n vectores,
entonces la instruccin de lectura va requerir de 2n + 1 operaciones.
Luego el bloque Inicio tiene complejidad exacta de 2n + 2, el cual esta conformado de
una operacin de asignacin (z:= 0) y 2n+1 operaciones de la instruccin de lectura.
Proceso 6n - 1 (por propiedad de sumatorias)
El bloque de Proceso esta conformado por una instruccin para. Podemos calcular esta
instruccin de la siguiente manera:
Donde el primer 3 indica el nmero de asignaciones que se realizan dentro del bucle y
el otro 3, indica las operaciones propias del control del bucle.
Salida: 1
En este bloque salida es realizado solamente una operacin (Escribir(z)).
As la complejidad en tiempo del algoritmo PROD_INT es:
(2n + 2) + (6n 1) + 1 = 8n + 2
1 - ) 3 3 (
1

=
+
n
i
Algoritmo PROD_INT(n, A, B, z); Inicio
Leer (n, A, B);
z := 0; Proceso
Para i := 1, n hacer
z := z + ai bi; Salida
Escribir (z);
Fin.

UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 14/21


Algoritmos de tiempo polinomico y tiempo exponencial

Un algoritmo es llamado en tiempo polinomial si es de orden O(p(n)) para alguna
funcin polinomial p(n), en caso contrario ser superpolinomial. Esto es exponencial o
peor.


Considrese las siguientes complejidades:
T
1
( n) = 2
n

T
2
( n) = n
3

T
3
( n) = 5 n
2

T
4
( n) = 100 n
Para cuatro algoritmos diferentes. Supongamos que cada operacin es ejecutada en 1
segundo. Tenemos el siguiente comportamiento de las complejidades.

Obsrvese que aquellos que tienen menor complejidad presentan un menor crecimiento
respecto a la variacin del tamao de la instancia (n), esto es, realizan menos
operaciones y por consiguiente debern ser ms eficientes.

















Un algoritmo es considerado bueno si posee complejidad polinomial, esto es debido a
que conforme el tamao de la entrada n crece, los tiempos de ejecucin de los
algoritmos de tiempo polinomico se mantienen

Para resolver un problema pueden existir varios algoritmos. Por tanto, es lgico elegir el
mejor. Si el problema es sencillo o no hay que resolver muchos casos se podra elegir el
algoritmo mas fcil, sin embargo , si el problema es complejo o existen muchos casos habra
que elegir el algoritmo que menos recurso utilice.
Los recursos ms importantes son el tiempo de ejecucin y el espacio de almacenamiento.
Generalmente , el ms importante es el tiempo.
Al hablar de eficiencia de un algoritmo nos referimos a lo rpido que se ejecuta.
La eficiencia de un algoritmo depender, en general, del tamao de los valores de entrada N,
en donde N puede significar el numero de elementos de un vector, el numero de nodos de una
lusta enlazada, en numero de nodos de un arbol o un grafo etc.
5 10 15 20


300
0


200
0


100
0
UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 15/21
Una operacin elemental es aquella cuyo tiempo de ejecucin tiene una cota superior
constante que slo depende de su implementacin (por ejemplo: el ordenador o el lenguaje de
programacin utilizado.)

*Las operaciones elementales son consideradas de coste unitario.

*Ala hora de analizar un algoritmo importaran, por tanto, el numero de operaciones elementales
que precisa.

*La decisin de determinar que una operacin determinada es de coste unitario depender de
los ejemplares del problema que la utilice. Por ejemplo: En la mayor parte de los casos la suma
se considera de coste unitario puesto que al operar con los nmeros que se manejan
habitualmente en un ordenador los tiempos que emplea la suma son similares; sin embargo, en
caso de manejar nmeros muy grandes la suma no tendr un coste unitario puesto que tardara
ms cuanto ms sean los nmeros a sumar .

* Explorar el comportamiento de una funcin de una relacin entre
funciones, cuando algn parmetro de la funcin tiende hacia un valor
asinttico.

* Se denomina asinttica pues trata de funciones que tienden al lmite.

* Las notaciones asintticas nos permiten hallar la tasa de crecimiento del
tiempo de ejecucin

* Un algoritmo que sea superior asintticamente es preferible; por que se
considera el mximo lmite que llega una funcin.

*Funciones Conocidas(log
2
n, n ,n log
2
n, n
2
, n
3
, 2
n
)

N log
2
n n n log
2
n n
2
n
3
2
n

5 3 5 15 25 125 32
10 4 10 40 100 1000 1000
100 7 100 700 10000 10
6
10
30

1000 10 1000 10000 10
6
10
9
10
300


Notacin Asinttica O

Sea | , : N R
+
funciones.
Diremos que (n) est en el orden de |(n), si (n) est acotada
superiormente por un mltiplo real positivo de |(n) para todo n bien
grande.
*Sabemos que podemos definir la eficiencia de un algoritmo como una funcin T(n).
*A la hora de analizar un algoritmo nos interesa, principalmente, la forma en que se comporta el
algoritmo al aumentar de tamao de lo datos; es decir; como aumente su tiempo de ejecucin.
*Esto se conoce como eficiencia asinttica de un algoritmo y nos permitir comparar
distintos algoritmos puesto que deberamos elegir aquellos que se compartan mejor al crecer
los datos.
*La notacin Asinttica se describe por medio de una funcin cuyo dominio es el conjunto de
nmeros Naturales, N

*Se describe la notacin O o limite asinttico superior como:
-Existe c y un valor en el umbral n
0
tal que (n) s c | (n) siempre que
n n
0


*La notacin anterior bsicamente nos dice que si tenemos un algoritmo cuyo tiempo de
ejecucin es T(n) podemos encontrar otra funcin f(n) , y un tamao de problema n
0
de tal
forma que f(n) acota superiormente al tiempo de ejecucin para todos los problemas de tamao
superior a n
0
.

UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 16/21
*Esta notacin, como veremos a continuacin, facilitara en las comparaciones de eficiencia
entre algoritmos diferentes.

*Por ejemplo si T(n)= n
2
+ 5n + 100 y f(n) = n
2
entonces f(n) domina a T(n).

En prximas lecciones se ver la forma de calcular complejidad de algoritmos. Sin
embargo, podemos adelantar algunas reglas:
.O(C.g(n)) = O(g(n)) , C es una constante
. O(f(n).g(n)) = O(g(n))* O(f(n)) , y viceversa
.O(f(n)/g(n)) = O(g(n))/ O(f(n)) , y viceversa
. O(f(n)+g(n)) = funcin dominante de O(g(n)) y O(f(n))
.n* log
2
n domina a log
2
n

Dominancia entre funciones

Sea | , : N R
+
funciones.
Se dice que | domina asintoticamente a si se verifica que
- c, n
0
> 0 tal que

( n) s c | (n) n > n
0


obsrvese que a partir de n
0
la funcin c| es siempre mayor que la funcin

Ejemplo 14

n
3
domina asintoticamente a 2n
2
+ n
Para c =1 n
0
= 3 es fcil verificar que 2n
2
+ n s n
3
n > n
0

n
3
domina asintoticamente a 100n
2
log n
Para c =10 n
0
= 40 es fcil verificar que 100n
2
log n s n
3
n > n
0

n
3
domina asintoticamente a 3n
3
+ 2n
2

Para c =5 n
0
= 0 es fcil verificar que 3n
3
+ 2n
2
s n
3
n > n
0

UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 17/21
Ejemplo 15 Evaluar el polinomio P


Incio: O(n)
Este bloque est constituido por dos instrucciones
independientes con complejidades:
Leer(.) n+2 O(n)
p:= 1 O(1)
As por la regla 1, la complejidad asinttica del
bloque inicio ser:
O(mx{n,1}) = O(n)
Proceso:O(n
2
)
Ciclo:
p:=p+a
i
x
i
i + 2 O(i)
Control:
Para i:=1,n 3n 1 O(n)
Usando la regla 2, O(ni)
Desde que i asume en el peor caso el valor de n, entonces la complejidad asinttica
arriba ser: O(n
2
)
Salida: O(1)
Finalmente, la complejidad asinttica del algoritmo POL_E ser:
O(max{n,n
2
,1}) =O(n
2
)

Ejemplo 16

Inicio: O(n)
Proceso: O(n)
Como en el ejemplo
anterior, este est
conformado por un ciclo
de complejidad O(1) que
se repite un nmero de
veces dado por un
control de orden O(n). Esto es, este bloque presenta complejidad asinttica de:
O(1n) = O(n)
Salida: O(1).
La complejidad asinttica del algoritmo POL_P es: O(max{n,n,1}) =O(n)
Algoritmo POL_E(n, B,x)
Inicio
Leer (B,n,x)
p:=a
0
Proceso
Para i=1, n hacer
p:=p+a
i
x
i
Salida
Escribir (p)
Fin.

Algoritmo POL_P()
Leer (A,n,x)
p:=a
0
, y:=1
Proceso
Para i=1, n hacer
y:=y*x , p:=p+a
i
y
Fin-para;
Salida
Escribir (p)

UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 18/21

Reglas sencillas
Los algoritmos estructurados combinan sentencias de tipo
Secuencia
Decisin binaria(if..then...else)
Bucles (do..whhile, Repeat ...Until)
Llamadas a procedimientos o funciones

Sentencias sencillas
Asignacin Id = Expresin
Entrada Leer Lista_Id
Salida Escribir Lista_Id
Llamadas a funciones o procedimientos
Tienen complejidad O(1) , requieren tiempo de ejecucin constante, siempre y cuando no
trabajen sobre variables estructuradas cuyo tamao esta relacionado con el tamao del
problema N

Secuencias
La complejidad de una secuencia esta determinada por la suma de las
complejidades individuales, aplicando las operaciones antes expuestas.


Decisin binaria
La condicin suele ser de orden O(1), a ello se le sumara la complejidad del caso peor
posible, sea ya la rama then o la rama else. EN decisiones mltiples (ELSE IF, CASE Switch... )
se tomara el caso peor posible.

Bucles
Se distinguen dos casos en los bucles con contador en el que el tamao N forme parte
de los limites o que no. Si el bucle se realiza un numero fijo de veces, independientes de N,
entonces la repeticin solo introducir una constante multiplicativa que puede absolverse

Ejemplo 17

S1
Para i desde 1 hasta N
S2
FinPara

T(n) = t1 + t2 * n
T1 : tiempo que lleva ejecutar la serie S1
T2 : tiempo que lleva ejecutar la serie S2

Ejemplo 18

Si (Condicion )
S1
Else
S2
FinSi
Dependiendo de la condicin, si es verdad se ejecuta S1, en caso contrario se ejecuta S2
Esto hace que exista ms de un valor para T(n)
Tmin(n) s T(N) s Tmax(N)
Caso peor caso mejor
UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 19/21

T(n) = t1 + t2 * n
T1 : tiempo que lleva ejecutar la serie S1
T2 : tiempo que lleva ejecutar la serie S2

Ejemplo 19

Para i desde 1 hasta K
Algo de O(1) complejidad K* O(1) = O(1)
FinPara

Para i desde 1 hasta N
Algo de O(1) complejidad N* O(1) = O(N)
FinPara

Ejemplo 20

Para i desde 1 hasta N
Para j desde 1 hasta N
Algo de O(1) complejidad N*N* O(1) = O(N
2
)
FinPara
FinPara

Para i desde 1 hasta N
Para j desde 1 hasta i
Algo de O(1) complejidad N*N* O(1) = O(N
2
)
FinPara
FinPara

El bucle mayor se realiza N veces. Mientras que el bucle menor se realiza, 1, 2, ...n
veces respectivamente. Por tanto se realiza 1+2+3+...n= N*(N+1)/2 O(N
2
)

UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 20/21
Ejercicios propuestos

I Proporcione una especificacin para

1. Hallar el mayor elemento de un vector
2. Comparar si dos matrices son iguales o no
3. Verificar si una matriz tienen dos columnas iguales
4. Verificar si una matriz tiene dos columnas con los mismos elementos
5. Hallar el producto de los elementos de la diagonal principal de una matriz
6. Verificar si un vector esta ordenado o no
7. Hallar la media cuadrtica de una sucesin de nmeros tomados de una
fila secuencial (la media cuadrtica es igual a la raz del cociente entre la
suma de los cuadrados de los nmeros entre la cantidad de nmeros)
8. Especificar una funcin que dado un natural n, decida si es o no un
numero GUAY.
9. Construya un algoritmo para determinar el numero de combinaciones que
se puede hallar con n objetos diferentes tomados de r en r
10. Hallar la media armnica H de los nmeros (x) tomados de una fila
secuencial (1/H = 1/N * 1/x)

11. Los alumnos regulares de la facultad de medicina tienen edades entre 16 y
24 aos. Se quiere hallar el promedio de las edades y la variancia respecto
de la media. No deber considerarse los alumnos con edad fuera del rango
regular.
12. Hallar el elemento mayora de un vector. Un elemento es mayora si se
repite mas de n/2 veces, donde n es la longitud del vector

II Estimase la complejidad espacial, complejidad temporal y orden asinttico
de los ejercicios de pregunta 1


III Especifique la funcin, determine el tiempo de ejecucin y orden asinttico
para los siguientes algoritmos.




Fun SumaImpar()
Inicio
Leer A, N
S=0
Para I desde 1 hasta N
S=S+ I
N

fPara
FinFun

Fun SumaImpar()
Inicio
Leer A, N
M=A
1

Para I desde 2 hasta N
Si (A
i
> M )
M= A
i

FinSi
fPara
Escribir M
FinFun

UPG FCM Formalismo, Abstraccin y complejidad 2012
Augusto Cortez Vsquez Pag. 21/21
IV Proporcione 2 ejemplos de algoritmos de orden lineal. Evale la
complejidad temporal, complejidad espacial
V Proporcione 2 ejemplos de algoritmos de orden cuadrtico. Evalu la
complejidad temporal, complejidad espacial
VI Proporcione 2 ejemplos de algoritmos de orden cbico. Evale la
complejidad temporal, complejidad espacial


R RE EF FE ER RE EN NC CI IA AS S B BI IB BL LI IO OG GR RA AF FI IC CA AS S

1. [HERNANDEZ 2001] Hernandez, R.; Lazaro, J.C.; Dormido, R.; Ros, S.
Estructura de Datos y Algoritmos; Prentice Hall 2001, Madrid Espaa.
2. [BRASSARD 1998] Brassard,G. Bratley,P. Fundamentos de Algoritmia, Prentice
Hall 1998 Madrid
3. [CORTEZ 1999] Cortez Vasquez,Augusto. Matematica Discreta, UNMSM FISI
Lima 1999.
4 [CORTEZ 2002] Cortez Vsquez,Augusto. Algoritmica y Programacin, UCSS
Lima 2002.
5 [CORTEZ 2002] Cortez Vasquez,Augusto. Estructura de datos y algoritmos,
estructuras no lineales, URP Lima 2002.
6 [GRASSMANN 1996] Grasssmann W. ,Tremblay J. Matematica Discreta y
Logica; Prentice Hall 1996.
7 [GRIMALDI 1994] Grimaldi Ralph Matematicas Discreta y Combinatoria;
Addison-Wesley 1994
8 [GUTIERREZ 1993] Gutierrez Xavier Franch Estructuras de datos,
Especificacion, diseo e implementacion; Edicin UPC Barcelona Espaa 19934
9 [JAIME 2002] Jaime, Alberto. Estructuras de datos y Algoritmos; Prentice Hall
2002 Bogota D.C.
10 [JOHNSONBAUGH 1999] Johnsonbaugh Richard Mateamticas Discretas;
Prentice Hall 1999, Pags.
11 [LIPSCHUTZ 1987] Lipschutz Seymour Estructura de datos, Mc Graw-
Hill,1987
12 [CARMONA 1999] Carmona, Poyato Angel y Otros Estructuta de Datos, Caja
Sur Universidad de Cordova Espaa 1999
13 [SEDGEWICK 1993] Stroustrup Bjarne El C++ Lenguaje de programacion;
Addison-Wesley 1993 , Wilmington-Delaware EUA.
14 [TENEMBNAUM 1993] Tenembaum,A.Langsam Y.Augenstein M. Estructuras
de datos en C, Prentice Hall 1993.
15 [WEISS 2000] Weiss, Mark Allen. Estructuras de datos en JAVA; Addison-
Wesley, 2000.

También podría gustarte