Teoría de Algoritmos 3

31
Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos. Página 1 de 31 Estructuras fundamentales de datos e introducción a la algoritmia. Clasificación de los datos. Enteros Numéricos punto fijo Reales punto flotante Carácter Alfanuméricos Simples Cadena Lógicos Puntero Constantes Variables Continentes Campos Contenidos Estáticas Registros Arreglos Ficheros secuenciales Datos Estructurados Ficheros secuenciales Pila Densas Cola Dinámicas Listas Encadenadas Simple O Doble Enlazadas Circulares Árboles Estructuras estáticas: son aquellas cuyo tamaño y estructura queda fijado en tiempo de definición y permanecen inalterables durante la ejecución del proceso en el que fueron declaradas. Estructuras dinámicas: son aquellas cuyo tamaño u estructura puede variar en tiempo de ejecución y su única limitación (tamaño máximo) está dado por el tamaño de la memoria que la soporta.

Transcript of Teoría de Algoritmos 3

Page 1: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 1 de 31

Estructuras fundamentales de datos e introducción a la algoritmia. Clasificación de los datos. Enteros Numéricos punto fijo Reales punto flotante Carácter Alfanuméricos Simples Cadena Lógicos Puntero Constantes Variables Continentes Campos Contenidos Estáticas Registros Arreglos Ficheros secuenciales Datos Estructurados Ficheros secuenciales Pila Densas Cola Dinámicas Listas Encadenadas Simple O Doble Enlazadas Circulares Árboles Estructuras estáticas: son aquellas cuyo tamaño y estructura queda fijado en tiempo de definición y permanecen inalterables durante la ejecución del proceso en el que fueron declaradas. Estructuras dinámicas: son aquellas cuyo tamaño u estructura puede variar en tiempo de ejecución y su única limitación (tamaño máximo) está dado por el tamaño de la memoria que la soporta.

Page 2: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 2 de 31

Acciones estructuradas. o Simple. Es la ejecución condicional de una acción. SI condición ENTONCES Acción; FIN SI. Primero se observa la certeza de la condición, si ésta conduce a una respuesta cierta, la acción es ejecutada a continuación de la observación, la cual finaliza la ejecución.

o Alternativa. Es la ejecución alternativa de una entre dos acciones. SI condición ENTONCES Acción1; SINO Acción2; FIN SI. Primero se observa la certeza de la condición, la cual es seguida de la acción1 si la condición es cierta, o de la acción 2 si la condición es falsa.

o Selección múltiple. Es la ejecución condicional de una entre varias acciones. SEGÚN indicador HACER Valor1: acción1; ………………… Valorn: acciónn; Otros: acción n+1; FIN SEGÚN. La ejecución del texto provoca la búsqueda en la lista de los valores de aquél que corresponde al valor observado por el indicador. Se ejecutará una de entre todas las acciones enumeradas. La acción n+1 se asocia en todos los casos en los cuales el indicador no pertenece al conjunto de todos los n valores explícitamente enumerados.

o Repetitivas. Es la ejecución múltiple de una sola acción.

1. Repetir. (post-test)

REPETIR Acción; HASTA QUE condicion. la ejecución de este texto provoca sucesivamente la ejecución de la acción, a continuación la observación de la condición y ejecuta la acción hasta que la condición sea falsa. La acción se ejecuta por lo menos una vez.

2. Mientras. (pre-test)

MIENTRAS condición HACER Acción; FIN MIENTRAS. La acción se ejecuta mientras la condicion sea verdadera. La acción se ejecuta como mínimo 0 ≤ (mientras) ≤ N.

Page 3: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 3 de 31

3. Manejada por contador. PARA Vc := Vi HASTA Vf , I HACER Acción; FIN PARA. Vc es una variable de tipo numérico llamada variable de control. Vi, Vf e I son variables de tipo numérico, constantes de tipo num o expresiones aritméticas. Vi recibe el nombre de valor inicial, Vf valor final e I es el incremento que se expresa cuando es distinto de 1, éste puede ppsitivo o negativo, pero no cero. Si el incremento es positivo: Vi < Vf. Si el incremento es negativo: Vi > Vf. Dentro del para no es correcto modificar el valor de la variable de control. Cuando finaliza el para, Vc queda indefinido.

En el mientras y el repetir la variable condicional debe ser alterada dentro del ciclo por instrucción del algoritmo, a diferencia del para que no puede ser alterada dentro del ciclo.

Page 4: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 4 de 31

Secuencias Concepto y características Una secuencia es un conjunto de datos relacionados entre sí que deben cumplir con ciertas características:

o Existencia del primer elemento de la secuencia: el acceso a este elemento, permite el acceso posterior a los demás elementos de la secuencia.

o Relación de sucesión entre los elementos: todo objeto de la secuencia. salvo el último, precede a uno de los demás elementos, su sucesor.

o Finitud: puede ser conocida o no. Puede estar dada por la cantidad de elementos o bien por una marca de fin. Todas las secuencias deben ser finitas por lo que deben estar acotadas por una condición de fin para evitar entrar en un ciclo infinito.

o Existencia del último elemento de la secuencia: debe estar definido un indicador de fin de secuencia: el elemento final, permite detener la enumeración de la secuencia por la observación de la característica de este elemento.

Declaración Var Sec: secuencia de caractéres; V: caractér; Sec: nombre de la secuencia. V: variable con la que recorreremos la secuencia, accediendo a sus elementos de uno en uno. Representación gráfica Una secuencia suele representarse gráficamente de la siguiente forma:

Clasificación de las secuencias Por su contenido:

Puras: todos los elementos son de la misma especie o tipo. Se caracteriza porque el último elemento es tratado de igual forma que los demás. Este tipo de secuencia es manejada con estructuras puras (post-test y manejada por contador) Impuras: son aquellas secuencias donde existe un elemento extraño que no es tratado y el cual indica el fin de la secuencia. En este caso, la secuencia se maneja con una estructura del tipo pre-test.

Por la cantidad de elementos: Definidas: se conoce el número de elementos de la secuencia. Puede ser tratada con una estructura manejada por contador. Indefinidas: cuando el número de elementos de la secuencia no es conocido. Por lo tanto, la enumeración de ésta secuencia se detendrá cuando se cumpla la condición de haber encontrado la marca de fin. En consecuencia, se utiliza una estructura pre-test.

Caracteristicas complementarias: Orden: existe un orden cuando la relacion sucesora es estroicta entre el primer elemento y el

ultimo. Debe estar explicita en el planteo del problema.

