Algoritmos Iterativos — Patrones y Costos
Patrones de ciclos, búsqueda secuencial, crecimiento de funciones y comparación formal mediante límites.
3.1 Patrones típicos de ciclos
Patrones típicos de ciclos iterativos
| Patron | Estructura | Ejecuciones del cuerpo | Costo típico |
|---|---|---|---|
| for simple | for i <- 1 to n | ||
| for anidado (límite fijo) | for i... for j <- 1 to n | ||
| for anidado (límite variable) | for i... for j <- 1 to i | ||
| while con duplicación | while j<=n: j<-j*2 | ||
| for + while interno | for i... while j<=n: j*=2 |
3.2 Busqueda Secuencial — Análisis por casos
int BusquedaSecuencial (E int A[n], E int x) {
i <- 1 # C1 * 1
while (A[i]<>x) and (i<=n) # C2 * (n+1) en peor caso
i <- i + 1 # C3 * n
endwhile
if (i <= n) then # C4 * 1
return i
else
return -1 # C5 * 1
},. Sino está en el arreglo, retorna.
Análisis por casos de búsqueda secuencial
| Caso | Distribucion de entrada | Función de Eficiencia |
|---|---|---|
| Mejor caso | está en(primera posición) | |
| Peor caso | no está en el arreglo | (lineal) |
| Caso promedio | puede estar en cuálquier posición con igual probabilidad | (lineal) |
¿Es tan malo como que esté en la última posición? No. Si no está en el arreglo, el algoritmo llega al final y hace una verificación más (la que causa la salida). Por eso el peor caso es que no esté.
3.3 Tabla de Crecimiento de Funciones Comunes
Esta tabla es fundamental para comparar funciones rápidamente. Cuanto más arriba en la tabla, más lenta crece la función (mejor). Cuanto más abajo, más rápido crece (peor).
Tabla de crecimiento de funciones comunes
| Orden | Nombre | n=10 | n=100 | n=1000 | Comportamiento |
|---|---|---|---|---|---|
| Constante | 1 | 1 | 1 | Ideal. No depende de n. | |
| Logaritmica | 3.32 | 6.64 | 9.97 | Excelente. Crece muy lento. | |
| Lineal | 10 | 100 | 1, 000 | Bueno. Crece proporcional. | |
| Linealitmica | 33 | 664 | 9, 966 | Aceptable (ej: Merge Sort). | |
| Cuadratica | 100 | 10, 000 | 1, 000, 000 | Lento para n grande. | |
| Cubica | 1, 000 | 1, 000, 000 | Muy lento. | ||
| Exponencial | 1, 024 | Inmanejable para n grande. | |||
| Factorial | 3, 628, 800 | inmenso | inmenso | Practicamente imposible. |
Orden de crecimiento (de menor a mayor)
En logaritmos, si no aparece la base, se asume base 2 (convención del curso).
3.4 Como comparar funciones correctamente
La manera correcta de comparar funciones no es graficando ni tabulando. Se usan desigualdades y límites.
Método de los límites
Para comparary, calculamos:
Interpretación del límite para comparar funciones
| Resultado L | Significado | Relacion |
|---|---|---|
| crece más rápido que | crece más lento que | |
| L = constante | ycrecen a la misma velocidad | Son del mismo orden |
| crece más rápido que | domina a |
Ejemplo
Comparary.
Cálculo del límite
es una constante positiva. Entoncesyson del mismo orden. Crecen a la misma velocidad.