Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

29
Las matemáticas como Las matemáticas como medio para medir la medio para medir la eficiencia de los eficiencia de los Algoritmos Algoritmos Computacionales Computacionales

description

Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales. ¿Qué es un algoritmo?. “(del árabe al-Khowârizmî, sobrenombre del célebre matemático árabe Mohámed ben Musa). Conjunto ordenado y finito de operaciones que permite encontrar la solución a un problema…” - PowerPoint PPT Presentation

Transcript of Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Page 1: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Las matemáticas como Las matemáticas como medio para medir la medio para medir la

eficiencia de los Algoritmos eficiencia de los Algoritmos ComputacionalesComputacionales

Page 2: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

¿Qué es un algoritmo?¿Qué es un algoritmo?

““(del árabe al-Khowârizmî, sobrenombre del (del árabe al-Khowârizmî, sobrenombre del célebre matemático árabe Mohámed ben célebre matemático árabe Mohámed ben Musa). Conjunto ordenado y finito de Musa). Conjunto ordenado y finito de operaciones que permite encontrar la operaciones que permite encontrar la solución a un problema…”solución a un problema…”

Un algoritmo, puede expresarse en términos Un algoritmo, puede expresarse en términos de un lenguaje de programación, para de un lenguaje de programación, para obtener un programa que resuelve el obtener un programa que resuelve el problema por medio de la computadora.problema por medio de la computadora.

Page 3: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Cita...Cita...

““No hay un incremento concebible en el poder de las No hay un incremento concebible en el poder de las computadoras que pueda saturar la demanda científica: aún computadoras que pueda saturar la demanda científica: aún pensando que una computadora posea un ciclo de tiempo pensando que una computadora posea un ciclo de tiempo subnuclear (10subnuclear (10-23-23 seg.) y densidades de almacenamiento seg.) y densidades de almacenamiento subnucleares (10subnucleares (103939 bits/cm bits/cm33), ésta no podría manejar la ), ésta no podría manejar la mayoría de los problemas que son importantes en la mayoría de los problemas que son importantes en la investigación científica básica y aplicada. Por lo tanto, existirá investigación científica básica y aplicada. Por lo tanto, existirá siempre una fuerte presión para incrementar la siempre una fuerte presión para incrementar la eficienciaeficiencia de de los programas, para poder incrementar también la cantidad de los programas, para poder incrementar también la cantidad de información últil generada por un programa.”información últil generada por un programa.”

Ken Wilson, Nóbel de Física 1982Ken Wilson, Nóbel de Física 1982

Page 4: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Áreas de estudioÁreas de estudio

¿Cómo construir algoritmos?¿Cómo construir algoritmos? Técnicas de diseñoTécnicas de diseño

¿Cómo expresar algoritmos?¿Cómo expresar algoritmos? Enfoques de los lenguajes de programaciónEnfoques de los lenguajes de programación

¿Cómo validar algoritmos?¿Cómo validar algoritmos? Verificación formalVerificación formal

¿Cómo analizar algoritmos?¿Cómo analizar algoritmos? Complejidad computacional, eficiencia, legibilidad, Complejidad computacional, eficiencia, legibilidad,

usabilidad, etc...usabilidad, etc...

Page 5: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Análisis de algoritmosAnálisis de algoritmos

Si se tuvieran 2 programas que hacen lo Si se tuvieran 2 programas que hacen lo mismo, ¿cómo se podrían comparar?mismo, ¿cómo se podrían comparar?

1. Eficiencia:1. Eficiencia:Tiempo de ejecuciónTiempo de ejecuciónUso de espacios de memoriaUso de espacios de memoria

2. Facilidad de lectura, mantenimiento, 2. Facilidad de lectura, mantenimiento, rapidez para codificarlo.rapidez para codificarlo.

Page 6: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Medición del tiempo de Medición del tiempo de ejecuciónejecución

El tiempo de ejecución depende de:El tiempo de ejecución depende de:1. La entrada al programa:1. La entrada al programa:

Su tamañoSu tamaño

Sus característicasSus características

2. La calidad del código generado para el 2. La calidad del código generado para el programa por el compilador .programa por el compilador .

3. La rapidez de las instrucciones de máquina.3. La rapidez de las instrucciones de máquina.

4. La 4. La complejidad de tiempo del algoritmocomplejidad de tiempo del algoritmo..

Page 7: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

¿Cómo medir?¿Cómo medir?

Cantidad de instrucciones básicas (o Cantidad de instrucciones básicas (o elementales) que se ejecutan.elementales) que se ejecutan.

Ejemplos de instrucciones básicas:Ejemplos de instrucciones básicas: asignación de escalaresasignación de escalares lectura o escritura de escalareslectura o escritura de escalares saltos (goto’s) implícitos o explícitos.saltos (goto’s) implícitos o explícitos. evaluación de condicionesevaluación de condiciones llamada a funcionesllamada a funciones etc.etc.