Page 5: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 5 de 31

Completitud: indica que entre elemento y su sucesor no existen ausencias. No se puede suponer, tiene que estar definida en el planteo del problema, ademas puede estar ordenada o no.

Subsecuencias Son secuencias de menor nivel que pertenecen a una secuencia mayor de la cual heredan su caracteristicas. Se pueden presentar de dos maneras: en forma anidadas o enlazadas y en forma incluidas o jerarquizadas. Subsecuencias anidadas o enlazadas: son las palabras.

- Palabra con contenido: conjunto de caractéres distintos de blanco y de marca. Es una secuencia impura.

- Palabra vacía: conjunto de caractéres blancos. Es una secuencia impura. Subsecuencias incluidas o jerarquizadas: comparten todos los elementos. Un ejemplo es el texto. Algoritmos de secuencias puras e impuras Acción Sec_Pura es Algoritmo Iniciar_adquisición; Repetir Obtener_elemento; Tratar_elemento; Hasta que elemento=último; FinAcción.

Acción Sec_Impura es Algoritmo Iniciar_adquisición; Obtener_elemento; Mientras elemento<>marca hacer Tratar_elemento; Obtener_elemento; FinMientras; Tratamiento_final; FinAcción.

Secuencia de caractéres Conjunto de caractéres dispuestos en forma aleatoria y secuencial. La máquina de caractéres La máquina de caractéres es una máquina abstracta capaz de procesar las secuencias de caractéres. Está compuesta por los siguientes elementos:

1. Una ventana: a través de la ventana se podrán observar los objetos que componen la secuencia de caractéres, permitiendo el acceso de a uno por vez.

2. Un botón “arrancar”: la función de éste es colocar la cinta en la máquina para ser tratada.

3. Un botón “avanzar”: mediante éste botón se podrá recorrer la secuencia, elemento a elemento, siempre en la misma dirección (de izquierda a derecha), accediendo a ellos de a uno por medio de la ventana. Luego de arrancar la secuencia, se la debe avanzar una vez para que el primer elemento de la secuencia aparezca en la ventana.

Page 6: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 6 de 31

Acciones con secuencias Arrancar la secuencia: Arr (Sec); Avanzar la secuencia: Avz (Sec, V); Entonces las acciones Iniciar_adquisición corresponde a arrancar la secuencia, y Obtener_elemento sería avanzar la secuencia. Para crear una secuencia se utiliza la misma acción que para arrancar una existente, pero hay que tener en cuenta que la secuencia creada se debe cerrar para agregar al final de la misma la marca de fin, de lo contrario el proceso de creación no concluirá perdiéndose así la totalidad de los datos ingresados. Arr (Sal); Crea una secuencia de nombre Sal, definida previamente en el ambiente. Cerrar (Sal); Agrega la marca de fin a Sal y la almacena definitivamente. Existen dos formas de controlar la finalización de una secuencia impura en la estructura pre-test:

1. preguntando por la marca de fin, que podría ser “*” Mientras (V<>”*”) hacer

2. utilizando el condicional No FDS (Nombre de Secuencia) - No Fin De Secuencia Mientras No FDS (Sec) hacer

Tratamiento de secuencias de registros.

Campo: es una agrupación de datos simples con un objetivo (aportar mayor información), cada campo tiene que recibir un nombre y tendrá su tipo y tamaño propio.

Campo continente: es un campo formado por contenido. Hay que dar el contenido.

Campo contenido: requiere que se le de tamaño y tipo. Depende de un campo mayor.

Registro: es un agrupamiento de campos continentes y contenidos. Estructura compuesta de un número fijo de componentes llamados campos, donde cada uno de ellos viene definidos por su nombre y su tipo (no necesariamente deben ser todos de un mismo tipo). La menor unidad de información de un registro se denomina campo.

Representación de un registro.

Page 7: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 7 de 31

o Lineal, gráfica o esquemática: consiste en la continuidad de celdas, donde cada dato tiene su rectángulo. La continuidad determina la relación lógica que existe entre los campos.

o Jerárquica o arbórea: es puramente gráfica, se utiliza en diseños globales y viene por traslado de la representación de los sistemas. Trabaja con nodos de información.

Nodos: son rectángulos que representan una entidad física lógica.

o Por nivel o literario: es la representación jerárquica de los datos donde cada nodo

o cada elemento ocupa un renglón de escritura y las relaciones de dependencia y subordinación se nota mediante el uso de sangría. Describimos a continuación el ambiente. Alumno = registro Legajo 6N;

Ape_nbre AN40; Fe_nac fecha;

FIN REGISTRO. De esta forma vamos a definir un registro en el ambiente.

Para poder acceder a las componentes de una variable registro, utilizamos una expresión llamada selector de campo. Esta expresión está formada por el nombre de la variable registro y el nombre del campo al cual queremos acceder, separado por un punto.

Arreglos Concepto Un arreglo es una estructura de datos en la que se almacena una colección de datos del mismo tipo. Se caracteriza por:

o Los elementos del arreglo se colocan en posiciones contiguas, tienen continuidad física y se almacenan en memoria interna.

o Es estática, es decir, tiene un tamaño definido y fijo. o Tiene un único nombre que representa a todos los elementos y estos se diferencian por

un índice. o Acceso directo a los elementos individuales del arreglo.

Declaración

Tipo Alumnos: arreglo [1..100] de enteros;

Alumnos: nombre del arreglo. [1..100]: longitud del arreglo. En este caso se tiene un arreglo de 100 elementos. El intervalo de longitud del arreglo suele ser de tipo simple, como entero o caractér, pero nunca real. Planes: arreglo [“A”..“F”] de enteros;

Un elemento del arreglo se identifica por el nombre del arreglo y el índice adecuado contenido entre corchetes. Alumnos[1]; Alumnos[2];…; Alumnos[100];

Page 8: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 8 de 31

Planes[“A”]; Planes[“B”];…; Planes[“F”];

Los elementos componentes de un arreglo pueden ser tanto datos simples como datos estructurados. Tipo Alu=registro Leg: entero (5); Nomb: an (30); DNI: entero (8); Finregistro; A: arreglo [1..100] de Alu;

Operaciones con arreglos Los arreglos no se pueden leer/escribir en una sola operación o sentencia. La lectura o escritura de un arreglo se debe hacer elemento a elemento, para lo cual se utilizan las estructuras repetitivas. Lectura:

a) Bucle Para Para i:=1 hasta 100 hacer Esc (Alumnos[i]); FinPara;

b) Bucle Mientras

