Documentos de Académico
Documentos de Profesional
Documentos de Cultura
vA:
vA(k) ó vA[k]
– Array de registros
• Cada elemento del array es un registro con varios campos
A[1] A[k] A[N]
clave
cabeza(L) L
– Elemento básico:
• next(e) ó e.next
e • prev(e) ó e.prev (puede no existir)
• valor(e) ó e.valor
– Tipos de listas:
• Simples, doblemente enlazadas, circulares, ordenadas, ...
– Operaciones básicas:
• Insertar, sacar, buscar, borrar
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
-3
Estructuras de datos (IV)
• Listas enlazadas (ejemplo inserción) L = Insertar_Lista (L, x)
inicialmente: next(x) = next(nil(L));
prev(next(nil(L))) = x;
next(nil(L)) = x;
nil(L) 15 7 prev(x) = nil(L);
x 5
nil(L) 15 7 nil(L) 15 7
nil(L) 5 15 7
pila
• Con listas enlazadas
• Con array (conocido el tamaño 3 7 5 8 9 4 2
máximo de la pila) Sacar(P): : ult imo(P)
pila
3 7 5 8 94 2
ult imo(P)
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
-5
Estructuras de datos (VI)
• Colas Caja@
– Dinámica FIFO
– Restricción importante en el acceso a los datos
• Menos operaciones, más portable
– Aplicaciones:
• Se usan menos que las pilas Cola implantada con array C de 9 elementos
Cola
– Operaciones básicas:
• Insertar y sacar
8 5 4 7
– Implementación: pri mero(C) ult imo(C)
Insertar(C,9), Insertar(C,2), Insertar(C,3):
• Con listas enlazadas
• Con array (dado tño. máximo de la pila) 3 85 4 7 9 2
ult imo(C) pri mero(C)
Siguiente(C):
3 85 4 7 9 2
ult imo(C) pri mero(C)
– Terminología:
• padres, hijos, abuelos, tíos, ...
15
•
•
Raíz, terminales (hojas)
Altura, nivel
6 18
•
•
Subárbol, camino
Sucesor, antecesor
3 7 17 20
2 4 13
9
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
-7
Estructuras de datos (VIII)
• Árboles
– Tipos: binarios, n-arios (multicamino)
– Árbol vacío vs. completo (equilibrado)
15
– Los nodos terminales suelen ser distintos
6 18
(ficticios, sin hijos)
3 7 17 20
N IL N IL N IL N IL
2 4 N IL 13
N IL N IL N IL N IL N IL N IL
• Propiedades interesantes:
– Existe exactamente un único camino conectado 2 nodos en un árbol
– 2 nodos tienen al menos un ancestro común
– Un árbol con N nodos tiene N-1 arcos
– Un árbol binario con N nodos internos tiene N+1 terminales
– La altura de un árbol binario completo con N nodos internos es
aproximadamente log2(N)
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
-8
Estructuras de datos (IX)
• Árboles • Recorridos:
– Preorden: visitar 1º Padre, 2º Izq. y 3º Dcha.
– Se implementa sin recursividad con una pila
– Orden central (In order): visitar 1º Izq., 2º Padre y 3º Dcha.
– Es el más típico (usar pila para eliminar recursividad)
– Postorden: visitar 1º Izq. 2º Dcha. y 3º Padre
– Usar pila para evitar recursividad
– Por Niveles (Level-Order): arriba-abajo e Izq. a Dcha.
– Usar una cola
15 15 15
6 18 6 18 6 18
3 7 17 20 3 7 17 20 3 7 17 20
2 4 13 2 4 13 2 4 13
9 9 9
• Árboles multicamino:
padre(n) raiz(T)
hermano(n)
hijo_izq(n)
- 11
Proceso de creación: idea (I)
Análisis resultados
• Uso de prototipos: • Exactitud Diseño del algoritmo
– Validar ideas iniciales, • Eficiencia
• Usar pseudocódigo
detectar errores de concepto
– Empezar con algoritmos
simples para determinar el Implementación prototipo
beneficio de posibles
• Probar la idea codificando el algoritmo
mejoras del mismo
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
- 13
Proceso de creación: diseño
memoria Memoria
– Casos especiales (robustez del algoritmo) B
-
– Posibles mejoras del algoritmo
Ideal
• Acelerarlo y/o reducir consumo C
- Tiempo CPU +
m xn
N2 N3
N4 N5 N6
N7
• Ejemplos
– Existen elementos terminales en las estructuras que se usan
(inicio y fin normalmente)
– Naturaleza de la estructura (disposición ordenada de los
elementos, ...)
– Otras condiciones que no permiten tratar de igual forma todos los
elementos de la estructura
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
- 20
Ejemplo 1: Inserción directa (I)
2 4 9
mano
Cartas ya ordenadas
• Utilizando un vector de registros y ordenando sobre el
mismo (utilizando espacio auxiliar para un registro):
5 2 1 9 6 8
Es pac io d is ponible en
m em o r ia
1 For i=2 to N
carta = A[i]; % selecciona última carta
j=i-1; %
busca punto de inserción
2 While (j>0 & carta < A[j]) % alternando comparaciones
A[j+1]=A[j]; % y movimientos
j=j-1;
end 2
A[j+1]=carta; % inserta la carta
end 1
Inserción directa
Seleccionar el
siguiente Búsqueda
• Problema
– Dado un número, ¿es primo?
• Idea
– Un número es primo si sólo es divisible por sí mismo y por la unidad
• El 9 no es primo porque 9/3 = 3. El 5 sí porque no es divisible entre 4,3,2
• Diseño del Algoritmo
– Planteamiento (algoritmo informal):
• “Para saber si el número n es primo hay que dividir sucesivamente el
número n por 2, 3, 4, ... hasta (n-1). En cuanto una división sea exacta,
ya se sabe que no es primo. Si no ocurre nunca, es primo.”
– Pseudocódigo:
Flag_es_primo = EsPrimo (n)
¿? ¿Existen formas de
optimizar el algoritmo?
Fin
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
- 23
Ejemplo 3: Horas de punta/llano/valle
• Problema
– Dada una curva de demanda para un día, determinar las horas de
punta, llano y valle (fijado el número que se quieren tener de cada
tipo) 33
31 13
11 12 14 15 16 17 18 19
29 10
9 20 21 22 23
Consumo
27
25 Horas de PUNTA 24
El consumo horario de 8
electricidad de un país tiene 23
un perfil muy característico. 21 1 7
Para cada día, dicho perfil 19 2 3 6
4 5
queda representado por 24 17
valores, uno para cada Horas de VALLE
15
hora. Por ejemplo, en el
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
array A y la gráfica asociada
se muestra el perfil de 1
Hora N
consumo de España para el A: 21.2 19.5 18.8 18.5 18.4 19 21.4 24.2 27.3 29.1 30.2 30.5 31.1 29.8 29.4 29.5 29.9 30.3 29.7 28 28.1 28.5 28.3 25.3
lunes 14 de junio de 2004
(ver www.ree.es). np=5
nv=7 Algoritmo pedido
nll =12
1 np 1 nv
HP: 13 12 18 11 17 HV: 5 4 3 6 2 1 7
- 25
Paradigmas
• Cuando usarlo:
– No se dispone de mucho tiempo para pensar (desarrollo rápido)
– Se ejecutará pocas veces
1 M
P: 0 1 1 0 1
• Consiste en:
– Dividir el problema en subproblemas, similares al original, pero de
tamaño menor.
– Se solucionan los problemas recursivamente. Si es suficientemente
pequeño se resuelve directamente.
– Se combinan esas soluciones para construir la solución al problema
original.
Problema Soluci ón
ori ginal fi nal
• Esquema general
sol = DivideyVenceras (problema)
1 if EsPequeño (problema)
sol = ResolverDirectamente (problema);
Else 1
2 For i = 1 to M
sol_parciales[i] = DivideyVenceras (sub_problemas[i]);
end 2
end 1
Fin
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
- 31
Divide y vencerás: ejemplo (I)
PintaMarca(4,n-1) n
n-1 n-1
n-2
Ojo, en los
extremos no
hay marca 2n
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
- 32
Divide y vencerás: ejemplo (II)
• Dibujar una regla
– Ejemplo con n = 7 (aparecen 126 marcas)
• El aspecto de la regla se repite recursivamente ...
0,16,4
0,8,3 8,16,3
0,16,4
0,8,3 8,16,3
0,16,4
0,8,3 8,16,3
• Hipótesis de partida:
– Al menos existe una solución óptima, si hay varias equivalentes
• Esquema general
sol = Voraz (candidatos)
sol = { };
end 1
Fin
• Desglose de un importe
– Dado un importe, desglosarlo en el menor número de billetes y
monedas posible
– Útil en una máquina que tenga que devolver cambio (por ej. una
expendedora de billetes de metro)
• Se plantea utilizando un par de vectores:
1 N
• El vector de valores val: 50 20 10 5 2 1
de monedas está Desglose del importe
según las monedas con
ordenado de + a - importe: 123 los valores val,
minimizando el número
• Se supone que el de monedas
Devuelve el vector de
importe se puede
1 N cantidades (con el
desglosar número de monedas de
perfectamente cant: 2 1 0 0 1 1 cada tipo)
cant = ceros (N); % inicializa a ceros cant = ceros (N); % inicializa a ceros
i=1; i=1;
1 while (i N & importe > 0) 1 while (i N & importe > 0)
2 if (val(i) importe) 2 while (val(i) importe)
cant(i) = cant(i) + 1; cant(i) = cant(i) + 1;
importe = importe - val(i); importe = importe - val(i);
else 2 end 2
i = i + 1; i = i + 1;
end 2 end 1
end 1 Fin
cant = DesgloseVersion3 (importe, val, N)
Fin
cant = ceros (N); % inicializa a ceros
i=1;
• ¿Son teóricamente
1 while (i N & importe > 0) equivalentes en cuanto a
cant(i) = floor (importe / val(i)); tiempo de ejecución?
importe = mod (importe, val(i));
i = i + 1; • Desde el punto de vista
end 1 práctico ¿existirán
Fin diferencias?
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA
- 42
Algoritmo voraz: ejemplo (IV)
• Desglose de un importe
DesgloseVersion1
El tiempo de ejecución es
lineal con el importe a
desglosar en las tres
versiones (asintóticamente DesgloseVersion2
equivalentes), pero las
constantes reales son
claramente diferentes
DesgloseVersion3