Page 8: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

EjemploEjemplo

cont = 1;cont = 1;

while (cont <= n) dowhile (cont <= n) do { {

x = x + a[cont];x = x + a[cont];

x = x + b[cont];x = x + b[cont];

cont = cont + 1;cont = cont + 1;

}}

1n+1nnnn (goto implícito)1 goto en falso.

TOTAL: TOTAL: 5n + 5n + 33

Page 9: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

EjemploEjemplo

z = 0;z = 0;

for for (int (int x=1x=1; x<=; x<=nn; x++); x++)

for for (int y(int y=1=1; y<=; y<=nn; y++); y++)

z = z + a[x,y];z = z + a[x,y];

11 asignación + (n+1) comparaciones

(n+2)*n = n2 +2nn*n = n2

2n2 (incremento + goto implícito)n (goto en falso for y)2n (incremento + goto implícito)1 (goto en falso for x)

TOTAL: TOTAL: 44nn22 + + 66n + n + 44

Page 10: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Consecuencia…Consecuencia…

Se requiere contar con una notación que permita Se requiere contar con una notación que permita comparar la eficiencia entre los algoritmos…comparar la eficiencia entre los algoritmos…

La La NOTACIÓN ASINTÓTICANOTACIÓN ASINTÓTICA es la propuesta de notación es la propuesta de notación aceptada por la comunidad científica para describir el aceptada por la comunidad científica para describir el comportamiento en eficiencia (o complejidad) de un comportamiento en eficiencia (o complejidad) de un algoritmo.algoritmo.

Describe en forma sintética el comportamiento de la Describe en forma sintética el comportamiento de la función que con la variable de entrada, determina el función que con la variable de entrada, determina el número de operaciones que realiza el algoritmo.número de operaciones que realiza el algoritmo.

Page 11: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

NOTACIÓN ASINTÓTICANOTACIÓN ASINTÓTICA

COMPLEJIDAD TEMPORAL COMPLEJIDAD TEMPORAL (y ESPACIAL)(y ESPACIAL). . Tiempo Tiempo (o espacio)(o espacio) requerido por un algoritmo, requerido por un algoritmo, expresado en base a una función que depende expresado en base a una función que depende del tamaño del problema.del tamaño del problema.

COMPLEJIDAD TEMPORAL ASINTÓTICA COMPLEJIDAD TEMPORAL ASINTÓTICA (y (y ESPACIAL)ESPACIAL). Comportamiento límite conforme el . Comportamiento límite conforme el tamaño del problema se incrementa. Determina tamaño del problema se incrementa. Determina el tamaño del problema que puede ser resuelto el tamaño del problema que puede ser resuelto por un algoritmo.por un algoritmo.

Page 12: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

DefiniciónDefinición

Se dice que la función Se dice que la función f(n)f(n) “es de orden “es de orden g(n)g(n)” ” [[O(g(n))O(g(n))], si existen constantes positivas ], si existen constantes positivas cc y y nn00

tales que tales que f(n)f(n) <= <= c g(n)c g(n) cuando cuando nn >= >= nn00

Ejemplos:Ejemplos: n+5n+5 es es O(n)O(n) pues pues n+5n+5 <= <= 2n2n para toda para toda nn >= 5 >= 5 (n+1)(n+1)22 es es O(nO(n22)) pues pues (n+1)(n+1)22 <= <= 4n4n22 para para nn>= 1>= 1 (n+1)(n+1)22 NONO es es O(n)O(n) pues para cualquier pues para cualquier c > 1c > 1

no se cumple que no se cumple que (n+1)(n+1)22 <= <= c*nc*n

Page 13: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Ordenes más comunes de los Ordenes más comunes de los algoritmosalgoritmos

O(1) ConstanteO(1) Constante O(n) LinealO(n) Lineal O(nO(n2 2 ) Cuadrático) Cuadrático O(nO(n3 3 ) Cúbico) Cúbico O (nO (nm m ) Polinomial) Polinomial O(log(n)) LogarítmicoO(log(n)) Logarítmico O(nlog(n)) nlog (n)O(nlog(n)) nlog (n) O(mO(mn n ) exponencial) exponencial O(n!) factorialO(n!) factorial

Page 14: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Comportamiento Comportamiento de las funcionesde las funciones

log n

n

n log n

n sqrt(n)

n2

Page 15: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Otro método para calcular el orden Otro método para calcular el orden de un problemade un problema

Consiste en aplicar reglas a los estatutos Consiste en aplicar reglas a los estatutos estructurados:estructurados:

1.1.Secuencia de instruccionesSecuencia de instrucciones

2.2.Decisiones (ejemplo: if)Decisiones (ejemplo: if)

