Professional Documents
Culture Documents
Algoritmos
Un algoritmo es una definición exacta,
ee
1
Ordenación por inserción
crear una lista temporal vacía, tempList
para cada elemento, x, de la lista sortList
para cada elemento a de tempList
si x<=a,
insertar x en tempList antes de a
continuar con el siguiente x
añadir x a tempList
cambiar tempList por sortList
Hipótesis de ordenación
• Los elementos de la lista se pueden comparar
y ordenar
• La lista tiene su propio orden, un inicio
y un fin
• Se pueden realizar iteraciones sobre la lista
(actuar sobre cada uno de los elementos en orden)
• Se pueden insertar nuevos elementos en la lista
2
Abstracciones aplicables a la ordenación
Estructuras de datos
• La interfaz List define una estructura de
datos.
• Las estructuras de datos y los algoritmos
suelen guardar entre sí una relación simbiótica:
– Las interfaces List sirven para muchos algoritmos
– Muchos algoritmos se pueden aplicar a diversas
estructuras de datos (p. ej., también se pueden
ordenar los datos de una matriz)
3
Tipos de datos abstractos y concretos
4
Colas
Se entiende por cola una estructura de datos en
la que se añaden nuevos ítems en un extremo
y se suprimen ítems viejos en el opuesto.
Adición Supresión
de ítems de ítems
Y de un tercero:
cabeza
3 2 1
cola
10
5
Operaciones con colas (2)
Supresión de un ítem:
cabeza
3 2
cola
Supresión de un tercero:
cabeza
4 3
cola
11
Interfaz Queue
12
6
Aplicaciones de las colas
• Las colas se utilizan en muchos algoritmos y en
situaciones en las que el rendimiento de dos
sistemas que se cruzan datos entre sí es más eficiente
cuando no se intercambian indicativos y señales de
control (handshaking) en cada transferencia.
• También almacenan temporalmente la transferencia
de información, lo que permite procesarla
en origen y en destino a tasas independientes.
• La cola de eventos en Java es un buen ejemplo.
• Tipos derivados: colas de prioridad y flujos de datos
13
Pilas Adición
y
supresión
insertar
• A diferencia de las de ítems
sacar
colas, en las pilas
los ítems se añaden
y se eliminan en el
n+1
mismo extremo.
n
• Las pilas se conocen también
como colas LIFO (último en .
entrar, primero en salir), para .
.
diferenciarlas de las colas FIFO
(primero en entrar, primero) 2
en salir) al describir 1
el tipo de cola básico.
14
7
Operaciones con pilas
Insertar 1 Insertar 2 Insertar 3
cima cima
1 2 3
1 2
1
Sacar 3 Sacar 4
cima
cima
3
4
2
2
1
1
15
16
8
Interfaz S tack
17
9
Implementación de pilas basada en arrays
19
ArrayStack , 1
public ArrayStack() {
this( DEFAULT_CAPACITY );
} 20
10
Array Stack , 2
21
Array Stack , 3
22
11
Array Stack , 4
23
Dos supuestos:
1. front < rear
0 ... front front+1 ... rear- 1 rear ... tamaño-1
ocupado
ocupado ocupado
24
12
Estructura circular de las colas basadas en arrays
inicio de fin de
rear -1 rear
tamaño-1 front la cola la cola
0 tamaño-1 0
front+1 rear+1
... ...
... ...
rear+1
front+1
rear rear -1
front ...
fin de inicio de
la cola 25
la cola
Array Queue , 1
13
Array Queue , 2
Array Queue , 3
28
14
Aumento del tamaño de un ArrayQueue
Supuesto básico:
front < rear, antes
0 ... front ... rear ... tamaño -1
ocupado
29
ocupado ocupado
30
15
Array Queue , 4
if ( size == 0 ) return;
else if ( front <= rear ) {
System.arraycopy(old, front, queue, front, size );
} else if ( rear < front ) {
System.arraycopy(old, 0, queue, 0, rear + 1);
System.arraycopy(old, front, queue,
front + oldCapacity, oldCapacity - front );
front += oldCapacity;
}
} 31
16