I:=1; Mientras i<=100 hacer Esc (Alumnos[i]); i:=i+1; FinMientras;

c) Bucle Repetir I:=1; Repetir Esc (Alumnos[i]); i:=i+1; Hasta que i>100;

Escritura:

Bucle Para Para i:=1 hasta 100 hacer Alumnos[i]:=0; FinPara;

Clasificación de arreglos: Los arreglos de clasifican en:

Unidimensionales: También llamados vectores, son aquellos que poseen una sola dimensión, lo que implica un solo índice.

Bidimensionales: Un arreglo bidimensional es un arreglo con dos índices y son conocidos como tablas o matrices. Para localizar o almacenar un valor en el arreglo se deben especificar dos posiciones, uno para la fila y otro para la columna.

Multidimensionales: Tienen dos o más índices o dimensiones y se clasifican según estos en bidimensionales (dos índices o dimensiones), tridimensionales (tres índices o dimensiones), etc.

Declaración Se deben indicar:

1) Nombre del arreglo 2) Tipo del arreglo (todos los elementos serán del mismo tipo) 3) Intervalo permitido por cada índice

Tipo Mat: arreglo [1..15, 1..50] de Alu;

Los diferentes tipos de índices no necesitan ser intervalos del mismo tipo Tipo Mat: arreglo [1..10, “A”..“F”] de enteros;

Page 9: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 9 de 31

Los elementos se referencian con el formato: Mat[2,5]; elemento de la fila 2 y columna 5. Si el arreglo es de tipo registro, se tendrá que usar el selector de campo. Mat[2,5].leg; Representación gráfica

Manipulación de tablas Los recorridos se realizan mediante bucles anidados, uno por cada dimensión o índice. Para i:=1 hasta 15 hacer Para j:=1 hasta 50 hacer Esc (Mat[i,j].Nomb); FinPara; FinPara; Búsqueda en un arreglo Para realizar la búsqueda de un elemento o varios en un arreglo, se pueden utilizar los siguientes métodos: Búsqueda lineal Pura o Simple: consiste en recorrer todo el arreglo, comparando cada elemento con el buscado. Ventajas: se aplica tanto en arreglos ordenados como desordenados. Es útil para búsquedas múltiples. Desventajas: recorre todo el arreglo aunque e elemento se haya encontrado en el primer lugar. Algoritmo Leer(X); Para i:=1 hasta n hacer Si A[i]=X entonces Esc (“Se encontró en posición”,i); FSi; FPara; FAccion

Page 10: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 10 de 31

Búsqueda lineal por centinela: es similar a la búsqueda lineal pero con la mejora de que en el momento en que se encuentra el elemento, se finaliza la búsqueda. Ventajas: se aplica tanto en arreglos ordenados como desordenados. Cuando encuentra el elemento, termina la búsqueda. Desventajas: es lenta cuando el arreglo es grande. No admite búsqueda múltiple, es decir, de varios elementos. Algoritmo Leer(Cent); i:=; Mientras (A[i] <> Cent) ^ ( i<=N ) hacer

I:= i+a; FMientras; Si A[i]= Cent entonces Esc (“Se encontró en posición”,i); Sino Esc (“No se encontró elemento”); FSi; FAccion

Búsqueda binaria o dicotómica: consiste en comparar el elemento central del arreglo con el valor buscado, si este no es igual, se reduce el intervalo de búsqueda a la mitad derecha o izquierda, según el valor sea mayor o menor que el elemento central del arreglo. Y así se irá reduciendo el intervalo de búsqueda en mitades mediante dicha comparación, hasta que este reduzca al mismo elemento de búsqueda, si es que existe. O sea que, la búsqueda termina cuando se encuentra el elemento o bien cuando se anula el intervalo. Ventajas: es muy rápida Desventajas: no se puede usar en arreglos desordenados. No es útil para búsquedas múltiples. Algoritmo Izq:=1; Der:=N; Med:=(Izq+Der) Div 2; Leer(X); Mientras (A[Med]<>X) ^ (Izq <>Der) hacer

Si (X<A[Med]) entonces Der:= Med-1; Sino Izq:= Med+a; FSi; Med:=(Izq+Der) Div 2; FMientras; Si (X= A[Med]) entonces Esc (“se encontró en posición”, Med); Sino Esc (“No se encontró”); FSi; FAcción.

Ordenamiento de un arreglo

Page 11: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 11 de 31

Directa Insercion Binaria Simples, Directos o Selección directa Eltales. Directo o burbuja Intercambio Directo con test de comprob. Método de la sacudida Métodos de ordenación Indirectos, Inserción (con incrementos decrecientes) Avanzados o Selección (orden según árbol o método de Logarítmicos la criba o del montículo, heapsort) Intercambio (orden por partes met. Ráp) (quick sort) Método de inserción directa: en el proceso de encontrar el sitio adecuado conviene alternar comparaciones y movimientos, es decir, “dejar caer” x, comparándolo con el item anterior aj, como consecuencia se inserta x o se mueve aj a su derecha y se continua con el item izquierdo repitiendo el proceso. Se observa que hay dos condiciones distintas de terminación de éste proceso de “caida”:

- Se encuentra un item aj cuya clave es menor que la de x. - Se alcanza el extremo izquierdo del arreglo.

Este caso típico de una repetición con dos condiciones de terminación permite utilizar un centinela, al que llamaremos a0 := x. Suponiendo que tuvimos en cuenta el uso del centinela, nuestro arreglo tendrá un rango de 0 a n. Caso contrario a0 sera una variable del mismo tipo que el contenido del arreglo, o sea, la variable centinela deberá declararse en el ambiente. Cabe recordar que para ordenar un arreglo no es conveniente usar otro arreglo, esto se considera ineficiente por el uso adicional de memoria interna. Algoritmo

Cargar; Para i:=2 hasta n hacer x:=a[i]; a[0]:=; j:=(i-1); Mientras (x<a[j]) hacer a[j+1]:=a[j]; j:=j-1; FMientras; a[j+a]:=x; FPara; FAcción; Método de selección directa: se basa en los siguientes principios:

- Seleccionar el artículo con clave mínima. - Enviarlo a su posición definitiva ai a la izquierda. Para eso se intercambian los item de ai

y aj. A continuación se repiten estas operaciones con los ítems restantes a la derecha de ai. Este método, es en cierta forma opuesto al de inserción directa, considera todos los ítems del arreglo origen para encontrar el que tiene menor clave y depositarlo como item siguiente de la secuencia destino. Recordamos que se entiende por arreglo origen a la parte desordenada y como secuencia destino a la parte del arreglo ya ordenada.

