Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
Entrada Algoritmo Salida
2
• Para resolver un problema suele ser habitual disponer de
varios algoritmos.
– Ejemplo: para obtener el m.c.d. de dos números se puede:
• Cálculo de divisores
• Descomponer en factores primos
• Utilizar el Algoritmo de Euclides
3
4
5
Complejidad computacional y
asintótica
• Regla: La elección del algoritmo nunca debería afectar a la
corrección de la solución ni a la claridad (evitar algoritmos
incomprensibles).
• Excepción: A veces se eligen algoritmos aproximados o
heurísticos porque la solución correcta resulta inmanejable.
No alcanzan la solución óptima pero sí a una solución
aceptable.
– Ejemplos:
• Algoritmo aproximado: Cálculo de la raíz cuadrada
• Heurística: Problema del viajante
• Mito:
– La capacidad de computación es ilimitada, ¿por qué preocuparse
de la eficiencia si siempre podemos encontrar un sistema más
potente?
6
Complejidad computacional y
asintótica
COMPLEJIDAD COMPUTACIONAL
Indica el esfuerzo que hay que realizar para aplicar un
algoritmo y lo costoso que éste resulta.
7
Complejidad computacional y
asintótica
8
Complejidad computacional y
asintótica
9
Complejidad computacional y
asintótica
10
Complejidad computacional y
asintótica
Ejemplos:
Ordenación de un vector: número de elementos
Factorizar un número en sus factores primos: valor del
número
11
Complejidad computacional y
asintótica
Ejemplo:
buscar en un vector el valor que está almacenado en la primera
celda resulta trivial en la búsqueda lineal.
12
Complejidad computacional y
asintótica
• Factores que influyen en la complejidad
– Naturaleza de los datos de caso mejor
caso medio
entrada: caso peor
120
• Caso mejor: los datos de
entrada consumen el mínimo
Tiempo de ejecución
100
14
Complejidad computacional y
asintótica
• Enfoque empíricos o a posteriori
1. Escribir un programa que 9000
implemente el algoritmo, por
8000
ejemplo en Java.
7000
2. Ejecutar el programa con
entradas de tamaño y 6000
Tiempo (ms)
composición variadas 5000
3. Usar un método como
4000
System.currentTimeMillis()
para obtener una medida 3000
exacta del tiempo de 2000
ejecución real
1000
4. Trazar los resultados
0
0 50 100
15
Tamaño Entrada
Complejidad computacional y
asintótica
• Enfoque teóricos o a priori
16
Complejidad computacional y
asintótica
• Ventajas e inconvenientes
1. El estudio a posteriori requiere la implementación del algoritmo
(mayor coste). El estudio a priori solo requiere de una
descripción de alto nivel (pseudocódigo).
2. En el estudio a posteriori no tenemos la seguridad de los
recursos que realmente se van a consumir si varían las entradas.
El estudio a priori es independiente de los datos de entrada.
3. En el estudio a posteriori, los resultados sólo serán válidos para
unas determinadas condiciones de ejecución. Es difícil extrapolar
los resultados si se producen cambios en el hardware, sistema
operativo, lenguaje utilizado, etc. El estudio a priori es
independiente de las condiciones de ejecución.
4. El estudio a posteriori permite hacer una evaluación
experimental de los recursos consumidos que no es posible en el
estudio a priori.
17
Complejidad computacional y
asintótica
COMPLEJIDAD ASINTÓTICA
18
19
20
Fin de la clase.
21