Documentos de Académico
Documentos de Profesional
Documentos de Cultura
E Structur As
E Structur As
R. Pea (SIC-UCM)
Estructuras de datos
1 / 17
Lecturas recomendadas
De Euclides a Java: Historia de los algoritmos y de los lenguajes de programacin. Ricardo Pea. Cap. 5. Ed. Nivola (Coleccin Ciencia Abierta), 2006. Fundamentals of Data Structures in C++. Ellis Horowitz, Sartaj Sahni, Dinesh Mehta. Computer Science Press 1995. Introduction to Algorithms. T. H. Cormen, C. E. Leiserson, R. L. Rivest, C. Stein, Partes III y V. MIT Press 2001.
R. Pea (SIC-UCM)
Estructuras de datos
2 / 17
R. Pea (SIC-UCM)
Estructuras de datos
3 / 17
Vectores y matrices
Las primeras estructuras fueron el vector unidimensional y las matrices de dos o ms dimensiones, que reejan la propiedad del hardware subyacente de acceso aleatorio a cualquier posicin de memoria en un tiempo constante. En matemticas, un vector v consiste en una secuencia de objetos subindicados v1 , . . . , vn , en los que el ndice recorre un cierto rango nito. La expresin vi , donde i {1, . . . , n}, hace referencia al elemento i-simo del vector v . En la memoria de un ordenador, un vector v se representa colocando los elementos del mismo en posiciones consecutivas de la memoria. Suponiendo que cada elemento ocupa una palabra, el acceso a vi se logra en tiempo constante: direccin(vi ) = direccin(v ) + i 1. En una matriz bidimensional a de n m elementos, la expresin aij , donde i {1, . . . , n} y j {1, . . . , m}, hace referencia al elemento situado en la la i, y en la columna j, de la matriz a. Los elementos se sitan en la memoria por orden de las. El clculo para acceder al elemento aij no es mucho ms complicado: direccin(aij ) = direccin(a) + m (i 1) + j 1
R. Pea (SIC-UCM) Estructuras de datos Master Secundaria 09-10 4 / 17
Listas enlazadas
Otra forma de almacenar una secuencia de valores es mediante una lista enlazada. En esta estructura cada celda contiene, adems de un valor, la direccin (puntero) de la celda siguiente:
lista
v1
v2
v3
Son ms exibles que los vectores porque pueden variar dinmicamente mediante la insercin o borrado de celdas en cualquier punto de la misma, debido a que sus elementos no estn necesariamente contiguos en la memoria. El inconveniente es que el acceso es estrictamente secuencial, y por tanto el coste de acceder a una celda es proporcional a su distancia al principio de la lista.
R. Pea (SIC-UCM) Estructuras de datos Master Secundaria 09-10 5 / 17
Pilas
Una pila es una estructura similar a una pila de platos o de libros: el elemento que se halla en su cima es el ltimo que ha sido apilado y el primero en ser desapilado. Tambin se les llama estructuras LIFO (Last In, First Out). Para acceder a un elemento intermedio es necesario desapilar los que estn encima de l. Sus operaciones tpicas, implementables con coste O(1), son:
Operacin PilaVaca Apilar Desapilar Cima Profundidad Signicado Crea una pila vaca de elementos Pone un nuevo elemento encima de la pila Elimina la cima de la pila Consulta, sin borrarlo, el elemento que est en la cima Devuelve cuntos elementos tiene la pila
Las pilas aparecen con frecuencia en el tratamiento de expresiones, y en general de rboles (que denimos ms adelante), y las utilizan los compiladores para implementar la recursin. La primera noticia sobre esta estructura aparece en los escritos de Alan Turing relativos al diseo del computador ACE (1945).
R. Pea (SIC-UCM) Estructuras de datos Master Secundaria 09-10 6 / 17
Colas
Una cola es una estructura similar a la cola de un cine: hay un elemento en el frente de la cola que ser el primero en ser atendido y que corresponde al primero que se incorpor a la cola. El resto de los elementos forman una la que respeta el orden de llegada. Tambin se les llama estructuras FIFO (First In, First Out). Las operaciones sobre las colas, tamben implementables con coste O(1), son:
Operacin ColaVaca Encolar Atender Primero Longitud Signicado Crea una cola vaca de elementos Aade un nuevo elemento al nal de la cola Elimina el elemento que est en el frente de la cola Consulta, sin borrarlo, el elemento que est en el frente Devuelve cuntos elementos tiene la cola
Las colas tambin aparecen frecuentemente en la programacin, especialmente en el rea de los sistemas operativos (por ejemplo, una cola de impresin de trabajos) y en el de los programas de simulacin.
R. Pea (SIC-UCM) Estructuras de datos Master Secundaria 09-10 7 / 17
Con las estructuras vistas hasta ahora se obtienen costes muy malos: Operacin Vaca Insertar Borrar Buscar Vector ordenado O(1) O(n) O(n) O(log n) Lista ordenada O(1) O(n) O(n) O(n)
R. Pea (SIC-UCM)
Estructuras de datos
8 / 17
rboles de bsqueda
rbol binario: Es un conjunto de elementos del mismo tipo que, o bien es vaco, o bien es posible distinguir uno de ellos, llamado raz, y el resto se agrupan en dos subconjuntos disjuntos, llamados respectivamente rboles izquierdo y derecho, cada uno de los cuales es un rbol binario. En un rbol binario de bsqueda no vaco, el elemento situado en la raz es mayor que todos los que estn en el subrbol izquierdo y menor que todos los que estn en el subrbol derecho. Adicionalmente, ambos subrboles son tambin rboles de bsqueda.
febrero
agosto
mayo
abril
enero
junio
octubre
diciembre
R. Pea (SIC-UCM)
Estructuras de datos
9 / 17
R. Pea (SIC-UCM)
Estructuras de datos
11 / 17
Es decir, se permite cierto desequilibrio, pero no tanto como para invalidar que la altura sea proporcional al logaritmo del cardinal. Programaron las operaciones de insercin y borrado para que detectaran los excesivos desequilibrios y los corrigieran mediante conjunto de rotaciones, cada una de coste constante. Una insercin provoca a lo sumo una rotacin, mientras que un borrado puede desencadenar varias, pero nunca ms que la altura del rbol. Por tanto, el coste total se mantiene logartmico.
R. Pea (SIC-UCM) Estructuras de datos Master Secundaria 09-10 12 / 17
Colas de prioridad
Otras estructuras que aparecen en numerosos aplicaciones responden a la siguiente especicacin: Operacin Mnimo Insertar BorraMnimo Vaco? Signicado Consulta, sin borrarlo, el valor mnimo (el primero) Aade un elemento a la cola Elimina el valor mnimo (corresponde a Atender) Informa de si la cola est vaca o no
Es decir, los elementos se insertan aleatoriamente pero la recuperacin de los mismos se hace de menor a mayor. Esta cola de prioridad se denomina de mnimos. Si entendemos que las prioridades altas corresponden a valores altos, entonces los elementos se recuperan de mayor a menor. Dicha cola se denomina de mximos y en ella las operaciones Mnimo y BorraMnimo se llaman respectivamente Mximo y BorraMximo. El funcionamiento de ambas variantes es totalmente simtrico.
R. Pea (SIC-UCM) Estructuras de datos Master Secundaria 09-10 14 / 17
Montculos
Los montculos son implementaciones ecientes de las colas de prioridad. Un montculo es un rbol binario con una propiedad invariante:
o bien es el rbol vaco, o bien la raz es menor o igual que el resto de los elementos y,
Ello implica que el menor elemento de la estructura se encuentra en la raz, y se puede consultar con coste constante.
R. Pea (SIC-UCM) Estructuras de datos Master Secundaria 09-10 15 / 17
Montculos (2)
Para aadir un elemento, se aade como una hoja del rbol y despus se la hace otar, intercambindola con sus ancestros, hasta que se restaura la propiedad anterior. En el peor caso, el elemento insertado se compara con tantos elementos como la altura del rbol. Si este es de altura mnima, el coste estar en O(log n). Para borrar el mnimo, se reemplaza el elemento en la raz por una de las hojas y a continuacin se hunde esta, intercambindola con el menor de sus hijos, hasta que se restaura la propiedad anterior. De nuevo, el coste estar en O(log n). J. W. J. Williams (1964) se las ingeni para representar un rbol binario casi completo sobre un vector, haciendo corresponder la primera posicin a la raz, y el resto de las posiciones consecutivas del vector a los dems elementos del rbol, segn se recorre este por niveles. Para pasar del ndice de un nodo al de su nodo padre se divide por 2. El algoritmo heapsort se basa en convertir un vector en un montculo de mximos (con coste O(n)) y despus reiteradamente extraer el mximo (con coste O(n log n)).
R. Pea (SIC-UCM) Estructuras de datos Master Secundaria 09-10 16 / 17
Montculos (3)
En 1972, C. Crane propuso otra variante de montculos basada en la representacin enlazada de rboles binarios, los montculos zurdos. Ofrecen las mismas operaciones anteriores, con idnticos costes, y una operacin extra, Fundir difcil de implementar con vectores que, dados dos montculos con n1 y n2 elementos respectivamente, forma con ellos un solo montculo en un tiempo en O(log(n1 + n2 )). Los montculos binomiales, de J. Vuillemin en 1978, permiten insertar con un coste amortizado en O(1). Los montculos de Fibonacci de M. Fredman y R. Tarjan en 1987 tienen insercin con un coste O(1) en el caso peor y adems ofrecen una operacin de modicacin de la prioridad con un coste amortizado en O(1). Los montculos MinMax, de M. Atkinson, J. Sack, N. Santoro y T. Strothotte en 1986, y los dobles montculos, de S. Carlsson en 1987, permiten acceder y borrar tanto el mnimo como el mximo elemento. Estos montculos seran los equivalentes en las colas de prioridad a las dobles colas FIFO.
R. Pea (SIC-UCM) Estructuras de datos Master Secundaria 09-10 17 / 17