Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1
CAPÍTULO II: INTRODUCCIÓN A LAS
ESTRUCTURAS DE DATOS
a) Dato
Representa una abstracción de la realidad, en el sentido de que
ciertas propiedades y características de un objeto real se
seleccionan para estudiar un problema concreto.
Por ejemplo: edad = 20 es un dato.
b) Tipo de dato
Tipificación que caracteriza esencialmente el conjunto de valores
al que pertenece una constante o sobre el que puede tomar valores
una variable o expresión, o cuyos elementos pueden ser generados
por una función.
2. 2
Lenguaje de provee
programación
Conjunto de operaciones
básicas asociadas a cada tipo
de dato.
• INTERSECCIÓN (A, B, C)
Datos: conjuntos A y B.
Resultado: conjunto C = A∩B, conjunto de elementos que son
miembros de A y B.
• DIFFERENCE (A, B, C)
Datos: conjuntos A y B.
Resultado: conjunto C = A-B, conjunto de elementos en A que no
pertenecen a B.
• MEMBER (x, A)
Datos: conjunto A; elemento x
Regresa: TRUE si X ∈ A y
FALSE si X ∉ A
2. 4
• MAKENULL (A)
Resultado: define A igual al conjunto vacío.
• INSERT (x, A)
Datos: conjunto A, elemento x
Resultado: A A ∪ {x}
Si x ya se encuentra en el conjunto, el procedimiento no modifica el
conjunto original.
TDA
Operacion-1 IMPLEMENTACIÓN
* Estructuras de Datos
Operacion -2
INTERFASE * Algoritmos de servicio
Operacion -3 * Procedimientos de
Operacion -4 Operaciones
2. 5
Ejemplo: Modelo STACK
Lista lineal en que la inserción y eliminación de un elemento son
realizados por un extremo (lista LIFO).
Operaciones :
PUSH : Ingresar elemento a la lista stack
Lista stack, Elemento
Lista stack ∨ Stack-Full
a) Arreglos
• Mecanismo de agregación más sencillo en la mayor parte de los
lenguajes de programación.
• Es a veces, el único medio para crear estructuras de datos.
• Es una sucesión de celdas de un tipo dado. Se define por:
tipo_celda nombre_array[tipo_indice];
Representación de Arreglos
La memoria puede ser manejada como una secuencia de bytes
numerada de 1 a m.
Si el arreglo está declarado como:
A(l1:u1;l2:u2;...;ln:un)
entonces el número de elementos es :
n
∏i = 1
( u i − l i + 1 )
i) Arreglo unidimensional
l1 u1
A(l1:u1)
dirección : A(I) = α + I – 1 (α dirección base)
Ejemplo de cálculo de la dirección de un elemento de un arreglo unidimensional
α
0 9 10 11 12 13 14 15
A(5) = 10 + 5 – 1 = 14
u 2 – l2 + 1
ii) Arreglo bidimensional
u 1 – l1 + 1
A(l1:u1;l2:u2)
dirección : A(I,J) = α + (I – 1) (u2 – l2 + 1) + (J – 1)
2. 10
Ejemplo de cálculo de la dirección de un elemento de un arreglo bidimensional
α
1 ,1 1 ,2 1 ,3 2 ,1 2 ,2 2 ,3
A(2,3) = α + 1 • 3 + 2 = α + 3 + 2 = α + 5
A(l1:u1;l2:u2;l3:u3)
dirección : A(I,J,K) = α + (I – 1) (u2 – l2 + 1) (u3 – l3 + 1)
+ (J – 1) (u3 – l3 + 1) + (K + 1)
b) Registros
• Mecanismo más general para la obtención de tipos
estructurados.
• Un registro es una celda constituida por un conjunto de celdas
llamadas campos, que pueden ser de tipos distintos.
2. 11
Ejemplos
struct nombre_record{
char * nombre; Nombre NºM at Carrera FNac. Sexo
int nºmat;
int carrera;
double fnac;
int sexo;
};
1 d a ta n e x t
struct nombre_record{
double data;
int next;
} rlist[40]; •
•
•
40
c) Punteros
• Mecanismo para representar relaciones entre celdas de una
estructura de datos.
• Un puntero es una celda cuyo valor indica o señala a otra.
n
DATA L IN K
L IN K (n )
En Pascal: En C, sería:
Var ptr : ↑tipo_celda struct tipo_celda *ptr
Diseño de la interfaz:
struct nodo{
int dato;
nodo *siguiente;
}
class cPila {
//Atributos privados
nodo *top;
//Métodos públicos
cPila():top(NULL){}
~cPila(){limpia();}
void limpia();
void poner(int i);
int sacar();
int tamaño();
};
2. 13
Implementación:
void cPila::poner(int i)
{
nodo *p = new nodo;
p->dato = i;
p->siguiente = top;
top = p;
}
int cPila::sacar()
{
if (top != NULL)
{
int d = top->dato;
node *p = top;
top = top->siguiente;
delete p;
return d;
}
else return NULL;
}
void cPila::limpia()
{
nodo *p =top;
while(p)
{
top = top->siguiente;
delete p;
p = top;
}
}
2. 14
d) Cursores
Un cursor es una celda de valor entero, que se usa como puntero a
un arreglo.
header 4 2
1 1.2 3
2 3.4 0
3 5.6 2
4 7.8 1
data next
reclist
2. 15
2.2.2 Formación de estructuras de datos
Una estructura de datos es una unidad compuesta de celdas y
procedimientos específicos que mantienen, durante la ejecución de
un programa, datos relevantes para la aplicación.
Esta unidad no sólo tiene por misión guardar datos, sino que también
entregar servicios de actualización, recuperación de información y
mantenimiento de la organización.
Representación 1:
1 1 4
1 4 8
2 2 1
A ’ = 3 5 1
fila c o lu m d a to 4 2 3
5 3 2
i j
a(i,j)
Estructuras
Dinámicas : – Definición y utilización
compleja
– Rápidas en las actualizaciones.
2. 19
Los factores que influyen al seleccionar una estructura:
Las operaciones más frecuentes.
Porcentaje de uso en la organización.
Índice de actualización de los datos.
Recursos del lenguaje elegido.
El problema es:
Encontrar la mejor construcción para abstracciones.
Encontrar la mejor construcción para programa.
Ejemplo:
Almacenar un conjunto de nombres de alumnos y la carrera a la
cual pertenecen.
nombre
carrera
ALGORITMO - 1 f-1
DISEÑO - 1
ALGORITMO - 2 f-i Mejor
algoritmo
... ...
f-N
ALGORITMO - N
¿Mejores estructuras
de datos para
resolver el problema?
ALGORITMO - 1 g-1
cab
X1 XN
Antes: ...
Después: cab
XN ... X1
2. 24
Solución 1:
p = cab;
cab = NULL;
while(p != NULL){
q = p->sig;
p->sig = cab;
cab = p;
p = q;
}
Solución 2:
cab ...
X1 X2 X3 XN-2 XN-1 XN
T1
cab ...
XN X2 X3 XN-2 XN-1 X1
T2
cab ...
XN XN-1 X3 XN-2 X2 X1
T3
1) Estimación a priori
Se desea determinar el tiempo total requerido por la sentencia:
x x+y
al ejecutar el algoritmo, dado un cierto conjunto de datos de entrada.
Orden de magnitud
de una sentencia Frecuencia de ejecución
Orden de magnitud
de un algoritmo Suma de las frecuencias de
todas las instrucciones
contenidas en él
0 (1) < 0 (log n) < 0 (n) < 0 (nlogn) < 0 (n2) < 0 (n3) < 0 (2n)
Notación 0 (0 (g (n)))
• Permite describir los requerimientos de tiempo o espacio al
ejecutar un algoritmo.
Tiempo total: f1(n) + f2(n) + f3(n) = 0 (max (n2, n3, n logn)) = 0 (n3)
Regla de productos:
f1(n) = 0 (n) f2(n) = 0 (n) => f1(n) * f2(n) = 0 (n2)
0 (c * g(n)) = 0 (g(n))
0 (n2/2) = 0 (n2)
Complejidad de un algoritmo
Cantidad de trabajo efectuado por un algoritmo, expresado en una
medida conveniente.
Teorema:
Si A(n) = amnm + ... + a1n + a0 es un polinomio de grado m,
entonces: A(n) = 0 (nm).
TA(n)
Tk
n
10 20 30 40 50
Si TA(n) es O(Tk) TA(n) también es O(1).
Ejemplo:
Calcular la complejidad del programa:
x = 1;
y = 2;
z = 3;
• El segemento: i = 0; acum = 1;
Es O(1).
i
(n – i + 1)
El número de comparaciones:
n n n n
(n – i + 1) = n– i + 1
i=2 i=2 i=2 i=2
n
n = (n – 2 + 1) n = (n – 1) n
i=2
n
1 = (n – 2 + 1) 1 = (n – 1)
i=2
n n
(n – i + 1) = (n – 1 ) n – i + ( n – 1)
i=2 i=2
n n
2 2
= n – n – i+n–1=n –1– i
i=2 i=2
= n2 – 1 – (n(n + 1)/2 – 1)
= n2 – 1 – n2/2 – n/2 + 1
∴ 0 (n2)
2. 36
Ejercicios
a) 100 n3 =
b) 6n2 + 3n + 5 =
c) 1 + 2 + 3 + ... + n =
d) 1220 =
e) n + log2n =
f) n =
g) Σ i2 =
1≤i≤n
h) Σ ik =
1≤i≤n
2. 37
i) Búsqueda secuencial
j 1
while (j ≤ n and v(j) ≠ x) do
j j+1
if j > n then
j 0
Datos: x
v (1 : n)
for i 1 to p do
for j 1 to r do
suma 0
for k 1 to q do
suma suma + (Ai,k * Bk,j)
Cij suma
end
end
2. 38
k) Ordenamiento por selección
for i 1 to n – 1 do
k i
x A(i)
for j i + 1 to n do
if aj < x then
k j
x A(j)
end
end
end
Dato: A(i) i = 1, n
Hipótesis
Basta comparar órdenes de magnitud, para comparar métodos.
T1(n)
T3(n)
T2(n)
2n n2
60
50
40
n logn
30
f
20
n
10
logn
0
0 1 2 3 4 5 6 7 8 9 10
n
Valores de la función
log n n n log n n2 n3 2n
0 1 0 1 1 2
1 2 2 4 8 4
2 4 8 16 64 16
3 8 24 64 512 256
4 16 64 256 4096 65536
5 32 160 1024 32768 4294967296
2. 41
¿Pequeña ¿Cantidad
Inicio cantidad de
Sí de datos
No
Lista
datos? predecible? ligada
No Sí
¿Velocidad de
Tabla Sí ¿Búsqueda
búsqueda más
Hash e inserción importante que Sí Arreglo
debe ser muy velocidad de ordenado
rápida ? inserción?
No No
Arreglo no
ordenado
¿Clave de
Árbol Sí
distribución
binario de
garantizada
búsqueda
random?
No
Árbol
balanceado
2. 44