Page 12: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 12 de 31

Algoritmo Carga; Para i:=1 hasta (n-1) hacer x:= a[i]; min:=i; Para j:=(i+a) hasta n hacer Si (x>a[j]) entonces min:=j; x:=a[j]; FSi; FPara; a[min]:= a[i]; a[i]:=x; FPara; FAcción. Método de intercambio directo (burbuja): el algoritmo de intercambio directo se basa en el principio de comparar e intercambiar pares de ítems adyacentes hasta que todos estén ordenados. Como en los métodos anteriores de selección directa, se hacen repetidas pasadas sobre el arreglo, moviendo en cada una el elemento de clave mínima hasta el extremo izquierdo del arreglo. En cambio, si se mira el arreglo como si estuviera en posición vertical en vez de horizontal y se considera los ítems como burbujas en un depósito de agua con “pesos” acordes con sus claves, de cada pasada sobre el arreglo resulta la ascensión de una burbuja hasta el nivel de peso que le corresponde, de allí la denominación burbuja. Algoritmo Carga; Bandera:= Falso; Mientras (Bandera =Falso) hacer Bandera:= Verdadero; Para j:=1 a (n-1) hacer Si ( a[j] > a[j+1] entonces x:= a[j]; a[j]:= a[j+1]; a[j+1]:= x; Bandera:= Falso; FSi; FPara; FMientras; FAcción.

ARCHIVOS O FICHEROS

Un archivo es una colección de datos, es decir, un conjunto de registros, que se almacenan en memoria externa y de forma permanente. Un archivo puede ser de longitud infinita, solo está condicionado por la capacidad de la memoria, por ello no hace falta conocer su longitud. A todo archivo se le debe asignar un nombre y un tipo. Organización

Page 13: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 13 de 31

Es como se almacenaran los datos. La organización es permanente, una vez definida no se puede modificar. Es la principal característica de un archivo. Organización secuencial: implica continuidad física entre los registros, se almacenan en posiciones físicamente contiguas. Se graba registro por registro, en el mismo orden en que se ingresan. Si un archivo secuencial es abierto solo para lectura, no se lo puede usar para escribir, y si es abierto solo para escritura, no se lo puede usar para leer. Una vez almacenado el archivo es inalterable. Para actualizar un archivo secuencial, se lo debe abrir para lectura y crear un archivo de salida, en el cual se copiarán los registros del archivo maestro (archivo a actualizar), introduciendo al mismo tiempo las novedades. Organización directa relativa: antes de empezar se debe definir su longitud o tamaño, quedando de antemano reservado su espacio, lo cual es una desventaja. Los registros se graban ordenados por una clave determinada, generándose una tabla con las posiciones de los mismos. La continuidad de los registros en estos archivos es lógica. Se puede acceder de forma directa, conociendo el valor posicional del registro, o de forma secuencial. Organización directa indexada: el archivo posee dos áreas: una de datos y otra de índice. El índice puede ser una clave simple o compleja, y permitirá el acceso de forma directa a cualquier registro. Los registros de un archivo indexado poseen continuidad lógica. Un registro puede ser agregado fácilmente al archivo en una posición cualquiera de memoria, manteniendo la correlatividad de las claves, ya que el carácter sucesor de los registros está dado por una cuestión lógica, y no física. Acceso Es la forma en la que se van a recuperar o leer los registros de un archivo. El tipo de acceso a un archivo depende de la organización del mismo. El acceso se clasifica en secuencial y directo, y este a su vez se divide en al azar o puntual y en dinámico o mixto. Acceso secuencial: para acceder a un registro n cualquiera, hay que leer los n-1 registros anteriores a él. Todo archivo, sin importar su organización, puede ser accedido secuencialmente. Acceso directo: el acceso directo sólo es posible si el archivo tiene una organización directa.

Al azar o puntual: se necesita conocer la posición o la clave del registro al que se quiere acceder.

Dinámico o mixto: es una combinación del acceso directo y del secuencial. Se accede primero de manera directa y luego secuencial, para lo cual se debe tener la posición, la clave o una aproximación de la clave del primer elemento que se busca, y a partir de allí, se recorre el resto del archivo secuencialmente.

Organización Acceso Secuencial Secuencial

Page 14: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 14 de 31

Secuencial Directa Puntual Mixta(Puntual y luego Secuencial) Tipos de claves

Simple: un solo dato, campo. Compleja: formada por un campo continente. Principal: identifica al elemento dentro del subsistema al que pertenece. Secundaria: campo relevante, pero su función es relacionar al elemento con otros

sistemas.

Procesos con archivos

genérico Individual Corte de control Procesos Actualización Múltiple directa Mezcla Apareo Indirecta

Unitarios o individuales Interviene un solo archivo de entrada, pudiéndose obtener uno o más archivos de salida o un listado. La característica fundamental es que el control de finalización de este tipo de proceso está dado por el fin del fichero de entrada.

Genéricos: es el proceso que se encarga de la creación y carga de los archivos.

Estadístico: Recorrido del archivo para contabilizar elementos, utilizando una tabla (memoria interna) y al finalizar emitir un cuadro de resumen.

Emisión: Listados totales(padrones) o parciales.

Corte de control: es el proceso por el cual se producen paradas momentáneas para emitir totalizadores parciales o alguna otra acción. Implica la emisión de un listado o padrón. Para realizar un corte de control es necesario que el archivo de entrada este ordenado

por clave compleja. Existen tantos niveles de corte como campos tenga la clave. Los cortes se producen por cambio de contenido en los distintos niveles de la clave. Cada nivel posee un contador que se emite cuando se efectúa el corte de ese nivel. Los contadores se inicializan en dos momentos: 1º) al comienzo del proceso (común para

Page 15: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 15 de 31

todos); y 2º) en forma individual cuando se produce el corte correspondiente a ese contador. Se utiliza una variable auxiliar por cada campo de la clave compleja, la que se denomina variable de resguardo, y del mismo tipo. Se produce una comparación entre la variable de resguardo y el campo actual del registro, si son distintos, se realiza el corte correspondiente a ese nivel. Como el corte trabaja con si anidados para cada nivel de corte (del mayor al menor), esto obliga a efectuar el proceso de emisión de los totales de los niveles de corte menor, hasta llegar al nivel que desencadenó el corte al variar el contenido del campo clave. 2Algoritmo:

Ejemplo para una clave de 3 niveles, clave=

PROVINCIA

