Está en la página 1de 11

Crecimiento de Funciones Análisis de Algoritmos

CRECIMIENTO DE FUNCIONES

Notación  (Notación Theta Mayúscula)

Definición

Para una función dada g (n ) , se denota por ( g (n)) al conjunto de funciones

( g (n))  { f (n) | existen constantes positivas c1 , c2 y n0 tal que


0  c1 g (n)  f (n)  c2 g (n) para toda n  n0 }.

Una función f (n) está contenida en el conjunto ( g (n)) si existen constantes c1 y c2


tales que f (n) está entre c1g (n) y c2 g (n) , para una n suficientemente grande. Aunque
( g (n)) es un conjunto, se escribe “ f (n)  ( g (n)) ” para indicar que f (n) es un
miembro de ese conjunto. Este abuso puede causar confusión pero posteriormente se
verá su ventaja.

La figura de abajo muestra la intuición que está bajo la notación  . Para todos los
valores de n a la derecha de n0 , el valor de la función f (n) está por debajo de c2 g (n)
y por arriba de c1g (n) .

1
Crecimiento de Funciones Análisis de Algoritmos

Se dice que g (n ) es una cota ajustada asintóticamente para f (n) .

La definición de ( g (n)) requiere que todo miembro de ( g (n)) sea asintóticamente


no negativo, es decir, que f (n) sea no negativo siempre que n sea suficientemente
grande. Consecuentemente g (n ) debe ser asintóticamente no negativa.

Ejemplo 1.

1 2
Verifique que n  3n  (n 2 )
2

Para ver esto se tienen que determinar constantes c1, c2 y n0 tal que

1 2
c1n 2  n  3n  c2 n 2
2

Para toda n  n0 . Dividiendo entre n 2 se obtiene

1 3
c1    c2
2 n

El lado derecho de la desigualdad se cumple para todo valor de n  1 , al escoger


1
c2  . El lado izquierdo de la desigualdad se cumple para cualquier valor de n  7 si
2
1 1 1
se escoge c1  . Por lo tanto al seleccionar c1  , c2  , y n0  7, se verifica que
14 14 2
1 2
n  3n  (n 2 ) .
2

Aquí se pueden seleccionar otras constantes, pero lo importante es que esas constantes
1
existan. También se debe notar que esas constantes dependen de la función n 2  3n ;
2
una función diferente contenida en (n 2 ) usualmente requiere otras constantes
diferentes.

Ejemplo 2.

Verifique que 6n3  (n2 ).

2
Crecimiento de Funciones Análisis de Algoritmos

Suponga que para, propósitos de contradicción, que c2 y n0 existen tal que 6n3  c2 n2
c2
para todo n  n0 . Pero n  , que no es posible que se cumpla para toda n arbitraria,
6
ya que c2 es una constante.

Ejemplo 3.

Verifique que f (n)  an 2  bn  c , donde a, b y c son constantes y a  0 es


f (n)  (n2 ) . Tomemos c1 tal que cumpla con

c1n2  an2  bn  c

dividiendo f (n) entre n 2 obtenemos:

b c
c1  a  
n n2

1
Si tomamos c1  a debe existir una n suficientemente grande tal que
2
1 b c 1 b c
a  a   2 . Se puede darle un peso de a a cada uno de los términos, , 2
2 n n 4 n n
(ya que pueden ser negativos) es decir

1 b 4b 
a n 
4 n a  n  max  4 b , 4 c 
  
1 c 4c  0  a a 
a 2 n 
4 n a 

 4 b 4 c 
Si se hace lo mismo con c2 se llega a que n0  max  ,  por lo tanto, si
 a a 

1 3  4 b 4 c 
tomamos c1  a y c2  a ; n0  max  , 
2 2  a a 

En este ejemplo se puede tomar c1  a pero tan cercano como se desee y c2  a pero
igualmente tan cercano a a como se desee. Entre más próximos estén al valor a , n0 se
tomará más grande.