3.3.Ciclos (ejemplo: while)Ciclos (ejemplo: while)

4.4.RecursividadRecursividad

Page 16: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Regla 1: Secuencia de Regla 1: Secuencia de instruccionesinstrucciones

Ejemplo:Ejemplo: Una secuencia de 3 ciclos:Una secuencia de 3 ciclos:

Ciclo 1 = Ciclo 1 = O(n)O(n) Ciclo 2 = Ciclo 2 = O(log n)O(log n) Ciclo 3 = Ciclo 3 = O(nO(n22))

Tendrá como orden total…Tendrá como orden total… O(nO(n22))..

O(g1(n))O(g1(n))

O(g2(n))O(g2(n))

O(g3(n))O(g3(n))

O(gm(n))O(gm(n))

≈ O( mayor(g1(n), g2(n), …, gm(n) )

Page 17: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Regla 2: Regla 2: DecisionesDecisiones

Ejemplo:Ejemplo: Una decisión con:Una decisión con:

Rama then = Rama then = O(n log n)O(n log n) Rama else = Rama else = O(log n)O(log n)

Tendrá como orden total… Tendrá como orden total… O(n log n)O(n log n)..

O(g1(n))O(g1(n))

O(g2(n))O(g2(n))

≈ O( mayor(g1(n), g2(n)) )

Page 18: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Regla 3: Regla 3: CiclosCiclos

Ejemplo:Ejemplo: Un ciclo cuya instrucción:Un ciclo cuya instrucción:

Tiene un Tiene un O(log n)O(log n) Se repite Se repite n/2n/2 veces veces

Tendrá como orden total… Tendrá como orden total… O(O(½ n log n½ n log n) = O(n log n)) = O(n log n)..

O(g(n))O(g(n))

≈ O( m * g(n) )

Se repite m veces

Page 19: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Consideraciones especialesConsideraciones especiales

En decisiones y ciclos anidados:En decisiones y ciclos anidados: Analizar el código desde la instrucción más Analizar el código desde la instrucción más

interna hacia el más externa.interna hacia el más externa. Tip para los ciclos:Tip para los ciclos:

¿“Normalmente” cuál es el orden de la ¿“Normalmente” cuál es el orden de la instrucción interna?instrucción interna? Si la variable de control se incrementa o Si la variable de control se incrementa o

decrementa con un valor constante: decrementa con un valor constante: Orden Orden LINEALLINEAL..

Si la variable de control se multiplica o divide por Si la variable de control se multiplica o divide por un valor constante: un valor constante: Orden LOGARÍTIMICOOrden LOGARÍTIMICO..

Page 20: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Ejemplo: Sort por intercambioEjemplo: Sort por intercambio

for for (int (int i=1i=1; i<n; i++); i<n; i++)

for for (int (int j=i+1j=i+1; j<=; j<=nn;j++);j++)

if if ((a[ j ] < a[ i ]a[ j ] < a[ i ]))

intercambia(a[ i ], a[ j ]);intercambia(a[ i ], a[ j ]); → O( )11→ O( )

Regla 2: Decisiones = mayor de las 2 ramas

Page 21: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Ejemplo: Sort por intercambioEjemplo: Sort por intercambio

for for (int (int i=1i=1; i<n; i++); i<n; i++)

for for (int (int j=i+1j=i+1; j<=; j<=nn;j++);j++)

if if ((a[ j ] < a[ i ]a[ j ] < a[ i ]))

intercambia(a[ i ], a[ j ]);intercambia(a[ i ], a[ j ]);→ O( )

1→ O( )

Peor caso: se repite n-1 veces

n

Regla 3: Ciclos = # veces * orden de la instrucción interna

Page 22: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Ejemplo: Sort por intercambioEjemplo: Sort por intercambio

for for (int (int i=1i=1; i<n; i++); i<n; i++)

for for (int (int j=i+1j=i+1; j<=; j<=nn;j++);j++)

if if ((a[ j ] < a[ i ]a[ j ] < a[ i ]))

intercambia(a[ i ], a[ j ]);intercambia(a[ i ], a[ j ]);

→ O( )n2→ O( )

Se repite n-1 veces

n

Regla 3: Ciclos = # veces * orden de la instrucción interna

Page 23: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Ejemplo: Multiplicación de Ejemplo: Multiplicación de matricesmatrices

a11 a12 … a1n

a21 a22 … a2n

… … … …

am1 am2 … amn

b11 b12 … b1m

b21 b22 … b2m

… … … …

bn1 bn2 … bnm

X

c11 = a11*b11+a12 *b21 +…+ a1n *bn1

c12 = a11*b12+a12 *b22 +…+ a1n *bn2

c21 = a21*b11+a22 *b21 +…+ a2n *bn1

cmm = am1*b1m+am2 *b2m +…+ amn *bnm

c11 c12 … c1m

c21 c22 … c2m

… … … …

cm1 cm2 … cmm

=

ccijij = = a aikikbbkjkj

nn

k=1k=1

Page 24: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Ejemplo: Multiplicación de Ejemplo: Multiplicación de matricesmatrices

for i = 1 to n dofor i = 1 to n do

for j = 1 to n dofor j = 1 to n do

C[i,j] = 0;C[i,j] = 0;

for k = 1 to n dofor k = 1 to n do

C[i,j] = C[i,j] + A[i,k]*B[k,j];C[i,j] = C[i,j] + A[i,k]*B[k,j];O( 1 ) ←

O( n ) ←

O( n2 ) ←O( n3 ) ←

O( 1 ) ←

Page 25: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Regla 4: RecursividadRegla 4: Recursividad

La complejidad de tiempo se obtiene contando la cantidad de La complejidad de tiempo se obtiene contando la cantidad de veces que se hace veces que se hace la llamada recursivala llamada recursiva..

Casos que “normalmente” se dan:Casos que “normalmente” se dan: Orden LINEAL si sólo se tiene una llamada recursiva, con Orden LINEAL si sólo se tiene una llamada recursiva, con

incrementos o decrementos en el parámetro de control.incrementos o decrementos en el parámetro de control. Orden LOGARITMICO si sólo se tiene una llamada Orden LOGARITMICO si sólo se tiene una llamada

recursiva, con multiplicaciones o divisiones en el recursiva, con multiplicaciones o divisiones en el parámetro de control.parámetro de control.

Si hay más de una llamada recursiva, el orden puede Si hay más de una llamada recursiva, el orden puede tender a ser EXPONENCIAL.tender a ser EXPONENCIAL.

Page 26: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Ejemplo: Fibonacci (Iterativo)Ejemplo: Fibonacci (Iterativo)

ant = 1;ant = 1; --> 1--> 1act = 1;act = 1; --> 1--> 1while (n>2)while (n>2){{ --> n-2 + 1--> n-2 + 1 aux = ant + act;aux = ant + act; --> n-2--> n-2 ant = act;ant = act; --> n-2--> n-2 act = aux;act = aux; --> n-2--> n-2 n = n - 1;n = n - 1; --> n-2--> n-2}} --> n-2--> n-2+1+1write (act);write (act); --> 1--> 1

T(n) = 6n-7

Por lo tanto el orden del algoritmo es O(n)O(n)

Page 27: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Ejemplo: Fibonacci (recursivo)Ejemplo: Fibonacci (recursivo)

Function fibonacci (n:int): int;Function fibonacci (n:int): int;

if (n < 3) return 1;if (n < 3) return 1;

else return fibonacci(n-1) + fibonacci(n-2);else return fibonacci(n-1) + fibonacci(n-2); ¿Cómo obtener la complejidad de tiempo del ¿Cómo obtener la complejidad de tiempo del

algoritmo?algoritmo? Cantidad de llamadas recursivas: Cantidad de llamadas recursivas: 2 en cada 2 en cada

llamada.llamada. Algoritmo de orden: Algoritmo de orden: O(2O(2n/2n/2))

Page 28: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Análisis de Fibonacci Análisis de Fibonacci (recursivo)(recursivo)

¿Cuántos términos ¿Cuántos términos se requieren para se requieren para calcular:calcular:

f(5)?f(5)?

f(4)?f(4)?

f(3)?f(3)?

f(2)?f(2)?

f(6)?f(6)?

f(5)

f(3)

f(1) f(2)

f(4)

f(2) f(3)

f(1) f(2)

--> 9--> 5--> 3--> 1--> 15

Relación:El término T(n) requiereT(n-1)+T(n-2)+1 términos para calcularse.

Page 29: Las matemáticas como medio para medir la eficiencia de los Algoritmos Computacionales

Análisis de FibonacciAnálisis de Fibonacci

Si el término Si el término T(n)T(n) requiere requiere T(n-1)+T(n-T(n-1)+T(n-2)+12)+1 términos para calcularse… términos para calcularse…

se puede decir que se puede decir que T(n) > 2 * T(n-2)T(n) > 2 * T(n-2) …… y por lo tanto: y por lo tanto: T(n) > 2 * 2 * T(n-4)T(n) > 2 * 2 * T(n-4) … … y y T(n) > 2 * 2 * 2 * T(n-6)T(n) > 2 * 2 * 2 * T(n-6) …… y así sucesivamente hasta: y así sucesivamente hasta:

T(n) > 2 * 2 * 2 * …. * 2 * T(1)T(n) > 2 * 2 * 2 * …. * 2 * T(1)

n/2 veces

Por lo tanto:T(n) > 2n/2

y podemos decir que el orden del

algoritmo es

O(2O(2n/2n/2))