DEPARTAMENTO

CIUDAD

Clave 3 Clave 2 Clave 1

ACCION Corte ES Inicializar_totalizadores; Inicializar_adquisición; Leer_registro; Reg1 := Clave1; Reg2 := Clave2; Reg2 := Clave3 * Resguardar claves * MIENTRAS NO FDA(Arch) HACER VER_CORTE TRATAR_REGISTRO Leer_registro; FMientras; Corte_3; * corte de mayor nivel * Emitir_totales;

FACCIÓN.

Acción Ver_corte es SI Clave3 <> Reg3 ENTONCES Corte3 SINO SI Clave2 <> Reg2 ENTONCES Corte2 SINO SI Clave1 <> Reg1 ENTONCES Corte1 Fsi; Fsi; FSI;

Facción.

Acción Corte_n es Corte n-1 * llama al corte de nivel inmediato inferior * Emitir totales n Acumular totales al nivel inmediato superior * tot n+1 : = tot n+1 + tot n * Reinicializar totales de este nivel * tot n : = 0 * Reg n : = Clave n

FAcción.

Complejos o múltiples

Page 16: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 16 de 31

Existen por lo menos dos ficheros de entrada, pudiendo existir uno o mas archivos de salida. La finalización del proceso se maneja con la técnica del apareo. Las estructuras de los ficheros deben tener un elemento comun: la “clave de apareo” o “campo clave”.Los ficheros deben estar ordenados por el “campo clave”.

Mezcla o apareo: se realiza mezcla de archivos cuando se reúnen varios archivos en uno solo, intercalando sus registros de acuerdo a un determinado criterio. Los archivos de entrada deben estar ordenados por clave de apareo. La mezcla puede ser directa o indirecta.

Mezcla directa: los archivos de entrada tienen el mismo formato de registro. El número de registros del archivo de salida es la sumatoria de los registros de los archivos de entrada.

Mezcla indirecta: los archivos de entrada tienen formatos diferentes, se debe definir el formato del archivo de salida. El número de registros en el archivo de salida es indeterminado.

A1 A2 An

AsListado de

errores

MEZCLA

Tipos de Mezcla:

DIRECTA INDIRECTA

Formato de los registros de los Ficheros de Entrada

igual distinto

Formato de los registros del Fichero de Salida

igual al de los ficheros de entrada

igual a alguno de los ficheros de entrada o una combinación de estos

Cantidad de registros del Fichero de Salida

es igual a la sumatoria de las cantidades de los registros de los ficheros de entrada: n # As =

no es posible predecir

Ciclos de Apareo: - Incluyente

MIENTRAS NO FDA (Arch 1) o NO FDA(Arch 2) o .... NO FDA(Arch n) HACER

Page 17: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 17 de 31

PROCESO

FMientras. - Excluyente

MIENTRAS NO FDA (Arch 1) y NO FDA(Arch 2) HACER PROCESO de registros comunes

FMientras.

MIENTRAS NO FDA (Arch 1) HACER ** Uno de estos ciclos por cada fichero PROCESO de Registros del Arch 1 interviniente **

Fmientras.

MIENTRAS NO FDA (Arch 2) HACER PROCESO de Registros del Arch 2

FMientras. Si hay más de 2 ficheros se necesitarán más ciclos, además del ciclo principal. Por ej: para 3 ficheros se necesitarán 7 ciclos: 1 - Condición: NO FDA (Arch 1) y NO FDA (Arch 2) y NO FDA (Arch 3) - Ciclo principal que procesa registros comunes. 2 - Condición: NO FDA (Arch 1) y NO FDA (Arch 2) 3 - Condición: NO FDA (Arch 1) y NO FDA (Arch 3) 4 - Condición: NO FDA (Arch 2) y NO FDA (Arch 3) 5 - Condición: NO FDA (Arch 1) 6 - Condición: NO FDA (Arch 2) 7 - Condición: NO FDA (Arch 3)

Actualización: en ella se puede incorporar, modificar o eliminar información de un archivo mayor (maestro) y se utiliza como mínimo, dos archivos de entrada y uno de salida. La actualización de archivos supone:

La incorporación de nuevos registros – altas

La modificación de registros existentes – modificaciones

La eliminación de registros – bajas

Archivo maestro: es el de mayor estructura, al cual se le aplica la actualización. Archivo de movimientos: es el archivo de estructura menor o igual al de maestro, debe contener como mínimo el campo clave de apareo para poder realizar la actualización. Contiene las modificaciones que se necesitan hacer sobre el maestro.

Movimientos

Altas: incorporación de un nuevo registro al archivo maestro manteniendo la unicidad de las claves.

Page 18: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 18 de 31

Modificaciones: corresponde a la existencia de un registro del maestro en el cual se desea modificar parte o todo su contenido, exceptuando el campo clave. Bajas: es la eliminación física o lógica de un registro.

o Física: consiste en eliminar totalmente el contenido y la clave de archivo maestro. La eliminación es permanente.

o Lógica: consiste en marcar o señalar el registro como eliminado. Este tipo de baja requiere un campo de estado, es un campo que debe estar contenido en el registro.

Tipos de actualización

Actualización individual: el archivo de movimientos posee movimientos de un solo tipo (alta, baja o modificación). Actualización general o combinada: el archivo movimientos contiene movimientos de los tres tipos (alta, baja y modificación). Esta se clasifica en: por lotes y unitaria.

Por lotes: existen cero o múltiples registros en el archivo movimientos para cada registro del maestro. Utilizando ciclo incluyente, se considera un archivo de movimientos consistente y se realizan bajas lógicas.

Unitaria: existen cero o un registro en el archivo movimientos para cada registro del maestro.

Clasificación de actualización

Actualización secuencial: esta actualización es posible tanto para archivos secuenciales como para i ndexados.

Como su nombre lo indica, esta actualización recorre secuencialmente el archivo maestro y a la vez el archivo movimientos mediante el uso de un ciclo excluyente o de un ciclo incluyente. Se comparan las claves de los registros de ambos archivos: si la clave del registro maestro es menor a la del registro movimiento, significa que ese registro maestro no tiene movimiento alguno, entonces se deberá copiar el registro maestro al archivo de salida (maestro actualizado), en caso de que el maestro sea secuencial, o, si el archivo es indexado, dejar el registro como esta. Si la clave del registro maestro es igual a la del registro movimiento implica que posee movimientos, para lo cual se tendrá que actualizar los campos correspondientes al registro movimiento, y luego agregar el registro al archivo de salida, si el archivo es secuencial, o re-escribir el registro en el archivo maestro, si es indexado. Por último, si la clave del registro maestro es mayor a la del registro movimiento, corresponde a una alta, por lo que se debe incorporar el registro movimiento al archivo maestro actualizado o maestro. Este es un proceso seguro, puede ser cuantificado, se puede determinar si fue un éxito o un fracaso y en qué momento se produjo el error.