Notación  (Notación O mayúscula, o Big O)

3
Crecimiento de Funciones Análisis de Algoritmos

La notación  asintóticamente acota a la función por arriba y por abajo. Cuando


únicamente se tiene una cota superior asintótica, se usa la notación  . Para una
función

g (n ) , se denota por ( g (n)) al conjunto de funciones

( g (n))  { f (n) | existen constantes positivas c y n0 tales que


0  f (n)  cg (n) para toda n  n0 }.

Se usa la notación  para dar una cota superior de la función.

La figura de abajo muestra la intuición que está bajo la notación  . Para todos los
valores de n a la derecha de n0 , el valor de la función f (n) está por debajo de cg (n) .

Para indicar que la función f (n) es miembro de ( g (n)) , se escribe f (n)  ( g (n)) .
Note que f (n)  ( g (n)) implica que f (n)  ( g (n)) , ya que la notación de  es más
fuerte que la notación  , es decir que ( g (n))  ( g (n)) . Por lo tanto la prueba para
la función cuadrática an 2  bn  c , donde a  0 , está en (n 2 ) también muestra que
cualquier función cuadrática es (n 2 ) . Puede ser más sorprendente que cualquier
función lineal an  b está en (n 2 ) , que fácilmente es verificable tomando c  a  b y
n0  1 .

4
Crecimiento de Funciones Análisis de Algoritmos

Si se usa la notación  a menudo se puede describir el tiempo de corrida de un


algoritmo por inspección de la estructura del algoritmo. Por ejemplo, la estructura
doblemente anidada del algoritmo de ordenación por inserción presentado anteriormente
obtiene una cota superior (n 2 ) para el peor caso del tiempo de corrida. Notación 
describe una cota superior cuando se usa el peor caso.

Ejemplo 4.

Verifique que f (n)  ak n k  ak 1n k 1    a1n  a0 , donde ai son constantes para


i  0,..., k y ak  0 es f (n)  (nk ) . Como en el ejemplo 3 dividamos

c1n k  ak n k  ak 1n k 1    a1n  a0  c2 n k

entre n k

ak 1 a a
c1  ak     k11  0k  c2
n n n

1
Si tomamos c1 ak debe existir una n suficientemente grande tal que
2
1 a a a 1
ak  ak  k 1    k11  0k . Se puede darle un peso máximo de ak a cada uno
2 n n n 2k
a a a
de los términos k 1 ,, k11 , 0k , es decir
n n n

1 a
ak  k i i i  1,2,..., k
2k n

2k ak  i 2k ak 1
ni por lo tanto tomando n0 tal que n0  max i .
ak i 1,..., k ak

Para c2 es similar.

Ejemplo 5.

Verifique que f (n)  20n  200 es (n 2 ) .

Tenemos que encontrar constantes c, n0 tales que

20n  200  cn 2 para toda n  n0

20 200 20 200
 2  c y si tomamos c  2 y n0  17 se cumple que   1.87  2
n n 17 17 2

5
Crecimiento de Funciones Análisis de Algoritmos

Notación  (Notación Omega mayúscula o Big Omega)

De la misma manera que la notación  produce una cota superior a una función, la
notación  da una cota inferior asintótica. Para una función g (n ) , se denota por
( g (n)) al conjunto de funciones

( g (n))  { f (n) | existen constantes positivas c y n0 tales que


0  cg (n)  f (n) para toda n  n0 }.

La intuición de la notación  se muestra en la figura de abajo. Para todos los valores de


n a la derecha de n0 , el valor de la función f (n) está por arriba de cg (n) .

De las definiciones anteriores es fácil probar el siguiente teorema:

Teorema

Para cualquier dos funciones f (n) y g (n ) ,

f (n)  ( g (n)) sí y sólo sí f (n)  ( g (n)) y f (n)  ( g (n)) .

6
Crecimiento de Funciones Análisis de Algoritmos

Como ejemplo de la aplicación de este teorema, nuestra prueba de an2  bn  c  (n2 )


