






















































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Analisis y Diseño de Algoritmos, Profesor: , Carrera: I.T.I. Sistemas, Universidad: UMA
Tipo: Apuntes
1 / 62
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!























































ÍndiceÍndice^
I.
Complejidad ◦ 1. 1 Introducción ◦ 1.2 Eficiencia de un algoritmo ◦ 1.3 Noción de complejidad. Determinación del tiempo deejecución ◦ 1.4 Cotas de complejidad. Notación asintótica
◦^
1.4 Cotas de complejidad. Notación asintótica^ ^
1.4.1 Cota superior. Orden O ^
1.4.2 Cota inferior. Orden Ω ^
1.4.3 Orden exacto. Orden
Θ
1.1 Introducción1.1 Introducción^
¿Cómo resolver un problema?^ ◦
1º. Especificarlo. ◦ 2º.
Diseñar
una posible solución.
◦^
3º. Expresarlo mediante un lenguaje de
◦^
3º. Expresarlo mediante un lenguaje de programación. ◦^
4º.Validar y verificar lo realizadoanteriormente. ◦^
5º. Por último, se
evalúa
.
1.2 Eficiencia de un algoritmo1.2 Eficiencia de un algoritmo^
Diseñar la solución
◦^
¿Qué método o algoritmo seguir para resolver un problema? Seaplicarán métodos a problemas diferentes pero concaracterísticas comunes. ◦^
¿Cuál es el objetivo?^ Crear nuevos y mejores algoritmos.
Crear nuevos y mejores algoritmos. ◦^
¿Qué factores tendremos en cuenta?Eficiencia en la programación:
Facilidad de programación,
claridad, robustez, etc.Eficiencia empresarial:
relación entre los recursos consumidos y
los productos conseguidos.
1.2 Eficiencia de un algoritmo1.2 Eficiencia de un algoritmo^
Recursos que requiere un algoritmo.
1.2 Eficiencia de un algoritmo1.2 Eficiencia de un algoritmo^
¿Cómo cuantificamos el tiempo? Operaciones elementales.
◦^
Operación elemental:
operación mínima cuyo tiempo de ejecución se
puede acotar superiormente por una constante que dependeráexclusivamente de la implementación utilizada: factores externos. Por lotanto, la constante no depende del tamaño ni de la naturaleza de los datosde entrada. ◦^
Ejemplos de operaciones elementales:
suma, acceso a tablas, asignación…
◦^
Ejemplos de operaciones elementales:
suma, acceso a tablas, asignación…
^
Análisis: se utilizará sólo el número de operaciones elementalesejecutadas, y no el tiempo requerido para ellas.^ ◦^
Será dependiente de los factores externos.
1.31.
Determinación del tiempo deDeterminación del tiempo de ejecuciónejecución^
¿Cómo medimos la eficiencia teórica de un algoritmo?
◦^
Tiempo:
NO, puesto que dependería del ordenador donde se
ejecutara. ◦^
t(n) = tiempo de ejecución del algoritmo i para una entrada dei tamaño n. ◦
◦^
Principio de Invarianza:
SI, no depende del ordenador en el que
se ejecuta. La eficiencia de dos implementaciones diferentes delmismo algoritmo difiere únicamente en una constantemultiplicativa.
^
Principio de Invarianza^ ◦^
Si tenemos dos implementaciones de un mismo algoritmo detamaño
n
que tardan t
(n) y t 1
(n) segundos en ejecutarse, existe 2
una constante positiva
c
tal que para todo
n
se verifica que:
t(n) ≤^1
c
t(n).^2
1.3 Determinación del tiempo de1.3 Determinación del tiempo deejecuciónejecución^
Eficiencia temporal
◦^
Se valora el tiempo de ejecución, es decir,
“lo rápido que se ejecuta”.
◦^
Enfoque empírico(a posteriori)
mide exactamente el tiempo de
ejecución. Se programan los algoritmos y se ejecutan para diferentessituaciones del problema.^ ^
Desventajas:^ ^
◦^
Enfoque teórico(a priori)
calcula una función matemática que
determina el tiempo de ejecución en función del tamaño de los datosde entrada del programa.^ ^
Ventajas:^ ^
1.3 Determinación del tiempo de1.3 Determinación del tiempo deejecuciónejecución^
Ejemplo:
Ordenación por inserción
//@ pre: true
public static void insercion (int [] a) {
int pos, tmp, j; for ( pos = 1; pos < a.length; pos++ ) {
tmp = a[pos];
tmp = a[pos]; j = pos-1;while ( 0 <= j
ЄЄ
tmp < a[j] ) {
a[j+1] = a[j];j--;
} a[j+1] = tmp;} }
1.3 Determinación del tiempo de1.3 Determinación del tiempo deejecuciónejecución^
Idea clave:
para cada paso i, quedan ordenados los elementos a
, …, 1
ai-
y se inserta entre ellos el elemento a
, quedando ordenados losi
elementos a
, …, a 1
.i
^
Ordenar la siguiente colección de datos de entrada:^ ◦^
3
1
9
7
5
23
15
20
◦^
3
1
9
7
5
23
15
20
^
Paso 1:
Numerar las líneas de código.
^
Paso 2:
Determinar las operaciones elementales.
^
Paso 3:
Estudiar los diferentes casos(mejor, promedio y peor).
1.3 Determinación del tiempo de1.3 Determinación del tiempo deejecuciónejecución^
Pasos 1 y 2: //@ pre: true
public static void insercion (int [] a) {
int pos, tmp, j; (1)
for ( pos = 2; pos <= a.length; pos++ ) {
2 o.e.
(2)
tmp = a[pos];
2 o.e.
1 o.e. al
2 o.e. al final
de cadaiteración
(2)
tmp = a[pos];
2 o.e.
(3)
j = pos-1;
2 o.e
(4)
while ( 0 < j
ЄЄ
tmp < a[j] ) {
4 o.e.
(5)
a[j+1] = a[j];
4 o.e
(6)
j--;
2 o.e.
}
(7)
a[j+1] = tmp;
3 o.e.
} }
1 o.e. al principio
.
1.3 Determinación del tiempo de1.3 Determinación del tiempo deejecuciónejecución
2
(^10)
(^10)
2
(^10)
(^10)
2
(^10)
2
(^10)
12
∑^ ∑
∑
∑
∑^
∑
∑
∑^
∑
∑^
∑
=
− =
− =
=
− =
− =
=
− =
=
− =
pos pos
k
pos
k
pos
pos
pos
k
pos
pos
k
pos
pos
n t
n pos n
pos k
pos k
n pos
pos k
pos k
n pos
pos k
n pos
pos k
Capítulo 1: Complejidad
2 2
2
2
2 2 2 2
∑
∑ ∑ ∑ ∑
=
= = = =^ n n
n
n
n
n
n
n
n
n n
pos pos
pos
pos
pos pos pos
pos^ n pos
n n pos n posn pos pos
1.3 Determinación del tiempo de1.3 Determinación del tiempo deejecuciónejecución^
¿Es mejor el algoritmo que tiene menos o.e.?^ ◦
El algoritmo A resuelve un problema usando 2
n^ o.e.
◦^
El algoritmo B lo resuelve haciendo uso de n
3 o.e.
◦^
Tenemos tres computadores diferentes:^ ^
Computador 1 realiza 10K o.e/seg ^
Computador 2 realiza 1M o.e./seg ^
Computador 3 realiza 100 o.e./seg