Actualización indexada: el archivo maestro está indexado, por lo tanto puede ser leído y sobrescrito. El archivo movimientos es el que determina el fin del proceso de actualización (ciclo unitario). Este archivo es accedido en forma secuencial y con la clave de cada registro

Page 19: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 19 de 31

se accede directamente al registro maestro: si existe un registro en el archivo maestro con la misma clave que la del registro movimiento, puede tratarse entonces de una modificación o una baja. En el primer caso, modificación, de realizarán los cambios pertinentes en el registro maestro indicados en el registro movimiento y luego se rescribirá el registro actualizado. Para el segundo caso, se dará de baja, física o lógicamente, el registro maestro. Si no existe un registro en el archivo maestro con la misma clave, se trata de un alta, para lo que se debe copiar el registro movimiento y escribirlo en el archivo maestro.

Actualización interactiva (in situ): la actualización se produce al instante en el que ocurre el cambio. No existe un archivo de movimientos, sino que se cuenta con una Terminal. Este proceso termina cuando el usuario deja de ingresar actualizaciones.

ACTUALIZACIÓN (Secuencial)

Ficheros de entrada: por lo menos dos: MAESTRO Y MOVIMIENTOS. Ficheros de salida: como mínimo uno.

MAESTRO MOVIMIENTO

NUEVO

MAESTRO

Listado de

errores

ACTUALIZACIÓN

Tipos de Actualización:

POR LOTES UNITARIA

varios registros de movimiento para un registro maestro.

un registro movimiento para un registro maestro.

Tipos de Ficheros Maestros: - Histórico - Común o Normal Tipos de Ficheros de Movimientos: - Actualización General o Combinado. - Actualización Parcial o Individual. Tipos de Movimientos:

Page 20: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 20 de 31

- Alta - Baja - Modificación Algoritmos:

- Actualización por lotes Utilizando ciclo incluyente, se considera un archivo de movimientos consistente y se realizan bajas lógicas. Consideraciones sobre el ambiente: formato1= registro Clave = registro campo1: .... campo2: .... freg; campo3:..... .... campoN:.... Marca_baja:..... freg;

formato2= registro Clave = registro campo1: .... campo2: .... freg; campo3:..... .... campoN:.... cod_mov: (A,B,M)

freg;

Reg_mae, Reg_sal, Aux: formato1; Reg_Mov: formato2;

ACCION ACT_POR_L ES Algoritmo Abrir_Archivos Leer_Maestro Leer_Movimiento MIENTRAS (Clave_Mae <> High Value) o (Clave_Mov <> High Value) HACER SI Clave_Mae < Clave_Mov * Maestro sin Movimiento * ENTONCES Reg_sal : = Reg_mae ESCRIBIR(Arch_sal, Reg_sal) Leer_Maestro SINO SI Clave_Mae = Clave_Mov * Maestro con Movimiento * ENTONCES Aux : = Reg_mae MIENTRAS Clave_Mae = Clave_Mov HACER Proceso_Movim Leer_Movimiento FMientras Reg_sal : = Aux ESCRIBIR(Arch_sal, Reg_sal) Leer_Maestro SINO * Movimiento sin Maestro ~ 1 Alta y 0-1 Modific. y/o Bajas * * Asigna campo por campo, porque Aux y Reg_mov tienen distinto formato * Aux.clave : = Reg_mov.clave Aux.campo1 : = Reg_mov.campo1 Aux.campo2 : = Reg_mov.campo2 ........ Aux.campoN : = Reg_mov.campoN

Page 21: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 21 de 31

Aux.Marca_baja := „ „ Leer_Movimiento MIENTRAS Clave_Aux = Clave_Mov HACER Proceso_Movim Leer_Movimiento FMientras Reg_sal : = Aux ESCRIBIR(Arch_sal, Reg_sal) FSI; FSI; Fmientras; Cerrar(Arch_sal) FACCIÓN. Acción Leer_Movimiento es LEER(Arch_mov, Reg_mov) SI FDA(Arch_mov) ENTONCES Clave_mov : = High_value FSI; FAcción. Acción Leer_Maestro es LEER(Arch_mae, Reg_mae) SI FDA(Arch_mae) ENTONCES Clave_mae : = High_value FSI; FAcción. Acción Proceso_Movim es * Comparar la información del Registro de Movimientos y, de acuerdo a los valores que traigan, y alterar los contenidos del Registro Auxiliar (Aux). * SI Cod_Mov = „M‟ * Modificación * ENTONCES Proceso_modif_maestro SINO SI Cod_Mov = „B‟ * eliminación lógica * ENTONCES Marcar_registro Fsi; Fsi; FAcción. Acción Proceso_ modif_maestro es Si Reg_Mov.campo1 <> „ „ entonces Aux.campo1 := Reg_mov.campo1 fsi; Si Reg_Mov.campo2 <> „ „ entonces Aux.campo2 := Reg_mov.campo2 fsi; Si Reg_Mov.campo1 <> „ „ entonces Aux.campo3 := Reg_mov.campo3 fsi; * ... y así sucesivamente para todos los campos del registro...*

FAcción.

Acción Marcar_registro es Aux.Marca_baja:= „*‟ * en vez de asterisco, se puede asignar la fecha del día,

Page 22: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 22 de 31

o cualquier otro dato, según el problema * FAcción.

Page 23: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 23 de 31

- Actualización unitaria Utilizando ciclo incluyente ACCION ACT_UNIT ES Algoritmo Abrir_Archivos Leer_Maestro Leer_Movimiento MIENTRAS (Clave_Mae <> High Value) o (Clave_Mov <> High Value) HACER SI Clave_Mae = Clave_Mov ENTONCES Proceso_iguales SINO SI Clave_Mae < Clave_Mov ENTONCES Reg_sal : = Reg_mae ESCRIBIR(Arch_sal, Reg_sal) Leer_Maestro SINO Proceso_distintos Fsi; FSi; Fmientras; Cerrar Archivos FACCIÓN. Acción Leer_Movimiento es LEER(Arch_mov, Reg_mov) SI FDA(Arch_mov) ENTONCES Clave_mov : = High_value FSI; FAcción. Acción Leer_Maestro es LEER(Arch_mae, Reg_mae) SI FDA(Arch_mae) ENTONCES Clave_mae : = High_value FSI; FAcción. Acción Proceso_iguales es SI Cod_Mov = „ALTA‟ ENTONCES ESCRIBIR(„Error alta no existe‟) Reg_sal : = Reg_mae ESCRIBIR(Arch_sal, Reg_sal) SINO SI Cod_Mov = „MODIF‟ ENTONCES Proceso_modif_maestro Reg_sal : = Reg_mae ESCRIBIR(Arch_sal, Reg_sal) SINO * eliminación lógica * Marcar_registro Reg_sal : = Reg_mae ESCRIBIR(Arch_sal, Reg_sal) Fsi;