para cualesquiera constantes a, b y c donde a  0 , inmediatamente implica que
an2  bn  c  (n2 ) y an2  bn  c  (n2 ) .

La notación  describe una cota inferior, cuando se usa esta cota para el tiempo de
corrida del mejor caso del algoritmo. Por ejemplo, el tiempo de corrida del mejor caso
para el algoritmo de ordenación por inserción es (n) , que implica que el tiempo de
corrida de ordenación por inserción es (n) .

El tiempo de corrida de ordenación por inserción, por lo tanto, cae entre (n) y (n 2 ) .

Notación asintótica en ecuaciones

Cuando la notación asintótica está en el lado derecho de una ecuación, como n  (n 2 ) ,
ya se ha definido el signo igual como n  (n 2 ) . Por ejemplo la fórmula

2n2  3n  1  2n2  (n) ,

significa que 2n2  3n  1  2n2  f (n) donde f (n) es alguna función en el conjunto
(n) . En este caso f (n)  3n  1 que está (n) .

El uso de notación asintótica en esta manera puede ayudar a eliminar detalles no


esenciales y corta una ecuación. Por ejemplo, se expresó en el capítulo 1 que el peor
caso para el tiempo de corrida de ordenación por mezclado tiene la recurrencia

T (n)  2T (n / 2)  (n)

Si se está interesado únicamente en el comportamiento de T (n ) , no se especifican todos


los términos menores exactamente, se entiende que están incluidos en la función
anónima denotada por (n) .

2 n 2  ( n )  ( n 2 )
2n 2  3n  1  2n 2  (n)
 ( n 2 )

Notación  (Notación o minúscula)

7
Crecimiento de Funciones Análisis de Algoritmos

La notación  da una cota superior que puede o no estar asintóticamente ajustada. La


cota 2n 2  (n 2 ) es asintóticamente ajustada, pero la cota 2n  (n 2 ) no lo es. Se usa
la notación  para denotar una cota superior que no es asintóticamente ajustada. Se
define formalmente  ( g (n)) (se lee “  pequeña de g de n ”) como el conjunto

 ( g (n))  { f (n) | para cualquier constante positiva c  0, existe una constante


n0  0 tal que 0  f (n)  cg (n) para toda n  n0 }.

Por ejemplo, 2n   (n2 ) , pero 2n 2   (n 2 ) .

Las definiciones de la notación  y la notación  son similares. La diferencia principal


es que en f (n)  ( g (n)) , la cota 0  f (n)  cg (n) se cumple para alguna constante
c  0 , pero en f (n)   ( g (n)) , la cota 0  f (n)  cg (n) se cumple para toda constante
c  0 . De manera intuitiva, en la notación  , la función f (n) viene a ser insignificante
relativa a g (n ) cuando n se aproxima a infinito; esto es,

f ( n)
lim  0.
n  g ( n)

Algunos autores usan este límite como definición de la notación  . La definición


anterior también se restringe a las funciones que sean asintóticamente no negativas.

Notación  (Notación omega minúscula)

Por analogía, la notación  es a la notación  como la notación  es a la notación  .


Se usa la notación  para denotar una cota inferior que no es asintóticamente ajustada.
Un camino para definirla

f (n)   ( g (n)) sí y sólo sí g (n)   ( f (n)) .

Formalmente se define  ( g (n)) (“omega pequeña de g de n ”) como

 ( g (n))  { f (n) | para cualquier constante positiva c  0, existe una constante


n0  0 tal que 0  cg (n)  f (n) para toda n  n0 }.

n2 n2
Por ejemplo,   (n) , pero   (n 2 ) . La relación f (n)   ( g (n)) implica que
2 2

f ( n)
lim .
n   g (n)

Esto es, f (n) es arbitrariamente mayor relativo a g (n ) cuando n se aproxima a


infinito.

8
Crecimiento de Funciones Análisis de Algoritmos

Ejemplos

(log 4 n)  (lg( n))

