Algoritmo y Estructura de Datos
Algoritmo y Estructura de Datos
Algoritmo y Estructura de Datos
DEFINICIÓN:
Un archivo o fichero es un conjunto de datos estructurados en una colección de entidades elementales o básicas denomi-
nadas registros o artículos (relacionados entre sí) que son de igual tipo y que constan, a su vez, de diferentes entidades de
nivel más bajo denominadas campos.
Campo: un campo es la unidad mínima de información de un registro o también se dice que es un ítem o elemento de datos
elementales, tal como un nombre, número de empleado, ciudad, DNI, etc.
Un campo está caracterizado por su tamaño o longitud y su tipo de dato (cadena de caracteres, entero, lógico, etc.). In-
cluso los campos pueden variar en su longitud.
Los datos contenidos en un campo se pueden dividir en subcampos, por ejemplo, el campo fecha se divide en los sub-
campos día, mes, año.
Registro: un registro es una colección de información, normalmente relativa a una entidad particular. También podría decir-
se que es una colección de campos lógicamente relacionados que pueden ser tratados como una unidad por algún programa.
Un ejemplo de un registro puede ser la información de un determinado empleado, que contiene los campos de nombre,
dirección, fecha de nacimiento, estudios, salario, etc.
Los registros pueden ser de longitud fija (cuando los registros contienen el mismo número de campos, cada uno de la
misma longitud) o de longitud variable.
Los registros organizados en campos se denominan registros lógicos.
Clave: una clave (key) o indicativo es un campo de datos que identifica al registro y lo diferencia de otros registros. Esta
clave se utiliza para facilitar la extracción de información de un registro. Se espera identificar en forma unívoca cada regis-
tro almacenado en el archivo. Claves típicas son nombres o números de identificación.
Base de datos: una colección de archivos a los que puede accederse por un conjunto de programas y que contienen todos
ellos datos relacionados, constituye una base de datos. Así, una base de datos de una universidad puede contener archivos de
estudiantes, archivos de nóminas, inventarios de equipos, etc.
Estructura jerárquica:
BASE DE DATOS
ARCHIVOS
REGISTROS
CAMPOS
SUBCAMPOS
CARACTERES
ORGANIZACIÓN DE ARCHIVOS:
El acceso a los archivos es el procedimiento necesario para situarse en un registro determinado con el objeto de realizar
una operación. El costo es la cantidad de accesos para encontrar un dato.
La organización de un archivo define la forma en la que los registros se disponen sobre el soporte de almacenamiento, o
también se define la organización como la forma en que se estructuran los datos en un archivo.
1- Organización Secuencial:
Es la forma más simple de almacenar y recuperar registros en un archivo. En un archivo secuencial se almacenan los re-
gistros uno tras otro ocupando espacios de memoria contiguos. No existen posiciones sin uso.
El acceso secuencial permite el acceso a los registros de un archivo del primero al último y de uno en uno. Una opera-
ción de lectura o escritura, lee o escribe y avanza el puntero al siguiente registro. Para acceder a un registro n dado es nece-
sario pasar por todos los n-1 registros que le preceden (costo=n+1; costo promedio=(n+1)/2).
Estos ficheros contienen un registro particular (el último) que contiene una marca de fin de archivo (EOF).
Bajas: No hay forma física de dar de baja un registro intermedio y realizar el corrimiento, en estos casos se debe hacer una
baja lógica. La única forma de realizar la baja física es generar un archivo nuevo sin el registro marcado.
Ventajas:
- Es el más óptimo en cuanto a aprovechamiento de memoria, ya que se ocupa espacio a medida que se necesita, no re-
quiere espacio inicializado previamente.
Desventajas:
- No es fácil la actualización puntual de un archivo secuencial, para esto se puede almacenar otro archivo temporal con
todas las modificaciones y luego lanzar un proceso de batch o apareo para actualizar el archivo maestro.
- El método de acceso lo realiza ineficiente si se requiere hallar un registro particular en un archivo muy grande.
- Las bajas sólo se pueden realizar lógicamente.
Uso:
- Cuando se va a manejar grandes volúmenes de datos por lotes.
- Si es necesario acceder a todos los registros en el archivo para una aplicación particular, o aproximadamente alrededor
de la mitad de los registros van a ser accedidos cada vez. En general, si se necesitan menos del 10 % de los registros en
un archivo durante una ejecución común del programa, el archivo no debe ser secuencial. Si se desea acceder a más del
40 % de los registros, se debería usar el secuencial. Entre el 10 % y el 40 % dependería del tamaño y la frecuencia de
uso.
2- Organización Directa:
Esta organización permite procesar o acceder en forma rápida a los registros haciendo referencia directamente a su posi-
ción relativa en el soporte de almacenamiento sin pasar por la información anterior.
Cada registro tiene asociado un número relativo, que no es la dirección física que tiene realmente en el disco, es el sis-
tema operativo quien se encarga de relacionar el número relativo de registro con la dirección física.
Generalmente es necesario definir el espacio de memoria que va a ocupar el archivo (dimensionarlo). Para realizar esto
nos basamos en dos datos: la longitud del registro (dato conocido) y la cantidad de éstos (lo que implica una gran desventa-
ja). Actualmente los lenguajes de programación lo redimensionan a medida que se quiere realizar una alta.
Acceso: Para acceder, ante la petición de un registro determinado, el método calcula la dirección del bloque físico que lo
contiene y accede a él directamente (Hashing). También es posible acceder al registro mediante su campo clave, si este co-
incidiera con el número relativo de registro, lo cual no es muy usual. Si no se pudiera realizar de las maneras anteriores, se
puede simular una lectura secuencial, comparando hasta encontrar el registro buscado.
Altas: para dar de alta a un registro es necesario posicionarse según el número relativo de registro y luego grabar la infor-
mación. Como se accede directamente a los n registros, entonces es posible dejar espacios entre uno y otro. Si se accede por
simulación de acceso secuencial, se da de alta uno después que otro (como en archivos secuenciales).
Bajas: Las bajas son lógicas, pero es posible crear un archivo de menor dimensión copiando los registros que no están mar-
cados como dados de baja, o utilizar el campo marcado lógicamente como dado de baja para determinar cuando es posible
sobrescribir los datos de un registro.
Desventajas:
- Tener que definir el número máximo de registros.
3- Organización Indexada:
Representa una especie de balance entre la organización secuencial y la directa ya que el método usa un examen secuen-
cial del índice, seguido del acceso directo a la dirección física apropiada en el área de datos. Un archivo con organización
indexada consta de un área de índice y un área de datos.
Para hallar un registro cuando se desconoce la dirección de almacenamiento, es necesario examinar todos los registros,
sin embargo, la búsqueda será más rápida si se busca en un índice en vez de en un archivo completo de datos.
Para localizar un registro específico se requiere: leer el índice, ubicar la clave, tomar la dirección y buscar el dato en el
área de datos.
Características Generales:
- Los índices ocupan espacio adicional pero proporcionan un método rápido de localizar los registros.
Es más rápido que el archivo secuencial, pero más lento que el direccionamiento directo.
Bloque 2 (n registros)
Bloque 3 (n registros)
Acceso: el área de índice debe estar siempre ordenada y debe contener información activa (que no haya sido dada de baja).
Éste índice trabaja en memoria principal y se crean imágenes en memorias auxiliares.
Altas: se busca en qué bloque debe ir la clave a dar de alta y luego (si hay espacio en el bloque) se inserta este registro. Si el
bloque no estaba creado, se debe crear e indicar en el índice esta nueva clave y la dirección de este bloque.
Bajas: se puede marcar lógicamente el registro dentro del bloque, o bien producir el corrimiento. En el caso que el registro
borrado sea el mismo del índice (clave) deberemos modificar el área de índice.
Modificaciones: se realiza accediendo por el índice y recorriendo el área de datos en forma secuencial hasta encontrar la
clave buscada. Finalmente se realiza la modificación. Si se cambia la clave, se debe reorganizar el área de índice.
Desventajas:
- Se asigna espacio de almacenamiento que puede no ser utilizado dentro de un bloque.
- El área de derrama puede crecer excesivamente, lo que supone una disminución en la rapidez en su tratamiento y una
mayor dificultad en su procesamiento.
Altas: se coloca el registro nuevo en cualquier área desocupada y después todos lo índices que se refieren a los atributos
existentes de este registro tienen que actualizarse.
Modificaciones: se puede regrabar directamente sobre el registro. Si se cambia la clave se debe reorganizar el área de índice.
Bajas: la información del índice debe ser siempre activa (que no haya sido dada de baja), así que en esta área las bajas son
físicas. En el área de datos las bajas pueden darse lógicamente. No es necesario reorganizar el archivo de datos, salvo que
deseemos limpiarlo de las posibles marcas de eliminaciones; el que debe estar siempre ordenado es el índice.
Área de Índice Área de Datos
Clave Link
NORMALIZACIÓN:
Se utiliza para simplificar el contenido del almacenamiento de datos y para ayudar a que estos diseños sean más eficien-
tes, eliminando los grupos repetitivos.
- Primera forma normal (1FN): cualquier relación está en 1FN cuando no incluye ningún grupo repetitivo. Las rela-
ciones en la 1FN pueden tener dos tipos de complejidad:
o Si la clave principal es concatenada, alguno de los elementos no-clave pueden depender de una sola parte
de la clave, y no de la clave completa.
o Alguno de los elementos no-clave pueden estar interrelacionados.
- Segunda forma normal (2FN): una relación normalizada está en la 2FN si todos los elementos no-clave son funcio-
nes completamente dependientes de la clave principal (la clave completa y no una parte de esta si es concatenada).
- Tercera forma normal (3FN): para todo campo de una relación que esté en 3FN se cumple que depende sólo de la
clave y de ningún otro campo de la relación.
Modelos matemáticos. Representaciones. Teoría de grafos. Grafos dirigidos. Clasificación. Paso. Camino. Hipergrafos.
Aplicaciones.
TEORÍA DE GRAFOS:
Concepto de grafo: conjunto de puntos y conjunto de líneas (relaciones), cada una de las cuales une un punto a otro. Los
puntos se llaman nodos o verticales del grafo y las líneas se llaman aristas o arcos (edges).
En símbolos: G = {P, R, f 1 , f 2 ,... f 3 , g 1 , g 2 ,...g n }
Paso:
Secuencia de nodos de un determinado grafo entre un nodo origen y un nodo destino. Puede existir más de un paso entre
dos nodos.
En símbolos: ρ ( x, z ); x ∧ z ∈ P =< y 0 , y1 ,... y n >⇔ 1- x=y0 (nodo origen); z=yn (nodo destino)
2- yi-1 ≠ yi.
3-(yi-1,yi) ∈ R ; 1 ≤ i ≤ n
Loop: Es el paso entre un nodo y sí mismo donde la longitud de paso es cero (por convención, ya que no cumple la defini-
ción de paso). En símbolos: ρ ( x, x ) = 0 .
Camino: ente dos puntos x e y es la secuencia de puntos en los cuales n0=x es el origen y nk=y es el destino. No interesa el
sentido de los arcos. En símbolos: 1- x=n0 (nodo origen); z=nk (nodo destino)
2- yi-1 ≠ yi.
3-(yi-1,yi) ∈ R v (yi,yi-1) ∈ R
Circuito: es el equivalente al ciclo, teniendo en cuenta la relación de camino. No interesa el sentido de los arcos. En símbo-
los: W ( x, x ) ≥ 2
Longitud de Paso:
Es la cantidad de arcos existentes entre el nodo de origen y el nodo de destino. En símbolos: ρ ( x, z )
Conjunto Minimal: es el conjunto de nodos a los cuales no les llega ningún arco.
Conjunto Maximal: es el conjunto de formado por los nodos desde los cuales no parte ningún arco.
Mínimo: cuando el conjunto minimal tiene un solo elemento, a éste se lo llama mínimo. Es el único punto del grafo al cual
no llegan grafos.
Máximo: cuando el conjunto maximal tiene un solo elemento, a éste se lo llama máximo. Es el único grafo desde el cual no
salen arcos.
Vecindad Right: elementos a los cuales llegan arcos del nodo examinado con paso de longitud mayor igual que dos.
Vecindad Left: aquel conjunto de elementos de los cuales parten arcos hacia el nodo tratado con una longitud de paso mayor
igual que dos.
Ideal Principal Izquierdo: es el conjunto de puntos desde los cuales puedo partir para llegar al nodo dado (no interesa la
longitud de paso). En símbolos: L( x) = {y / y ∈ P ∧ ∃( y, x)}
Ideal Principal Derecho: es el conjunto de puntos a los cuales puedo llegar partiendo del nodo dado (no interesa la longitud
de paso). En símbolos: R ( x) = {z / z ∈ P ∧ ∃( x, z )}
a b c
Grafo cíclico: contiene por lo menos un ciclo. Puede existir más de una representación básica de él.
∀x ∈ P, ∃ | x, x |≥ 2
Grafo acíclico: grafo que no tiene ciclos. Existe una única representación básica de él.
∀x ∈ P, NO∃ | x, x |≥ 2
Grafo conectado o conexo: grafo que no tiene punto aislados – no tiene elementos sin relacionar. Grafo en el que existe ca-
mino entre 2 vértices cualesquiera. Un grafo es conexo si todos sus pares de vértices están conectados.
Grafo fuertemente conectado: un grafo G es fuertemente conectado si la relación de paso inducida es una relación de equi-
valencia. Los grafos fuertemente conectados se caracterizan porque dado cualquier par de puntos x y z existe un paso
∃ρ ( x, z ) que los une.
Igualdad de grafos: dados dos grafos G1(P1,R1) y G2(P2,R2) se puede hablar de igualdad si uno es copia del otro. En símbo-
los: G1 = G 2 ⇔ P1 = P2 ∧ R1 = R2
Isomorfismo de grafos:
Dos grafos son isomorfos cuando tienen la misma estructura implementada, cambiando solo la información de los no-
dos.
G1 ≅ G2 ⇔ x, y ∈ P1 , ∃( x, y ) ∈ R1 ⇒ ϕ : P1 → P2 ∧ (ϕ ( x ), ϕ ( y )) ∈ R2 ∧ ϕ ( x), ϕ ( y ) ∈ P2
Grafo completo: es aquel en que cada vértice está conectado con todos y cada uno de los restantes nodos.
Hipergrafo: grafo que tiene un conjunto de puntos y más de una relación definida en dicho conjunto. Sobre el mismo mode-
lo es necesario analizar las distintas relaciones. Todo hipergrafo puede llevarse a 2 ó más grafos dependiendo del número de
relaciones que contenga el hipergrafo.
H=(P,R,R’,f1,f2,..fn,g1,g2,...gn,h1,h2,...hn)
G1=(P,R), G2=(P,R’).
Clausura transitiva: grafo que se obtiene como resultado de inducir o generar la relación de paso (la relación transitiva) so-
bre la relación original de un grafo cualquiera.
Grafo ponderado o con peso: es aquel en el que cada arista tiene un valor.
INTRODUCCIÓN:
Las estructuras dinámicas de datos son estructuras que “crecen a medida que se ejecuta un programa”. Una estructura
dinámica de datos es una colección de elementos (llamados nodos) que son normalmente registros. Al contrario que un
array que contiene espacio para almacenar un número fijo de elementos, una estructura dinámica de datos se amplia y se
contrae durante la ejecución del programa basada en los registros de almacenamiento de datos del programa.
DEFINICIÓN:
1- ∃x ∈ P / L ( x ) = 0
G es una estructura lineal si: 2- ∀y ∈ P : L( y ) ≤ 1; R ( y ) ≤ 1
3- G tiene que ser conectado
LISTAS:
Una lista lineal es una serie de n ≥ 0 nodos x[1], x[2], ..., x[n] cuyas propiedades estructurales incluyen esencialmente,
sólo las posiciones relativas lineales (una dimensión) de los nodos.
Esta es una definición muy general que incluye los ficheros y vectores. Los elementos de una lista lineal se almacenan
normalmente contiguos en posiciones consecutivas de memoria.
Las listas así definidas se denominan contiguas. Las operaciones que se pueden realizar con estas listas son: insertar,
eliminar o localizar un elemento; determinar el tamaño (nro. de elementos) de la lista; recorrer la lista para localizar un de-
terminado elemento; clasificar los elementos de la lista en orden ascendente o descendente; unir dos o más listas en una so-
la; dividir una lista en varias sublistas; copiar la lista; borrar la lista.
LISTAS ENLAZADAS:
Los inconvenientes de las listas contiguas se eliminan con las listas enlazadas. Se pueden almacenar los elementos de
una lista lineal en posiciones de memoria que no sean contiguas o adyacentes.
Una lista enlazada o encadenada es un conjunto de elementos en los que cada elemento contiene la posición (o direc-
ción) del siguiente elemento de la lista. Cada elemento de una lista enlazada debe tener al menos dos campos: un campo con
el valor del elemento y un campo que contiene la posición del siguiente elemento (link o enlace).
Un puntero es una variable cuyo valor es la dirección o posición de otra variable.
Para eliminar el 45o elemento de una lista lineal con 2500 elementos sólo es necesario cambiar el puntero en el elemento
anterior (44o), que apunte ahora al elemento 46o.
25 10 8 100 15 λ
Para insertar un elemento en la posición 3 es necesario cambiar el puntero del elemento 2 al nuevo elemento y hacer que
el nuevo elemento apunte al elemento 3.
80
25 10 8 100 15 λ
Procesamiento de listas enlazadas:
Para procesar una lista enlazada se necesitan las siguientes informaciones: primer nodo (cabecera de la lista), el tipo de
sus elementos y el tamaño de la lista.
LISTAS CIRCULARES:
Las listas simplemente enlazadas no permiten a partir de un elemento acceder directamente a cualquiera de los elemen-
tos que le preceden. En lugar de almacenar un puntero nulo en el campo siguiente del último elemento de la lista, se hace
que el último elemento apunte al primero o principio de la lista. Este tipo de estructura se llama lista circular.
25 10 8 100 15
En las listas lineales anteriores el recorrido de ellas sólo podía hacerse en un único sentido: de izquierda a derecha (prin-
cipio a final). En muchas ocasiones se necesita recorrer las listas en ambas direcciones.
Las listas que pueden recorrerse en ambas direcciones se denominan listas doblemente enlazadas. En estas listas cada
nodo consta del campo de datos y dos campos de enlace: anterior y siguiente que apuntan hacia delante y hacia atrás. Su
desventaja es que una lista doblemente enlazada ocupa más espacio en memoria que una lista simplemente enlazada para la
misma cantidad de información.
Inicio Fin
λ 25 5 10 12 λ
La variable inicio y el puntero al nodo siguiente permiten recorrer la lista en sentido normal y la variable fin y el puntero
al noto anterior permiten recorrerla en sentido inverso.
PILAS (STACK):
Una pila (stack) es un tipo especial de lista lineal en la que la inserción y borrado de nuevos elementos se realiza sólo
por un extremo que se denomina cima o tope (top). Dado que las operaciones de insertar y eliminar se realizan por un solo
extremo (el superior), los elementos sólo pueden eliminarse en orden inverso al que se insertan en la pila. El último elemen-
to que se pone en la pila es el primero que se puede sacar; por ello, a estas estructuras se las conoce por el nombre LIFO
(Last In, First Out o primero entrado, primero salido).
Las operaciones más usuales asociadas a las pilas son:
- Push (meter o poner): operación de insertar un elemento en la pila.
- Pop (sacar o quitar): operación de eliminar un elemento de la pila.
Para representar una pila (ya sea estática o dinámicamente) básicamente necesitamos un puntero (índice en el caso de un
array) indicándonos la cima o tope de la pila.
y x x P
Las colas son otro tipo de estructura lineal de datos similar a las pilas diferenciándose de ellas en el modo de inser-
tar/eliminar elementos. Una cola (queue) es una estructura lineal de datos en la que las eliminaciones se realizan por el prin-
cipio de la lista (frente o front). En las colas el elemento que entró primero sale también primero, por ello se conocen como
listas FIFO (First In, First Out). Así pues, la diferencia con las pilas reside en el modo de entrada/salida de datos; en las co-
las las inserciones de datos se realizan al final de la lista. Por ello, las colas se usan para almacenar datos que necesitan ser
procesados según el orden de llegada.
Para representar una cola ya sea mediante una lista enlazada o con un array se necesitan dos punteros inicio y fin.
DOBLE COLA:
Existe una variante de la cola simple mencionada anteriormente que es la doble cola. La doble cola o bicola es una cola
dibimensional en la que las inserciones y eliminaciones se pueden realizar en cualquiera de los dos extremos de la lista.
Existen también dos variantes de la doble cola: doble cola de entrada restringida (acepta inserciones sólo al final) y do-
ble cola de salida restringida (acepta eliminaciones sólo al frente).
COLA CIRCULAR:
NOTA: tanto la pila como la cola son estructuras destructivas, las operaciones de consulta no están permitidas, la lectu-
ra destruye la información contenida en éstas.
25 25 10 25 10 42 10 42
La cola está vacía Insertamos el dato 25 Insertamos el dato 10 Insertamos el dato 42 Sacamos el dato 25
10 42 30 15 10 42 30 15 42 30 15 30 15
Insertamos el dato 30 Insertamos el dato 15 Sacamos el dato 10 Sacamos el dato 42 Sacamos el dato 30
(se lleno la cola)
DEFINICIÓN Y PROPIEDADES:
Un árbol es un conjunto finito T de uno o más nodos donde:
1. Hay un nodo especial llamado raíz del árbol, raíz (T);
2. Los nodos restantes están agrupados en m ≥ 0 conjuntos distintos T1, T2, .... , Tm y cada uno de estos conjuntos es, a
su vez, un árbol. Los árboles T1, T2, .... , Tm se llaman subárboles de la raíz.
La definición de árbol implica una estructura recursiva. De esto se desprende que cada nodo de un árbol es la raíz de al-
gún subárbol contenido en la totalidad del mismo. (T=(P,R))
Propiedades:
1. El grafo T verifica la existencia de un nodo t el cual es mínimo (no le llega ningún arco), al cual llamamos raíz o:
∃ x único / L( x) = 0
2. Ese grafo es libre de circuitos y de loops.
3. La cantidad de nodos es la cantidad de arcos más uno: P = R + 1 .
Otras definiciones:
- Raíz del árbol: todos los árboles que no están vacíos tienen un único nodo raíz. Todos los demás elementos o nodos
se derivan o descienden de él. El nodo raíz no tiene padre.
- Nodo: son los vértices o elementos del árbol.
- Nodo terminal u hoja: es aquel nodo que no tiene ningún subárbol.
- Grado: es el número de subárboles que tiene un árbol. Un árbol de grado cero es una hoja.
- Bosque: es un conjunto (normalmente ordenado) de cero o más árboles disjuntos. Si eliminamos la raíz de un árbol
tendríamos un bosque.
- A cada nodo que no es hoja se le asocia uno o varios subárboles llamados descendientes o hijos. De igual forma, ca-
da nodo tiene asociado un antecesor o ascendiente llamado padre.
- Los nodos de un mismo padre se llaman hermanos.
- Camino: es el enlace entre dos nodos consecutivos.
- Rama: camino que termina en una hoja.
- Nivel: cada nodo tiene asociado un número de nivel que se determina por la longitud del camino desde la raíz hasta
el nodo específico.
- Altura o profundidad: es el número máximo de nodos de una rama. Equivale el nivel más alto de los nodos más uno
(es el paso de mayor longitud entre la raíz y las hojas).
- Peso: es el número de nodos terminales.
- Árbol lleno: es aquel árbol cuyo grado de salida es el mismo para todos los nodos excepto las hojas.
- Árbol completo: aquél árbol lleno que tiene todas sus hojas en el mismo nivel.
CLASIFICACIÓN:
- Árbol principal izquierdo (API): es una estructura jerárquica de tipo ascendente. De cada uno de sus nodos puede
salir como máximo un arco y existe al menos un elemento que no tiene conjunto derecho (no parte ningún arco). El
API es poco aplicable puesto que posee muchas raíces. b
o ∃ un x máximo.
e c a
o R ( y ) = 1, ∀y ≠ x ; y ∈ P.
f d
g
- Árbol principal derecho: se caracteriza porque para todo punto se verifica que como máximo puede recibir un arco
y existe al menos un punto al cual no le llega ningún arco (raíz). Todo árbol con elemento mínimo es principal dere-
cho, y consecuentemente todo elemento del árbol es alcanzable desde este punto mínimo.
o ∃ un x mínimo (raíz). b
o L( y ) =1 , ∀y ≠ x ; y ∈ P. a c e
d f
g
ÁRBOL BINARIO:
Un árbol binario es un conjunto finito de cero o más nodos tales que:
B
A A
C
E
B C D B C D D
F
E F G E
H I J F G G H
H I J
K L K L K I
Árbol a convertir Paso 1
L J
Paso 2
RECORRIDO (BARRIDO) DE UN ÁRBOL BINARIO:
Se denomina recorrido de un árbol al proceso que permite acceder una sola vez a cada uno de los nodos del árbol.
Cuando un árbol se recorre, el conjunto completo de nodos se examina. Los algoritmos de recorrido de un árbol binario pre-
sentan tres tipos de actividades comunes: visitar el nodo raíz, recorrer el subárbol izquierdo, recorrer el subárbol derecho.
De esta manea , se presentan los siguientes barridos:
1) Barrido pre-orden:
a) Visitar la raíz.
b) Recorrer el subárbol izquierdo.
c) Recorrer el subárbol derecho.
2) Barrido in-orden (simétrico):
a) Recorrer el subárbol izquierdo
b) Visitar la raíz.
c) Recorrer el subárbol derecho.
3) Barrido post-orden:
a) Recorrer el subárbol izquierdo.
b) Recorrer el subárbol derecho.
c) Visitar la raíz.
4) Recorrido por niveles.
Inserción de un elemento:
Para insertar un elemento se comprueba primero que este valor no se encuentre en el árbol y luego, si no existe, se reali-
za la inserción en un nodo que tengo al menos uno de los dos punteros (Izq. o Der.) con valor nil. Para realizar esto se des-
ciende en el árbol a partir del nodo raíz dirigiéndose de izquierda a derecha de un nodo según que el valor a insertar sea in-
ferior o superior al valor del campo clave de ese nodo. Cuando se alcanza un nodo del árbol en que no se puede continuar, el
nuevo elemento se engancha a la izquierda o derecha de este nodo en función de que su valor sea inferior o superior.
Eliminación de un elemento:
La eliminación de un elemento debe conservar el orden de los elementos del árbol. Se consideran diferentes casos según
la posición del elemento o nodo en el árbol:
- Si el elemento es una hoja, simplemente se suprime.
- Si el elemento no tiene más que un descendiente, se sustituye entonces por ese descendiente.
- Si el elemento tiene dos descendientes se sustituye por el elemento más a la derecha o a la izquierda de modo que
permita conservar la ordenación.
ÁRBOLES BALANCEADOS:
AVL: un árbol AVL es un árbol binario de búsqueda en el cual las alturas de los subárboles izquierdo y derecho de la raíz
difieren a lo sumo en uno y además sus subárboles son AVL.
A A A
B
Z B
B A C B
A Z
C B Z
Rotación Simple Rotación Doble
Árboles Multimodales:
En estos árboles, para algún entero m llamado orden del árbol, cada nodo tiene como máximo m hijos. La cantidad de
claves de cada nodo está dada por k (k ≤ m-1) y las claves dividen a los hijos a manera de árbol de búsqueda.
Árboles B:
Es un árbol multimodal de orden m que cumple las siguientes condiciones:
1. Todos los nodos terminales están en el mismo nivel.
2. Los nodos internos tienen a lo sumo m hijos no vacíos y como mínimo m/2 hijos no vacíos.
3. El número de claves en cada nodo interno es uno menos que el número de sus hijos y estas claves dividen la de los
hijos a manera de un árbol binario de búsqueda.
4. La raíz tiene como máximo m hijos, como mínimo 2 si no es hoja y ninguno si el árbol consta de la raíz solamente.
j
Ejemplo de árbol B de orden 5
Nodos internos: 3 hijos
cf ms m/2 ≤ 3 ≤ m
2≤3≤5
ab d gi kl np tux
e
Algoritmos y Estructuras de Datos Página 14