Page 24: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 24 de 31

Fsi; Leer_Maestro Leer_Movimiento FAcción. Acción Proceso_distintos es SI Cod_Mov = „BAJA‟ ENTONCES ESCRIBIR(„Error baja no existe‟) SINO SI Cod_Mov = „MODIF‟ ENTONCES ESCRIBIR(„Error mofificación no existe) SINO * Asigna campo por campo, porque Reg_sal y Reg_mov tienen distinto formato * Reg_sal.clave : = Reg_mov.clave Reg_sal.campo1 : = Reg_mov.campo1 Reg_sal.campo2 : = Reg_mov.campo2 ........ Reg_sal.campoN : = Reg_mov.campoN Reg_sal.Marca_baja := „ „ ESCRIBIR(Arch_sal, Reg_sal) Fsi; Fsi; Leer_Movimiento FAcción.

Acción Proceso_ modif_maestro es Si Reg_Mov.campo1 <> „ „ entonces Reg_mae.campo1 := Reg_mov.campo1 fsi; Si Reg_Mov.campo2 <> „ „ entonces Reg_mae.campo2 := Reg_mov.campo2 fsi; Si Reg_Mov.campo1 <> „ „ entonces Reg_mae.campo3 := Reg_mov.campo3 fsi; * ... y así sucesivamente para todos los campos del registro...*

FAcción.

Acción Marcar_registro es Reg_mae.Marca_baja:= „*‟ * en vez de asterisco, se puede asignar la fecha del día, o cualquier otro dato, según el problema * FAcción.

Page 25: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 25 de 31

ACTUALIZACIÓN (Indexados)

Ficheros de entrada: por lo menos dos: MAESTRO Y MOVIMIENTOS. Ficheros de salida: el mismo MAESTRO, actualizado.

MAESTRO MOVIMIENTO

Listado de

errores

ACTUALIZACIÓN

INDEXADOS

MAESTRO

Backup

Tipos de Actualización:

POR LOTES UNITARIA

varios registros de movimiento para un registro maestro.

los movimientos se ingresan por pantalla, sin orden. Procesos interactivos.

Algoritmo: - Actualización unitaria Archivo Maestro indexado por clave Archivo Movimiento ordenado por clave y cod_mov. ACCION ACT_UNIT_INDEX ES Algoritmo Abrir (arch_mov) Abrir I/O (arch_mae) Leer (arch_mov, Reg_mov ) MIENTRAS NO FDA(arch_mov) HACER clave_mae : = clave_mov Leer (arch_mae, Reg_mae ) SI No existe ENTONCES SI cod_mov = „B‟ ENTONCES ESCRIBIR(„Error baja no existe‟) SINO SI cod_mov = „M‟ 2 ENTONCES ESCRIBIR(„Error modificación no existe‟) SINO

* Asigna campo por campo, porque Reg_mae y Reg_mov tienen distinto formato *

Page 26: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 26 de 31

Reg_mae.campo1 : = Reg_mov.campo1 Reg_mae.campo2 : = Reg_mov.campo2

........ Reg_mae campoN : = Reg_mov.campoN

Reg_mae.Marca_baja := „ „ ESCRIBIR(arch_mae, Reg_mae) FSI; FSI; SINO SI cod_mov = „A‟ ENTONCES ESCRIBIR(„Error clave existe, alta no es posible‟) SINO SI cod_mov = „M‟ ENTONCES Modificar Registro Maestro RE-ESCRIBIR(arch_mae, Reg_mae) SINO **{baja lógica}** Marcar Registro Maestro RE-ESCRIBIR(arch_mae, Reg_mae) ** o {baja física}** BORRAR(arch_mae, Reg_mae) FSI; FSI; FSI; Leer (arch_mov, Reg_mov ) Fmientras; Cerrar(Arch_mov) Cerrar(Arch_mae) FACCIÓN.

Page 27: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 27 de 31

Listas

Las listas son estructuras dinámicas, compuestas por nodos linealmente ordenados con adyacencia lógica, las cuales pueden crecer o reducirse. Se recorren secuencialmente y solo están limitadas por la cantidad de memoria. Nodo: es un registro que posee como mínimo dos campos: uno para datos y otro es un “puntero interno”, el cual provee la dirección del próximo nodo. Un nodo es una variable dinámica. Variable dinámica: es una variable simple o una estructura de datos creada en tiempo de ejecución y accedida mediante un puntero. Puntero: es una variable simple y estática que almacena la dirección de memoria de una variable dinámica. Listas particularizadas: son las pilas y las colas. En realidad son una restricción de acceso.

Pilas: todas las inserciones, eliminaciones y lectura de nodos se realizan desde el mismo extremo. A esta estructura se la denomina LIFO (Last In First Out – último en entrar, primero en salir). Colas: los puntos de entrada y salida están separados, es decir que, las inserciones de nodos se realizarán por un extremo y las eliminaciones o lectura por el otro. A es estructura se la denomina FIFO (First In First Out – primero en entrar, primero en salir).

Clasificación de las listas Listas simples o simplemente encadenadas: es una secuencia de nodos que se encuentran enlazados uno con el siguiente mediante un puntero interno. La lista posee un puntero externo (PRIM) que indica cual es su primer elemento. Ésta, termina en el nodo cuyo puntero interno apunte al elemento nulo (NIL). La lista simple solo puede ser recorrida en un sentido, comenzando por el nodo indicado por PRIM.

Listas dobles o doblemente encadenadas: es una lista en la que cada nodo se encuentra enlazado al nodo anterior y al siguiente mediante punteros internos (ANT y SIG), a excepción del primero, cuyo puntero ANT apunta a NIL, y del último, cuyo puntero SIG también apunta a NIL. Por esto, la estructura de cada nodo será:

