Академический Документы
Профессиональный Документы
Культура Документы
Qu es un algoritmo?
(del rabe al-Khowrizm, sobrenombre
del clebre matemtico rabe Mohmed ben Musa). Conjunto ordenado y finito de operaciones que permite encontrar la solucin a un problema
Cita...
No hay un incremento concebible en el poder de las
computadoras que pueda saturar la demanda cientfica: an pensando que una computadora posea un ciclo de tiempo subnuclear (10-23 seg.) y densidades de almacenamiento subnucleares (1039 bits/cm3), sta no podra manejar la mayora de los problemas que son importantes en la investigacin cientfica bsica y aplicada. Por lo tanto, existir siempre una fuerte presin para incrementar la eficiencia de los programas, para poder incrementar tambin la cantidad de informacin ltil generada por un programa. Ken Wilson, Nbel de Fsica 1982
reas de estudio
Cmo construir algoritmos?
Tcnicas de diseo
Anlisis de algoritmos
Si se tuvieran 2 programas que hacen lo
mismo, cmo se podran comparar?
1. Eficiencia: Tiempo de ejecucin Uso de espacios de memoria 2. Facilidad de lectura, mantenimiento, rapidez para codificarlo.
2. La calidad del cdigo generado para el programa por el compilador . 3. La rapidez de las instrucciones de mquina. 4. La complejidad de tiempo del algoritmo.
Cmo medir?
Cantidad de instrucciones bsicas (o
elementales) que se ejecutan. Ejemplos de instrucciones bsicas:
asignacin de escalares lectura o escritura de escalares saltos (gotos) implcitos o explcitos. evaluacin de condiciones llamada a funciones etc.
Ejemplo
cont = 1; while (cont <= n) do { x = x + a[cont]; x = x + b[cont]; cont = cont + 1; }
1 n+1 n n n n (goto implcito) 1 goto en falso.
TOTAL: 5n + 3
Ejemplo
z = 0; for (int x=1; x<=n; x++) for (int y=1; y<=n; y++) z = z + a[x,y];
1 1 asignacin + (n+1) comparaciones (n+2)*n = n2 +2n n*n = n2 2n2 (incremento + goto implcito) n (goto en falso for y) 2n (incremento + goto implcito) 1 (goto en falso for x) TOTAL: 4n2 + 6n + 4
Consecuencia
Se requiere contar con una notacin que permita
comparar la eficiencia entre los algoritmos La NOTACIN ASINTTICA es la propuesta de notacin aceptada por la comunidad cientfica para describir el comportamiento en eficiencia (o complejidad) de un algoritmo. Describe en forma sinttica el comportamiento de la funcin que con la variable de entrada, determina el nmero de operaciones que realiza el algoritmo.
NOTACIN ASINTTICA
COMPLEJIDAD TEMPORAL (y ESPACIAL).
Tiempo (o espacio) requerido por un algoritmo, expresado en base a una funcin que depende del tamao del problema. COMPLEJIDAD TEMPORAL ASINTTICA (y ESPACIAL). Comportamiento lmite conforme el tamao del problema se incrementa. Determina el tamao del problema que puede ser resuelto por un algoritmo.
Definicin
Se dice que la funcin f(n) es de orden g(n)
[O(g(n))], si existen constantes positivas c y n0 tales que f(n) <= c g(n) cuando n >= n0 Ejemplos: n+5 es O(n) pues n+5 <= 2n para toda n >= 5 (n+1)2 es O(n2) pues (n+1)2 <= 4n2 para n>= 1 (n+1)2 NO es O(n) pues para cualquier c > 1 no se cumple que (n+1)2 <= c*n
n sqrt(n
n log n n
log n
O(gm(n))
Regla 2: Decisiones
O( mayor(g1(n), g2(n)) )
O(g1(n))
O(g2(n)) Ejemplo: Una decisin con:
Rama then = O(n log n) Rama else = O(log n)
Regla 3: Ciclos
O( m * g(n) )
O(g(n)) Se repite m veces Ejemplo: Un ciclo cuya instruccin:
Tiene un O(log n) Se repite n/2 veces
Consideraciones especiales
En decisiones y ciclos anidados:
Analizar el cdigo desde la instruccin ms interna hacia el ms externa.
for (int i=1; i<n; i++) for (int j=i+1; j<=n;j++) if (a[ j ] < a[ i ]) intercambia(a[ i ], a[ j ]); O( 1 )
O( 1 )
Peor caso: se repite n-1 veces for (int i=1; i<n; i++) for (int j=i+1; j<=n;j++) if (a[ j ] < a[ i ]) O( n ) O( 1 ) intercambia(a[ i ], a[ j ]);
O( n )
O( n2 )
c21 = a21*b11+a22 *b21 ++ a2n *bn1 cmm = am1*b1m+am2 *b2m ++ amn *bnm
cij =
aikbkj
k=1
Regla 4: Recursividad
La complejidad de tiempo se obtiene contando la cantidad
de veces que se hace la llamada recursiva. Casos que normalmente se dan: Orden LINEAL si slo se tiene una llamada recursiva, con incrementos o decrementos en el parmetro de control. Orden LOGARITMICO si slo se tiene una llamada recursiva, con multiplicaciones o divisiones en el parmetro de control. Si hay ms de una llamada recursiva, el orden puede tender a ser EXPONENCIAL.
T(n) = 6n-7
f(1)
f(2)
f(2)
f(1)
f(3)
f(2)
Cuntos trminos se requieren para calcular: f(5)? --> 9 f(4)? --> 5 f(3)? --> 3 --> 1 f(2)? --> 15 f(6)?
Anlisis de Fibonacci
Si el trmino T(n) requiere T(n-1)+T(n
2)+1 trminos para calcularse se puede decir que T(n) > 2 * T(n-2) y por lo tanto: T(n) > 2 * 2 * T(n-4) Por lo tanto: y T(n) > 2 * 2 * 2 * T(n-6) T(n) > 2n/2 y as sucesivamente hasta: y podemos decir que el orden del T(n) > 2 * 2 * 2 * . * 2 * T(1)
algoritmo es n/2 veces
O(2n/2)