Академический Документы
Профессиональный Документы
Культура Документы
DINÁMICOS
ESTRUCTURAS DE DATOS
CONJUNTOS DINÁMICOS
2
Fundamentos de Análisis y Diseño de Algoritmos
CONJUNTOS DINÁMICOS
3
Fundamentos de Análisis y Diseño de Algoritmos
OPERACIONES
4
Fundamentos de Análisis y Diseño de Algoritmos
OPERACIONES
5
Fundamentos de Análisis y Diseño de Algoritmos
OPERACIONES
6
Fundamentos de Análisis y Diseño de Algoritmos
PILAS
Definición:
Estructura de datos donde los elementos pueden ser
añadidos o removidos solo por un extremo.
Ejemplos:
•Pila de llamadas a funciones recursivas
•Llamadas a subprogramas
•Evaluación de expresiones postfijas
•Equilibrado de símbolos
7
Fundamentos de Análisis y Diseño de Algoritmos
REPRESENTACIÓN DE PILAS
1 2 3 4 5 6
8
Fundamentos de Análisis y Diseño de Algoritmos
OPERACIONES BASICAS CON PILAS
9
Fundamentos de Análisis y Diseño de Algoritmos
ALGORITMOS DE PILA
Stack-Empty(S)
1 if top[S] = 0
2 then return true
3 else return false
10
Fundamentos de Análisis y Diseño de Algoritmos
ALGORITMOS DE PILA
Push(S,x)
1. top[S] top[S] + 1
2. S[top[S]] x
11
Fundamentos de Análisis y Diseño de Algoritmos
ALGORITMOS DE PILA
Pop(S)
1 if Stack-Empty(S)
2 then error “underflow”
3 else top[S] top[S] – 1
4 return S[top[S] + 1] Si a una pila vacía se
le aplica la operación
Pop, se dice que la
pila esta underflow
(desbordada en su
mínima capacidad).
12
Fundamentos de Análisis y Diseño de Algoritmos
Ejemplo
Inicio:
C
B B B
A A A A
13
Fundamentos de Análisis y Diseño de Algoritmos
Aplicaciones de Pilas
Recursión
// Funcion factorial
public static int factorial(int n) {
if (n<=1) return 1;
else return n*factorial(n-1);
}
14
Fundamentos de Análisis y Diseño de Algoritmos
Aplicaciones de Pilas
Control de secuencia de programas.
15
Fundamentos de Análisis y Diseño de Algoritmos
COLAS
Ejemplos:
16
Fundamentos de Análisis y Diseño de Algoritmos
REPRESENTACIÓN USANDO
ARREGLOS
A F S D Z
HEAD[Q]=1 TAIL[Q]=6
Al comienzo HEAD[Q]=TAIL[Q]=1
17
Fundamentos de Análisis y Diseño de Algoritmos
OPERACIONES BÁSICAS EN COLAS
SIMPLES
ENQUEUE: Encolar
DEQUEUE: Desencolar
18
Fundamentos de Análisis y Diseño de Algoritmos
OPERACIONES CON COLAS
Enqueue(Q,x)
1 Q[tail[Q]] x
2 if tail[Q] = length[Q]
3 then tail[Q] 1
4 else tail[Q] tail[Q] + 1
19
Fundamentos de Análisis y Diseño de Algoritmos
OPERACIONES CON COLAS
Dequeue(Q)
1 x Q[head[Q]]
2 if head[Q] = length[Q]
3 then head[Q] 1
4 else head[Q] head[Q] + 1
5 return x
20
Fundamentos de Análisis y Diseño de Algoritmos
LISTAS ENLAZADAS
21
Fundamentos de Análisis y Diseño de Algoritmos
LISTAS ENLAZADAS
Ejemplos:
inicio
*Lista enlazada de 0 elementos
Información enlace
inicio
* Lista enlazada de 4 elementos
22
Fundamentos de Análisis y Diseño de Algoritmos
LOS NODOS DE LAS LISTAS
Key next
Nodo
23
Fundamentos de Análisis y Diseño de Algoritmos
LISTAS DOBLES
24
Fundamentos de Análisis y Diseño de Algoritmos
EJEMPLOS
Lista Vacía
inicio = fin =
Head A
Head A B C
25
Fundamentos de Análisis y Diseño de Algoritmos
OPERACIONES CON LISTAS
List-Search(L,k)
1 x head[L]
2 while x != nil and key[x] != k
3 do x next[x]
4 return x
26
Fundamentos de Análisis y Diseño de Algoritmos
OPERACIONES CON LISTAS
List-Insert(L,x)
1 next[x] head[L]
2 if head[L] != nil
3 then prev[head[L]] x
4 head[L] x
5 prev[x] nil
27
Fundamentos de Análisis y Diseño de Algoritmos
OPERACIONES CON LISTAS
List-Delete(L,x)
1 if prev[x] !=nil
2 then next[prev[x]] next[x]
3 else head[L] next[x]
4 if next[x] != nil
5 then prev[next[x]] prev[x]
28
Fundamentos de Análisis y Diseño de Algoritmos
TABLAS DE DIRECCIONAMIENTO
DIRECTO
29
Fundamentos de Análisis y Diseño de Algoritmos
TABLAS DE HASH
30
Fundamentos de Análisis y Diseño de Algoritmos
TABLAS DE HASH
Tabla de Hash
Universo de Claves 1
U
2
5 8 0 2
3
Función de
6 hash o 4
1 función de
mapeo 5
Claves 3
Almacenadas 6
(K) 4
7
7
8
9
9
31
Fundamentos de Análisis y Diseño de Algoritmos
TABLAS DE HASH
Chained-Hash-Insert(T,x)
List-Insert(T[h(key[x])], x)
Chained-Hash-Search(T,k)
List-Search(T[h(k)], k)
Chained-Hash-Delete(T,x)
List-Delete(T[h(key[x])], x)
Costos?
33
Fundamentos de Análisis y Diseño de Algoritmos
TABLAS DE HASH
• Factor de Carga. α = n/ m
• Teorema:
En una tabla hash en la cual las colisiones son resueltas
con encadenamiento, una búsqueda sin éxito toma un
tiempo O(1+ α), en promedio, bajo la suposición de
hashing uniforme simple.
34
Fundamentos de Análisis y Diseño de Algoritmos
TABLAS DE HASH
• Método de la Multiplicación:
1. Se multiplica la llave k por una constante A en el
rango 0 < A < 1 y se extrae la parte fraccionaria de
kA.
• Método de la Multiplicación:
36
Fundamentos de Análisis y Diseño de Algoritmos
TABLAS DE HASH
• Método de la División:
• Método de la División:
38
Fundamentos de Análisis y Diseño de Algoritmos
ARBOLES DE BUSQUEDA
BINARIA
29
35
39
Fundamentos de Análisis y Diseño de Algoritmos
PROPIEDAD DE UN ÁRBOL DE
BÚSQUEDA BINARIA
5 2
3
3 7
7
2 5 8
5 8
5
40
Fundamentos de Análisis y Diseño de Algoritmos
Ejemplo
41
Fundamentos de Análisis y Diseño de Algoritmos
RECORRIDO DE UN ÁRBOL DE
BÚSQUEDA BINARIA
INORDER-TREE-WALK(x)
1. if x ≠ NIL
2. then INORDER-TREE-WALK(left[x])
3. print key[x]
4. INORDER-TREE-WALK(right[x])
42
Fundamentos de Análisis y Diseño de Algoritmos
RECORRIDO DE UN ÁRBOL DE
BÚSQUEDA BINARIA
43
Fundamentos de Análisis y Diseño de Algoritmos
CONSULTAS EN A.B.B.
44
Fundamentos de Análisis y Diseño de Algoritmos
BÚSQUEDA
TREE-SEARCH (x, k)
1 if x= NIL or k = key[x]
2 then return x
3 if k < key[x]
4 then return TREE-SEARCH(left[x], k)
5 else return TREE-SEARCH(right[x], k)25
45
Fundamentos de Análisis y Diseño de Algoritmos
BÚSQUEDA
ITERATIVE-TREE-SEARCH(x, k)
1 while x ≠ NIL and k ≠ key[x]
2 do if k < key[x]
3 then x ← left[x]
4 else x ← right[x]
5 return x
46
Fundamentos de Análisis y Diseño de Algoritmos
MINIMUM AND MAXIMUM
TREE-MINIMUM
(x)
1 while left[x] ≠ NIL
2 do x ← left[x]
3 return x
TREE-MAXIMUM(x)
1 while right[x] ≠ NIL
2 do x ← right[x]
3 return x
47
Fundamentos de Análisis y Diseño de Algoritmos
SUCCESSOR AND PREDECESSOR
TREE-SUCCESSOR(x)
1 if right[x] ≠ NIL
2 then return TREE-MINIMUM (right[x])
3 y ← p[x]
4 while y ≠ NIL and x = right[y]
5 do x ← y
6 y ← p[y]
7 return y
48
Fundamentos de Análisis y Diseño de Algoritmos
INSERCIÓN
TREE-INSERT(T, z)
1 y ← NIL
2 x ← root[T]
3 while x ≠ NIL
4 do y ← x
5 if key[z] <= key[x]
6 then x ← left[x]
7 else x ← right[x]
8 p[z] ← y
9 if y = NIL
10 then root[T] ← z
11 else if key[z] < key[y]
12 then left[y] ← z
13 else right[y] ← z
49
Fundamentos de Análisis y Diseño de Algoritmos
EJEMPLO
TREE-INSERT(T, z)
1 y ← NIL
Usar el algoritmo de 2 x ← root[T]
inserción para insertar 3 while x ≠ NIL
el nodo con Key 16 en 4 do y ← x
el siguiente árbol: 5 if key[z] <= key[x]
6 then x ← left[x]
7 else x ← right[x]
8 p[z] ← y
9 if y = NIL
10 then root[T] ← z
11 else if key[z] < key[y]
12 then left[y] ← z
13 else right[y] ← z
50
Fundamentos de Análisis y Diseño de Algoritmos
ELIMINACIÓN
TREE-DELETE(T, z)
1 if left[z] = NIL or right[z] = NIL
2 then y ← z
3 else y ← TREE-SUCCESSOR(z)
4 if left[y] ≠ NIL 9 if p[y] = NIL
10 then root[T] ← x
5 then x ← left[y] 11 else if y = left[p[y]]
6 else x ← right[y] 12 then left[p[y]] ← x
13 else right[p[y]] ← x
7 if x ≠ NIL 14 if y ≠ z
8 then p[x] ← p[y] 15 then key[z] ← key[y]
16 copy y's satellite data into z
17 return y
51
Fundamentos de Análisis y Diseño de Algoritmos