- El/los campos correspondientes a los datos; - Dos punteros internos que indican la posición del elemento anterior y del siguiente.

La lista doble posee dos punteros externos (PRIM y ULT), de manera que uno apunte al primer nodo y el otro al último. Ésta lista puede ser recorrida en ambos sentidos comenzando por cualquiera de los dos punteros externos.

Page 28: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 28 de 31

Listas circulares: en estas listas no existe el elemento nulo. Pueden ser simples o dobles:

Listas circulares simples: es una lista simple en la cual el último nodo no apunta a NIL, sino al primer nodo, quedando así formado un círculo de nodos, el cual lógicamente no tiene fin. Listas circulares dobles: es una lista doble en la que el puntero interno SIG del último nodo, apunta al primer nodo y el puntero interno ANT del primer nodo apunta al último nodo.

Page 29: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 29 de 31

Recursividad

Es la propiedad por la cual un proceso puede llamarse a sí mismo para resolver un problema. Características de un proceso recursivo:

o Secuencia de pocos pasos. o Una llamada a sí mismo. o Una condición de fin. o Tiende a reemplazar las estructuras repetitivas. o Menor número de variables locales que en las estructuras iterativas. o Se requiere mucha memoria para almacenar los datos en una pila.

Cuándo usar la recursividad:

No debe usarse si los datos o el problema no están planteados en forma recursiva, en ese caso es conveniente usar la iteración.

No utilizar recursividad a menos que se tenga un medio para terminar la llamada recursiva.

No utilizar recursividad cuando no hay una ventaja clara.

Es conveniente cuando el problema o los datos están definidos en forma recursiva.

El único fin de la recursividad es manejar árboles, ya que son estructuras recursivas.

Un caso recursivo puede plantearse de forma iterativa, pero no siempre al revés. Niveles de recursividad: La recursividad se presenta en dos niveles:

1. A nivel de dato – Definición recursiva. 2. A nivel de acción – Proceso recursivo.

1. A nivel de dato: es cuando un objeto se define en función de sí mismo. Se define un

conjunto infinito de objetos mediante un enunciado finito. Ejemplo: listas, árboles. 2. A nivel de acción: implica una función o procedimiento que se invoca a sí mismo,

condicionado mediante un tope o condición de fin. Las acciones se definen en versiones más pequeñas de sí mismas.

Tipos de recursividad Directa: un subprograma se llama a sí mismo una o más veces. Indirecta: un subprograma A llama a un subprograma B y éste a su vez llama a A. Caso base: es el caso para el que la solución puede establecerse de forma no recursiva.

Page 30: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 30 de 31

Caso general o recursivo: caso para el cual la solución se expresa en términos de una versión más pequeña de sí misma. Pasos para aplicar recursividad:

I. Comprender el problema. II. Determinar el o los casos bases.

III. Determinar el caso recursivo.

Árboles

Un árbol es un tipo de datos estructurado, de carácter dinámico, que dispone de la información de manera jerárquica. Está compuesto por nodos. Cada nodo va a estar enlazado con el próximo, ya no por orden lineal sino de acuerdo a una jerarquía. Fundamentalmente, la relación clave es la de padre-hijo entre los nodos de un árbol. Si existe una arista o rama dirigida del nodo a al nodo b, entonces a es padre de b y b es un hijo de a. El árbol se almacena en memoria interna. La única manera de manejarlo es con la recursividad ya que es una estructura totalmente recursiva (se define y se ejecuta recursivamente). Los árboles pueden tener cualquier cantidad de punteros internos. El árbol más chico es el “binario”, pero existen árboles “n-arios”. Nodo raíz: es el nodo superior, representa la entidad mayor dentro de un árbol. Ningún nodo puede apuntar a él. Nodo descendiente: se encuentra debajo de otro nodo, es decir, depende de otro de nivel superior. Nodos hermanos: dos nodos son hermanos si tienen el mismo padre. Se llamarán hermano izquierdo y derecho respectivamente. Nodo interior: todo nodo no terminal, con descendientes. Nodo terminal u hoja: es el que no tiene hijos o descendientes. Camino: es una secuencia de nodos conectados dentro de un árbol. Longitud de un camino: es el número de nodos que componen el camino menos uno, o bien el número de aristas o ramas que los une. Nivel de un nodo El nivel o profundidad de un nodo se define como una cantidad mayor en uno al número de sus ascendentes. Altura de un árbol La altura de un árbol es el número de nodos en el camino más largo desde la raíz a una hoja, es decir, el número de niveles distintos. Grado de un árbol El grado de un árbol es el número de descendientes que puede tener cualquier nodo e incluso la raíz, es el número de punteros internos. Árboles binarios

Page 31: Teoría de Algoritmos 3

Universidad Tecnológica Nacional. FRRe. Algoritmos y Estructuras de Datos.

Página 31 de 31

Un árbol binario es aquel en el que cada nodo no puede tener más de dos hojas o descendientes. Es un conjunto vacío o un conjunto que consta de un nodo raíz enlazado a dos árboles binarios disjuntos denominados subárboles de izquierda y de derecha. Cada uno de estos de estos subárboles son, a su vez, un árbol binario, y deben ser subconjuntos disjuntos de nodos, es decir, ningún nodo puede estar en ambos subárboles. Diagrama de un árbol binario Árboles binarios equilibrados Un árbol binario se dice que está equilibrado si cada nodo tiene exactamente dos hojas o ninguna, y si cada una está al mismo nivel. También se dice que está completo. Diagrama Recorrido de un árbol binario Es el proceso de acceder a todos los nodos de un árbol. El árbol puede ser recorrido en varios órdenes. Los tres recorridos típicos se clasifican de acuerdo al momento en que se visita la raíz en relación con la visita de sus subárboles: 1) recorrido en pre-orden: primero se accede a la raíz, luego al subárbol izquierdo y por último al derecho; 2) recorrido en orden: se accede primero al subárbol izquierdo, después a la raíz y luego al subárbol derecho; 3) recorrido en post-orden: se visitan primero los subárboles izquierdo y derecho respectivamente y después la raíz. Algoritmos Diagrama ejemplo Al recorrer el árbol y escribir los caracteres de los nodos en la secuencia en que estos se van encontrando, se obtienen las siguientes ordenaciones:

1. Pre-orden: 2. Orden: 3. Post-orden:

Se pueden ver las tres formas de expresiones: el recorrido en pre-orden produce la notación prefija; el recorrido en post-orden genera la notación post-fija o inversa y el recorrido en orden produce la notación convencional.