n2
lg n  O(n), n10   (2n ), 2n   (n!), 7n 2  (n 2 ),   (n3 )
2
a n   (b n ) si 0  a  b, a n   (n!).

Propiedades de orden

1. g (n)  ( f (n)) sí y sólo sí f (n)  ( g (n))


2. g (n)  ( f (n)) sí y sólo sí f (n)  ( g (n))
3. Si b  1 y a  1 entonces log a n  (log b n)
4. Si b  a  0 entonces a n   (bn )
5. Para toda a  0, a n   (n!)
6. Considere las siguientes categorías de complejidad
(lg n), (n), (n lg n), (n2 ), (n j ), (nk ), (a n ), (bn ), (n!)
donde k  j y b  a  1. Si la función f (n) está a la izquierda de la categoría
g (n ) , entonces f (n)   ( g (n))
7. Si c  0, d  0, f (n)  O( g (n)), y h(n)  ( g (n)) ,
entonces cf (n)  dh(n)  ( g (n)) .

Teorema

c implica que g (n)  ( f (n)) si c  0


g ( n) 
lim  0 implica que g (n)   ( f (n))
n   f ( n)
 implica que f (n)   ( g (n))

Comparación de funciones

Muchas de las propiedades relacionales de los números reales se aplican a la


comparación asintótica. Para lo que sigue se supone que f (n) y g (n ) son
asintóticamente positivas.

Transitividad

9
Crecimiento de Funciones Análisis de Algoritmos

f (n)  ( g (n)) y g (n)  (h(n)) implica que f (n)  (h(n)),


f (n)  ( g (n)) y g (n)  (h(n)) implica que f (n)  (h(n)),
f (n)  ( g (n)) y g (n)  (h(n)) implica que f (n)  (h(n)),
f (n)   ( g (n)) y g (n)   (h(n)) implica que f (n)   (h(n)),
f (n)   ( g (n)) y g (n)   (h(n)) implica que f (n)   (h(n)).

Reflexividad

f (n)  ( f (n)),
f (n)  ( f (n)),
f (n)  ( f (n)).

Simetría

f (n)  ( g (n)) sí y sólo sí g (n)  ( f (n)).

Simetría transpuesta

f (n)  ( g (n)) sí y sólo sí g (n)  ( f (n)),


f (n)   ( g (n)) sí y sólo sí g (n)   ( f (n)).

Como estas propiedades se cumplen para notación asintótica se puede ver una analogía
entre comparación asintótica de dos funciones f y g y la comparación de dos números
reales a y b :

f (n)  ( g (n))  a  b,
f (n)  ( g (n))  a  b,
f (n)  ( g (n))  a  b,
f (n)   ( g (n))  a  b,
f (n)   ( g (n))  a  b.

Una propiedad de los números reales que sin embargo no se cumple al llevarla a la
notación asintótica es:

Tricotomía: Para cualquier dos números reales f y g , exactamente uno de lo


siguiente se debe cumplir a  b, a  b, o a  b.

Aunque cualesquiera dos números reales pueden ser comparados, no todas las funciones
son asintóticamente comparables. Esto es, para dos funciones f y g puede ser que no
se cumpla ninguna f (n)  ( g (n)) o f (n)  ( g (n)) . Por ejemplo para las funciones
n y n1 sen n no se pueden comparar usando notación asintótica, ya que el valor del
exponente en n1 sen n oscila entre 0 y 2, tomando todos los valores entre ellos.

10
Crecimiento de Funciones Análisis de Algoritmos

Ejercicios

Para la función n 2 , obtenga algunas funciones que pertenezcan a:

1. (n 2 ), b) (n 2 ), c) (n 2 ), d)  (n 2 ), e)  (n2 ).


2. Use las definiciones de , ,  para mostrar que:
f (n)  10n 2  n  8n3  (n3 ),
f (n)  5n 2  10n  (n3 ),
f (n)  5n 2  10n  (n3 ).

11

También podría gustarte