Вы находитесь на странице: 1из 19

Algoritmos y Estructuras de Datos

Algoritmo: Secuencia finita de pasos para resolver un problema. En el caso de nuestro estudio para resolverlo o aplicarlo es necesaria una mquina real, una computadora (que posee particularidades especiales). Para que un algoritmo pueda ejecutarse siempre debemos traducirlo a un lenguaje de programacin, como Basic, Pascal, etc. Para resolver el problema en cuestin, en nuestro estudio no se toman en cuenta ni el lenguaje a utilizar ni la mquina en la que ser ejecutado al algoritmo, en vez de ello se piensa que el algoritmo ser ejecutado en una mquina ideal abstracta y el lenguaje que utilizaremos se denomina pseudocdigo. Accin: Acontecimiento producido por un actor. Tiene lugar durante un perodo de tiempo finito y produce resultados bien definidos y precisos. Clasificacin de Acciones: Pura Asignacin Simples Accin elemental Acciones Accin con nombre Simples Estructuradas Condicionales Cclicas Alternativas Seleccin mltiple Pre-Test (Mientras) Pos-Test (Repetir) Manejadas por contador (Para) Acciones Simples: Asignacin: es la accin que da valor a una expresin, a una variable es la accin de transferir un contenido. El operador de asignacin es: :=. Expresin: Es la reunin de datos (constantes y variables) relacionadas mediante operadores. Acciones Elementales: Es la ejecucin de un acontecimiento elemental. Es una accin que aparece en el algoritmo por su nombre, ejemplo: Leer() o Escribir(). Acciones Estructuradas: Accin con nombre: Es la incorporacin de un nombre al repertorio finito de acciones. Para incorporar el nombre al repertorio es preciso proporcionar al nuevo nombre la especificacin de la accin y el texto que constituye su descripcin. AccinNombrees; Accin1 Accin2 ... Accinn FAccin
1

Funcionales Algebraicas

Expresin

Incrementales Contador Acumulador

Condicionales: Simples: Es la ejecucin condicional de una accin. La composicin condicional permite expresar que no es necesario provocar un cierto acontecimiento ms que bajo una determinada condicin. SiCondicinentonces Accin FSi Alternativas: Es la ejecucin alternativa de una entre dos acciones, la composicin alternativa permite expresar que debe provocarse un acontecimiento bajo una determinada condicin u otro bajo la condicin contraria. SiCondicinentonces Accin1 Sino Accin2 FSi Seleccin mltiple: Es la ejecucin condicional de entre varias acciones que se excluyen mutuamente. El conjunto de las condiciones est enteramente definido por el conjunto de los valores que puede tomar un indicador. SegnIndicadorhacer Val1:Accin1 Val2:Accin2 ... ValN:AccinN Otro:AccinOtro FSegun Cclicas: Pre-Test: Esta forma de composicin cclica permite agrupar los procesos en los cuales una accin es ejecutada cero, una o ms veces. La condicin que aparece en el algoritmo indica la observacin que debe hacerse para que contine la iteracin. La accin es ejecutada Mientras la condicin sea verdadera. Es una Estructura Definida e Impura (Impura se refiere a que se descarta un elemento que no cumple con la condicin y por tanto hace salir del ciclo). MientrasCondicinhacer Accin FMientras Pos-Test: La ejecucin de este texto provoca sucesivamente la ejecucin de la accin y, a continuacin la observacin de la condicin y contina as hasta que el resultado de la condicin sea cierto, es decir, se ejecuta la condicin mientras la condicin sea falsa. Es una estructura Indefinida y Pura puesto que todos los elementos son tratados de la misma manera. Repetir Accin HastaqueCondicin Manejada por contador: Se ejecutan las acciones una cantidad preestablecida de veces. Es una estructura Definida y Pura. ParaVc:=VihastaVfhacer Accin FPara

La variable Vc es de tipo numrica y se denomina Variable de control. Vi y Vf son variables de tipo numrica, constantes numricas o expresiones aritmticas. Vi recibe el nombre de Variable inicial, Vf recibe el nombre de Variable final. El ciclo va incrementando la variable de control hasta llegar al final, se hace de uno en uno, a menos que se especifique otro caso. Clasificacin de Datos Simples Numricos Lgicos Punteros Alfanumricos Conjuntos Enteros Reales Carcter Cadena

Punto fijo Punto flotante

Datos Estticos Estructurados Dinmicos Campos Arreglos Registros Ficheros secuenciales Ficheros no secuenciales Densas Listas rboles Enlasadas Pila Cola Simplemente Doblemente Circular Simplemente Doblemente

Secuencia Un conjunto de objetos es una secuencia si se verifican las siguientes condiciones: 1. Primer objeto de secuencia: Un elemento del conjunto llamado primero, se distingue de los dems. Se debe acceder a este elemento para poder acceder a todos los dems. 2. Relacin de sucesin entre los objetos: Todos los elementos de la secuencia (salvo el ltimo) precede a uno de los dems objetos. 3. Caracterizacin de fin de secuencia: Debe estar definido un indicador de fin de secuencia, caracteriza al elemento final y en particular permite detener la enumeracin de la secuencia por observacin de la caracterstica del ltimo elemento. Caractersticas complementarias: Finitud: La longitud de una secuencia puede ser conocida o no, pero todas las secuencias deben ser finitas. Orden: Existe un orden cuando la relacin sucesora es estricta entre el primer elemento y el ltimo. Completitud: Especifica que entre un elemento y su sucesor no hay ausencias. Clasificacin de secuencias: Por su condicin de fin: Puras: El ltimo elemento de la secuencia indica el fin de la misma y debe ser tratado
3

como un elemento cualquiera . Se utiliza el ciclo Post-Test. Impuras: Posee una marca de fin, es decir, un objeto extrao al final que no debe ser tratado como el resto de los elementos, se utiliza el ciclo Pre-Test. Por su cantidad de elementos: Definida: Si se conoce a priori la cantidad de elementos que posee. Indefinida: Si no se conoce a priori la cantidad de elementos que posee. Registros Es un agrupamiento de campos continentes y contenidos. Es una estructura compuesta de un nmero fijo de componentes llamados campos, donde cada uno de ellos viene definido con un nombre y un tipo. Se lo llama registro por contener informacin referida a una entidad. Es una estructura esttica, compleja y se almacena en memoria externa. Un campo CONTINENTE es aquel que contiene a otros campos, mientras que un campo CONTENIDO es el que es contenido por otro campo. Clasificacin de los registros: Fija Segn su longitud Variable Por ocurrencia Por enumeracin

Longitud fija: Su tamao est definido en el ambiente y no puede ser alterado. Alu=Registro AyN:AN(30) Leg:N(8) FinRegistro Longitud variable (dinmica): es una estructura compuesta por campos cuyo tamao va a ir variando durante la ejecucin del programa, segn lo regir el planteo del problema. Por ocurrencia: Los registros tiene una longitud mxima y mnima. El tamao vara entre dos valores. Presentan un solo formato y tiene incluido un arreglo dentro del cual se encuentra una parte comn a todos los registros. UTN=Registro Leg:N(8) Cant:0..48 Mat:RegistroocurresegnCant Cod_mat:N(3) Fecha:N(8) FinRegistro FinRegistro

Por enumeracin: Se tienen varios formatos de registros. En el archivo se definen varios registros de longitud fija. Es la aglutinacin de varios registros. MOVC=Registro MOVB=Registro MOVA=Registro Clave=Registro Clave=Registro Clave=Registro CodE: CodE: CodE: NroR: NroR: NroR: Freg Freg Freg CodMov:'C' CodMov:'B' CodMov:'A' RestoC:Comun RestoR:Remi RestoC:Comun FReg FReg RestoR:Remi FReg BAJA=Registro Clave=Registro CodE: NroR: Freg CodMov:('D','E') RestoC:Comun FReg ArchMov:ArchivodeMOVA,MOVB,MOVC,BAJA. Archivos Es un conjunto de registros o una coleccin de datos que estn almacenados en memoria externa permanentemente. La estructura del archivo se caracteriza por su cardinalidad finita. Por esta razn no hace falta dar la longitud del archivo. Consta de una secuencia de componentes del mismo tipo. Clasificacin: Archivo Organizacin Secuencial Relativa Directa Indexada Secuencial Al azar Acceso Directo Mixto

Organizacin: Es como van a ser almacenados los datos. La organizacin es permanente, ya que una vez definida no puede cambiarse. La forma de almacenamiento nace y muere con el archivo. Secuencial: Implica continuidad fsica entre los registros que es inamovible. Los registros son almacenados en el mismo orden en que se ingresan. Para poder acceder a un registro en particular debe accederse a todos los anteriores. Si un archivo esta abierto para la escritura, no puede usarse para la lectura. Directa: Usa los espacios libres en memoria. Hace un uso dinmico de la memoria. Relativa: Se debe definir su tamao. La ventaja es que se debe predecir el espacio. Los registros se graban ordenados por clave. Pueden ser accedidos directamente o secuencialmente, es muy seguro por ser inviolable. Indexada: Tiene dos reas; una de datos y otra de ndices. En la ubicacin de los
5

registros se crea una clave de ndice, que es una tabla donde se anotan los lugares libres y la ubicacin de los registros. Poseen la libertad de crecer.

Acceso: Es la forma en la que se van a leer (recuperar) los registros. Secuencial: Para acceder a un determinado registro debo pasar por sus antecesores. Directo: Solo es posible para la asignacin de tipo directa. Al azar o puntual: Debe tener un ndice, por lo tanto se puede acceder directamente a un registro particular mediante su clave. Dinmica o mixta: Primero se accede al azar y luego de forma secuencial (no al revs), para esto se debe conocer la clave del primer elemento que se busca y a partir de ah recorrer secuencialmente. Procesos con archivos

Simples * Generacin o Carga * Corte de Control * Listado de Padrones * Estadsticos

Complejos * Falso Complejo * Actualizacin * Mezcla o Apareo * Heterognea * Homognea

Procesos Simples: Interviene un slo archivo de entrada, pudiendo haber o no uno de salida. Carga o Generacin: Es el proceso que se encarga de la creacin y la carga de los archivos. Consistencia: leer un dato desde un archivo y verificar que cumpla las caractersticas de salida. Congruencia: Comparar los datos de un mismo registro y verificar que se cumple. Listado o Padrn: Siempre hay un archivo de entrada y la salida siempre es impresa. Los controles se realizan con contadores. El archivo debe estar ordenado. Corte de Control: Se producen paradas momentneas para emitir totalizadores parciales u otras acciones del mismo tipo. Se produce por cambio de contenido en los distintos niveles de clave compleja (Existen tantos niveles de corte como campos tenga la clave). Objetivo: Obtener valores cuantificados. Los registros estn ordenados por clave compleja. Estadsticos: Son los nicos procesos que no piden ningn requisito de entrada. Busca emitir tablas de valores, la emisin es pequea, pero se tienen fuertes procesos de clculo. Busca emitir tablas de valores, es una proceso largo que no recorre todo el archivo, su herramienta es el arreglo, no existe requisito para el archivo de entrada y muestra los resultados al final del proceso. Procesos Complejos: Existen por lo menos dos archivos de entrada, pudiendo existir varios de salida. La finalizacin del proceso se maneja con la teora de apareo. Falso Complejo: De varios archivos de entrada, solo uno es importante, por lo que se verifica un proceso simple, los dems archivos se utilizan como auxiliares. Mezcla o Apareo: Intervienen por lo menos dos ficheros de entrada que deben ser combinados para obtener uno de salida, los archivos de entrada deben estar ordenados por clave de apareo. Homognea: Todos los archivos que intervienen poseen el mismo formato de registro y el nmero de de registros del archivo de salida es la sumatoria de todos los registros de entrada. Heterognea: Los archivos de entrada tienen formatos diferentes y se debe definir el
6

formato del archivo de salida, pudiendo ser diferente al formato de la entrada. De todos los archivos de entrada hay uno de mayor importancia y es el que maneja el ciclo de mezcla. La salida adopta la forma del de mayor prioridad o una mezcla de los mismos Tcnicas de apareo: Incluyente (o): Todos los archivos de entrada son tratados en el mismo ciclo. Excluyente (y): Se tratan los archivos comunes en el ciclo y los no comunes fuera de el. Actualizacin: Significa incorporar, modificar o eliminar informacin de un archivo mayor (maestro) y se utilizan como mnimo dos de entrada y uno de salida. Este proceso se da en los archivos Maestros y Movimientos, en ste ltimo pueden venir todas o algunas de las siguientes informaciones: Altas: Incorporar nuevos registros. Bajas: Pueden ser fsicas (borra el registro fsicamente) o lgicas (se marca el registro como inactivo, desactivado, etc.) Modificacin: Modifica los registros existentes. Segn la cantidad de movimientos se clasifican en: Unitaria: Un movimiento por cada registro del maestro. Por Lotes: Varios movimientos por cada registro del maestro. Segn su organizacin el archivo puede ser: Secuencial: El archivo maestro es secuencial. Indexada: El archivo maestro es indexado. Actualizacin Secuencial El archivo maestro es secuencial. Es un proceso diferido, pues se prolonga en el tiempo, es un proceso lento, si hay una baja en el sistema (corte del suministro elctrico, etc.) no se pierden los archivos, la actualizacin no se lleva a cabo en el mismo maestro (batch). #Mae Maestro Movimientos #Mov = #A + #B + #M

Actualizacin Secuencial

Maestro Actualizado #Mae_Act = #Mae + #Ac[-Bfc]

Alta Baja Modif

Poseen acceso secuencial y para acceder al ltimo debo acceder a todos los anteriores. Son estructuras estticas (no se pueden ampliar) Los registros se almacenan secuencialmente con adyacencia fsica Para insertar un registro hay que crear un nuevo archivo. Proceso diferido: no modifico el archivo en el momento en que ocurren los movimientos. Proceso Batch (juntar) todos los movimientos en un archivo. Resguardos automticos (Back-Up) Actualizacin Indexada

El archivo base tiene organizacin directa, es un proceso in-situ, es decir, la actualizacin se realiza sobre el mismo maestro de entrada. Si las actualizaciones se realizan en el mismo momento en que ocurren (Si por ejemplo se realizan en un terminal) el proceso se llama interactivo. El proceso finaliza cuando termina el archivo de movimientos, o en el caso interactivo, cuando el usuario lo desee. El archivo base es muy vulnerable y puede ser violado. Index Maestro Movimientos

Back-Up Iguales

Actualizacin Indexada

Movimientos para el control

Secuencial Maestro Actualizado Solo para control

Posee acceso secuencial y directo a cualquier elemento del archivo. Son estructuras dinmicas que pueden crecer o reducirse. Los registros son almacenados con adyacencia lgica y nocin de adyacencia fsica. Proceso in-situ Se procesa sobre el mismo maestro indexado en el momento en que se realizan los hechos. Proceso interactivo o dinmico: No existe un archivo de movimientos, la actualizacin es de manera interactiva. Resguardos provocados.
8

Arreglos Es una estructura de datos fijos, ay que una vez que se ha definido su tamao no puede crecer ni reducirse, tiene continuidad fsica, se almacena en memoria interna, posee accesos directo y secuencial a todos sus elementos. Pueden ser recorridos en forma inversa, es una estructura homognea, tiene un nico nombre para todo el grupo. Cada elemento se identifica por un ndice, el cual permite el acceso directo. La definicin de la cantidad de componentes est dada por la longitud. La cantidad de ndices indica la dimensin; puede ser unidimensional, bidimensional, o multidimensional. La repeticin de la estructura se establece por medio de un intervalo. Es una herramienta auxiliar, los vectores no se pueden leer y escribir con una sola operacin, la lectura y escritura se hace elemento a elemento y para visualizar los elementos del arreglo es preciso utilizar estructuras repetitivas.
Carga o inicializacin Lgico Ilgico Parcial Lineal Bsqueda Binaria Mtodos directos Ordenamiento Mtodos avanzados Pura Con centinela Desordenado Ordenado Insercin Seleccin Intercambio

Total Recorrido Procesos con arreglos

Proceso de carga o inicializacin: La Carga consiste en colocar contenidos en el arreglo capturados desde el exterior. La inicializacin consiste en hacer un recorrido total del arreglo y asignarle un valor inicial, generalmente el 0. Recorrido: Si el recorrido es Total, se recorren todos los elementos del arreglo, se utiliza una estructura iterativa del tipo Para. ste recorrido a su vez puede ser Lgico o Ilgico, el primero es cuando se recorre de a un elemento y desde el primero al ltimo, de menor a mayor. El segundo es cuando se contradice esto, es decir, se recorre desde el mayor ndice al menor de ellos. Cuando el recorrido es Parcial solo se accede a algunos elementos, no a todos. Bsqueda: Consiste en producir un recorrido sobre el arreglo a fin de detectar un contenido particular. Existen dos posibles estados finales: el xito o el fracaso. Ordenamiento: Consiste en recorrer el arreglo para ordenar sus elementos con algn criterio, por ejemplo de menor a mayor. La declaracin de un arreglo en el ambiente se realiza de la forma siguiente: Ambiente Array:Arreglo[1..30]deentero /*Siqueremosunamatrizde5x5porejemlo:*/ Matrix:Arreglo[1..5,1..5]deentero

Mtodos de Bsqueda Bsqueda Lineal: La bsqueda lineal se subdivide en Pura o Simple y en bsqueda Con centinela, sta ltima a su vez sufre una pequea modificacin de su implementacin para arreglos ordenados y no ordenados. Pura o Simple: Consiste en recorrer el arreglo desde la primer posicin hasta la ltima, comparando cada elemento con el valor buscado. Al finalizar la bsqueda se deber informar donde se encontr el elemento en caso de que la bsqueda haya tenido xito, en caso contrario se deber informar la no existencia del mismo. Se aplica indistintamente para arreglos ordenados como para no ordenados. La bsqueda no finaliza al encontrar la primer ocurrencia, sino que apunta a la multitud de xitos. A continuacin se mostrar el algoritmo de esta bsqueda, se observar que: Los xitos se trabajan dentro del ciclo y los fracasos fuera de l y el nmero de comparaciones realizadas como mnimo ser igual a la cantidad de elementos que posea el arreglo. Encontrado=Falso Leer(x) Parai:=1hastanhacer SiA[i]=xentonces Tratar_Encontrado Fsi FPara SiEncontrado=Falsoentonces Tratar_Fracaso FSi Con Centinela: El recorrido NO es total, la bsqueda finaliza cuando encuentra la primer ocurrencia o al primer valor mayor que el elemento buscado (en arreglos ordenados). El ciclo debe ser manejado por una condicin. El nmero de comparaciones como mnimo ser el nmero de elementos que haya antes de encontrar el elemento0 buscado. Para su implementacin en arreglos desordenados se debe colocar el smbolo de distinto <> en el mientras, en los arreglos ordenados se debe colocar el smbolo de mayor > o menor < segn en que orden se encuentre el arreglo. Leer(Buscado) X:=1 Mientras(A[X]<>Buscado)^(X<100)hacer X:=X+1 Fmientras SiA[X]=Buscadoentonces Tratar_xito Sino Tratar_Fracaso FSi Bsqueda Binaria o Dinmica: Se utiliza cuando el arreglo est ordenado y consiste en dividir o fraccionar el arreglo en mitades e ir comparando el elemento central con el valor buscado. La bsqueda lineal es ms rpida cuando el nmero de elementos del arreglo es pequeo, la diferencia de la bsqueda binaria se pone en evidencia cuando el nmero de elementos del arreglo es grande. El nmero mximo de comparaciones est dado por la siguiente frmula: log 2 n
10

Leer(X);inf:=1;sup:=n med:=(inf+sup)Div2 Mientras(A[med]<>X)^(inf<sup)hacer Si(A[med]<X)entonces Inf:=med+1 Sino Sup:=med1 Fsi Med:=(inf+sup)Div2 FMientras SiA[med]=Xentonces Tratar_xito Sino Tratar_Fracaso FSi Mtodos de Ordenamiento Insercin Directa: El arreglo est divido conceptualmente en dos secuencias, una secuencia destino (1...i-1) y otra origen (i...n). En este caso y partiendo con i=2 e incrementando i de uno en uno, se toma el elemento i de la secuencia de origen y se transfiere a la secuencia de destino, insertndolo en el sitio adecuado. En el proceso de encontrar el sitio adecuado conviene alterar comparaciones y movimientos, es decir, dejar caer el elemento i-simo comparndolo con el inmediato anterior, como consecuencia, se inserta el elemento i-simo, moviendo el elemento anterior a su derecha y se sigue por el inmediato por la izquierda, segn el mismo proceso. Hay dos posibles casos de finalizacin de este proceso de cada: 1. Se encuentra un elemento cuya clave es menor que la del elemento i-simo. 2. Se alcanza el extremo izquierdo de la secuencia de destino. En este caso podemos explicar la tcnica del centinela, usando como tal un elemento A[0]= x = A[i] (Para esto debe entenderse que el campo de variacin del ndice de A es de 0 a n). Valor ordenado Parai:=2hastanhacer X:=A[i];j:=i1 Mientras(j>0)^(x<=A[j])hacer A[j+1]:=A[j] j:=j1 FMientras A[j+1]:=x FPara x 2 x 3 x 1 Valor desordenado Se tiene un vector de n elementos con (n-1) pasos

5 2 3 1 2 5 3 1 2 3 5 1 1 2 3 5

n-1 pasos

Seleccin Directa: ste mtodo se basa en los siguientes principios: 1. Encontrar el elemento menor. 2. Intercambiarlo con el primero, luego estas operaciones se repiten con los elementos n-1, n-2, etc. En primer lugar se recorre el arreglo desde el primer al ltimo elemento para encontrar el menor, luego se lo intercambia con el primer elemento pasando, de sta manera, el elemento pasa a ser el primer elemento del vector ordenado. sta operacin se ir repitiendo partiendo desde el primer elemento a la derecha del vector ordenado. Es posible afirmar que en general, el mtodo de seleccin directa es preferible al de insercin directa, aunque en los casos en los que las claves
11

estn inicialmente ordenadas o casi ordenadas, ste ltimo puede llegar a ser algo ms rpido. Parai:=1hastan1hacer min:=A[i];x:=i x Paraj:=i+1hastanhacer Si(min>A[j])entonces i min:=A[j] x:=j FSi FPara A[x]:=A[i] A[i]:=min FPara Recorre todo el vector hasta encontrar el mnimo y transferirlo

5 2 3 1 1 3 2 5 1 2 3 5 1 2 3 5

n-1 pasos

Intercambio (Burbuja): Este algoritmo se basa en el principio de comparar e intercambiar pares de elementos adyacentes hasta que todos estn ordenados. Se lo conoce como el mtodo de la Burbuja porque si se mira el arreglo como si estuviera en posicin vertical, en vez de horizontal, y se imagina que es un tanque de agua, cada burbuja (elemento) asciende con un peso acorde a su valor. En cada pasada, una burbuja asciende hasta el nivel de peso que le corresponde. Se comparan el primer y segundo elemento del arreglo y si se encuentran desordenados se los intercambia, inmediatamente se comparan el segundo con el tercero y as sucesivamente hasta que no se produzcan cambios en el arreglo, es decir, cuando se encuentre ordenado.

Parap:=1hastan1hacer Parai:=1hastanphacer Si(A[i]>A[i+1])entonces Aux:=A[i] A[i]:=A[i+1] A[i+1]:=Aux FSi FPara FPara

5 1 1 1 1 3 5 2 2 2 1 3 5 3 3 2 2 3 5 5

Listas Se utilizan como estructuras auxiliares, se diferencian de los arreglos por ser estructuras dinmicas indefinidas. Poseen continuidad lgica (recorrido secuencial), cada elemento tiene la direccin del siguiente y se pueden almacenar en cualquier lugar de la memoria disponible. Es necesario conocer la direccin del primer elemento (Prim) para acceder a los dems. El ltimo elemento tiene un puntero llamado nil (vaco). Almacenamiento Encadenado: Esquema flexible en el cual cada elemento contiene un puntero que apunta al prximo de la lista. No es necesario que los elementos, que son lgicamente adyacentes, ocupen posiciones contiguas de memoria. Los elementos son variables dinmicas, las cuales se crean cuando se necesitan. Variable Dinmica: Es una variable simple o estructurada de datos creada en tiempo de ejecucin y accedida mediante un puntero. La variable dinmica es generada mediante un procedimiento estndar que llamaremos Nuevo(P), este procedimiento busca un lugar libre en
12

memoria y lo reserva para almacenar un elemento de la lista. Nodo: Es un campo de informacin, y la nica forma de acceder a ste es mediante un puntero. Puntero: Es una variable simple y esttica, utilizada para almacenar la direccin de memoria de una variable dinmica. Clasificacin de listas: Listas Particularizadas: Pila: Es una estructura de datos en la cual todas las inserciones y eliminaciones se I O realizan por el mismo extremo (tope de pila). En una pila siempre sale el elemento que ha sido insertado al ltimo, por eso se denomina LIFO (Last Input/First Output). Al leer los datos almacenados en la lista aparecen en sentido inverso al que fueron ingresados. Para poder leer o imprimir los datos en el orden en que fueron ingresados es necesario copiarlos a otra pila. I Cola: Es una estructura de datos donde los elementos se apilan, pero se recogen los elementos por extremos diferentes. Es una estructura donde el primer elemento en entrar es el primero en salir FIFO (First Input/First Output), las colas se utilizan siempre que se quiere recuperar una secuencia de elementos en el orden en que O fueron ingresados. Listas Generalizadas: Simplemente Encadenada: Es una secuencia de nodos, donde cada uno se encuentra enlazado con el siguiente mediante un puntero, cada elemento debe tener como mnimo dos campos, uno que contiene el valor de ese elemento y otro (puntero interno) que indica la posicin del siguiente elemento de la lista. Tambin debe existir otro puntero (puntero externo) Pirm que indica el primer elemento de la lista, o sea, donde comienza la lista. El ltimo elemento contiene una direccin que indica el fin de la lista, se establece por el concepto de nulidad. Prim

Nil Doblemente Encadenada: Es una lista que posee dos punteros externos, uno que apunta al primer nodo de la misma Prim y otro al ltimo Ult. Su estructura de nodos contiene dos campos de enlace (punteros internos) donde el precedente es el enlace izquierdo y el sucesor el enlace derecho. Prim Ult

Listas Circulares: Es una lista donde el campo de enlace o puntero interno del ltimo elemento apunta al primero, se caracteriza por la no existencia del puntero nulo, primer ni ltimo elemento. Sin embargo, se debe elegir obligatoriamente un puntero externo que apunte a cualquiera de los elementos de la lista. Simplemente Encadenada: Pueden ser recorridas en un solo sentido. Prim

13

Doblemente Encadenada: Pueden ser recorridas en ambos sentidos. Prim

Algoritmos de eliminacin de elementos en los distintos tipos de listas: Eliminacin de un elemento en una lista simplemente enlazada: 1) La lista se encuentra vaca (Caso trivial): Prim Nil 2) La lista tiene un nico elemento y es el buscado: Prim SiPrim^.Dato=xDato Prim:=Nil Disponer(H) Nil 3) El elemento buscado se encuentra primero: Prim ... SiPrim^.Dato=xDato Prim:=Prim^.Prox Disponer(H) Prim=Nil

Nil 4) El elemento buscado se encuentra en medio de la lista: Prim ... SiH^.Dato=xDato Ant^.Prox:=H^.Prox Disponer(H) ... Nil

El algoritmo optimizado se muestra a continuacin:

14

/*AlgoritmoEliminarElementodeListaSimplemente Enlazada*/ Ambiente Algoritmo Si(Prim=Nil)entonces Escribir('Listavaca') Sino Leer(Datox) H:=Prim Mientras(H<>Nil)y(H^.Dato<>Datox)hacer Ant:=H H:=H^.Prox FMientras Si(H=Nil)entonces Escribir('Elementonohallado') Sino Si(H=Prim)entonces Prim:=H^.Prox Sino Ant^.Prox:=H^.Prox FSi FSi Disponer(H) FSi FAccin Nota: Lase final del documento. Recursividad Es la propiedad por la cual un subprograma puede llamarse o invocarse a si mismo para realizar alguna tarea. Un objeto recursivo forma parte de si mismo o se define en funcin de si mismo. El poder de la recursividad reside en la posibilidad de definir un nmero infinito de objetos mediante un enunciado finito,de igual manera, un nmero infinito de operaciones de clculo puede describirse mediante un subprograma recursivo finito. La facultad de variar su tamao es la propiedad caracterstica de las estructuras recursivas, y es la que la distingue de las estructuras fundamentales (arreglos, registros, etc.), y por ello no es posible asignarle una cantidad fija de memoria, por lo que se realiza un asignacin dinmica de memoria. Caractersticas: Una llamada o invocacin a si misma. Una condicin de fin. Tiende a reemplazar a una estructura repetitiva. Se requiere mucha memoria para almacenar datos en una pila. Secuencia de muy pocos pasos Es un proceso lento, ya que al apilar los datos en memoria, luego es necesario desapilarlos. Solucin Recursiva: Se plantea parte del resultado, se descompone el problema en partes menores. Solucin Iterativa: Da el resultado al final del programa.
15

El nico fin de la recursividad es manejar rboles, ya que son estructuras recursivas por excelencia. Recursividad Iteracin La repeticin de las tareas se controla desde adentro. Se ejecuta el conjunto de acciones y antes de finalizar, se evala si se ha llegado a la condicin de salida, sino se contina adelantando para ejecutar un nuevo conjunto de acciones. Suele ser lento y ocupa mayor espacio en memoria, pero es ms entendible por ser el mecanismo de razonamiento que usa el ser humano. Todo proceso recursivo puede ser iterativo. La repeticin de tareas se controla desde afuera. Se ejecuta un conjunto de acciones, en forma completa, se verifica la condicin de fin y si se necesita se vuelve a ejecutar el conjunto entero de acciones. Normalmente es ms sencillo y ms eficiente, pues usa menos recursos. No todo proceso iterativo puede ser recursivo.

Nivel de Recursividad

A nivel de datos: Definicin recursiva. A nivel de acciones: Funcin o procedimiento recursivo.

Dato Recursivo: Es cuando un objeto se define en funcin de si mismo. Se define un conjunto infinito mediante otro finito. Acciones Recursivas: Implica una funcin o procedimiento que se invoca as mismo, condicionado mediante un tope, marca o condicin de fin. Las acciones se definen en acciones ms pequeas de si mismas. Tipos de Recursividad: Directa: Un subprograma se llama as mismo una o varias veces. Indirecta: Un subprograma 'A' llama a otro 'B' y este a su vez llama a 'A'. Ventajas y Desventajas: No utilizar recursividad a menos que tenga un medio para terminar la llamada. No es conveniente cuando hay una solucin por iteracin. Es conveniente cuando los datos o el problema que se debe manipular estn definidos en forma recursiva. No utilizar cuando hay limitaciones de memoria. No utilizar cuando NO hay una ventaja clara. La solucin iterativa es ms efectiva y ms sencilla. Caso base o solucin base: Es el caso para el que la solucin puede establecerse de forma no recursiva (es necesario saber como se resuelve el problema de forma iterativa) y cuyo fin es determinar la condicin de fin. Ejemplo: n = 1 es el caso base en la potencia. n X : XXX...X Forma iterativa (Se utiliza estructura repetitiva) n veces
16

Caso general o Recursivo: Es el trmino para el cual la solucin se expresa en trminos de una versin ms pequea de si misma. No se puede resolver de forma iterativa. X n =XX n1 Forma recursiva (Se utiliza estructura condicional). Condicin de fin: Debo poder encontrar una condicin como mnimo. En el ejemplo anterior, n se ir decrementando hasta llegar a 1, que ser la condicin de fin. FuncinPot(x,n:entero):entero SiN=1entonces Pot:=X Sino Pot:=X*Pot(X,n1)/*Llamadarecursiva*/ Fsi FinFuncion rboles Es una estructura de datos totalmente recursiva, es decir, se define y se ejecuta de forma recursiva. Es un tipo de dato estructurado y de carcter dinmico que dispone la informacin de manera jerrquica, sus elementos se llaman nodos. Se almacenan en memoria interna y la nica manera de manejarlo es por medio de al recursividad. Cada nodo est enlazado con el prximo de acuerdo a una jerarqua. La cantidad de punteros de un nodo es igual a la cantidad de nodos de la raz. Un rbol puede tener cualquier cantidad de puntos internos (rboles ternarios, cuaternarios, etc.), el ms chico es el binario. rbol Binario: Es un conjunto finito de elementos (nodos) que estn vacos o estn formando una raz con dos rboles disyuntos llamados subrbol izquierdo y derecho de la raz. Nodo Raz: Es el nodo superior, representa la entidad mayor dentro el rbol, es el nodo de mayor jerarqua. Nodo Terminal u Hoja: Aquel o aquellos nodos que no tengan descendientes. Nodo Interior: Cualquier elemento que no sea terminal. Grado: Es el nmero de descendientes directos de un nodo. Longitud: El camino ms largo de un nodo raz hasta uno terminal. Profundidad: Es el nmero de nodos que se encuentran entre l y la raz. Existen tres formas posibles de recorrido de un rbol binario, segn en que momento se recorra la raz, stas son: Pre Orden: R I D (Raz, Izquierda, Derecha) En Orden: I R D (Izquierda, Raz, Derecha) Post Orden: I D R (Izquierda, Derecha, Raz) SubAccionPre_Ordenes; SubAccionEn_Ordenes; SiP<>nilentonces SiP<>nilentonces Esc(P^.Dato) En_Orden(P^.Izq) Pre_Orden(P^.Izq) Esc(P^.Dato) Pre_Orden(P^.Der) En_Orden(P^.Der) Fsi Fsi FSub FSub SubAccionPost_Ordenes; SiP<>nilentonces Pos_Orden(P^.Izq) Pos_Orden(P^.Der) Esc(P^.Dato) Fsi FSub Ejemplo de rbol binario:
17

Representacin en rbol binario de: (A+B)*(C-D) * + A B C Sus respectivos recorridos son: RID = *+AB-CD IRD = A+B*C-D IDR = AB+CD-* D

Complejidad algortmica Para nuestro anlisis tendremos en cuenta el coste (tiempo y recursos) que consume un algoritmo para encontrar la solucin , ofrecindonos la posibilidad de comparar distintos algoritmos que resuelven un mismo problema. El uso eficiente de los recursos suele medirse en funcin de dos parmetros: el espacio, es decir, la memoria que utiliza, y el tiempo, lo que tarda en ejecutarse. Ambos representan los costes que supone encontrar la solucin al problema planteado mediante un algoritmo. Adems, dichos parmetros van a servir para comparar los algoritmos entre si, permitiendo determina el ms adecuado entre varios para la solucin de un problema en particular. Solo tomaremos en cuenta la eficiencia temporal para el desarrollo del anlisis. El tiempo de ejecucin de un algoritmo va a depender de diversos factores, como son: los datos de entrada que le son suministrados, la calidad del cdigo generado por el compilador para crear el programa, la naturaleza y rapidez de las instrucciones mquina del procesador concreto que ejecute el programa, y la complejidad intrnseca del algoritmo. La unidad de tiempo a la que debe hacer referencia el estudio del tiempo no puede ser expresada en segundos o en otra unidad de tiempo concreta, pues no existe un ordenador estndar al que puedan hacer referencia todas las medidas. Denotaremos por T n el tiempo de ejecucin de un algoritmo para una entrada de tamao n . Tericamente T n debe indicar el nmero de instrucciones ejecutadas por un ordenador idealizado. Debemos buscar, por tanto, medidas simples y abstractas, independientes del ordenador a utilizar. Para ello, es necesario acotar de alguna forma la diferencia que se puede producir entre distintas implementaciones de un mismo algoritmo, ya sea del mismo cdigo ejecutado por dos mquinas de distinta velocidad, como de dos cdigos que implementan el mismo mtodo. Esta diferencia es la que acota el siguiente principio: Principio de Invarianza: Dado un algoritmo y dos implementaciones suyas I 1 e I 2 , que tardan T 1 n y T 2 n segundos respectivamente, el Principio de Invarianza afirma que existe una constante real c0 y un nmero natural n0 tales que para todo nn0 se verifica que T 1 ncT 2 n. Es decir, el tiempo de ejecucin de dos implementaciones distintas de un algoritmo dado no va a diferir ms que en una constante multiplicativa. Suelen estudiarse tres casos para un mismo algoritmo: caso peor, caso mejor y caso medio. El caso mejor corresponde a la traza (secuencia de sentencias) del algoritmo que realiza menos instrucciones. Anlogamente, el caso peor corresponde a la traza del algoritmo que realiza ms instrucciones. El caso medio es el cociente entre la suma de los tiempos del caso mejor y peor y dos. A la hora de medir el tiempo, siempre lo hacemos en funcin del nmero de operaciones elementales que realiza dicho algoritmo, entendiendo por operaciones elementales (en adelante OE) aquellas que el ordenador realiza en tiempo acotado por una constante. As, consideraremos OE a
18

las operaciones aritmticas bsicas, asignaciones a variables de tipo predefinido por el compilador, los saltos (llamadas a funciones y procedimientos, retorno desde ellos, etc.), las comparaciones lgicas y el acceso a estructuras indexadas bsicas, como los vectores y matrices. Cada una de ellas contabilizar como 1 OE. El tiempo de ejecucin de un algoritmo va a ser una funcin que mide el nmero de operaciones elementales que realiza el algoritmo para un tamao de entrada dado. Ingresar(Suma) MientrasSuma>0hacer Si(SumaMOD2=0)^(Suma<100)entonces Escribir('NmeroVlido') Sino Escribir('NmeroNoVlido') Fsi Suma:=Suma1 FinMientras (*1*) (*2*) (*3*) (*4*) (*5*) (*6*)

La lnea 1 tiene 1 OE. La lnea 2 tiene 2 OE, por el mientras y la comparacin. La lnea 3 tiene 4 OE, es la operacin de MOD, la comparacin de ese resultado con cero, la operacin ^ y por ltimo la comparacin entre Suma y 100. La lnea 4 y 5 tienen 1 OE cada uno. La lnea 6 tiene 2 OE, pues es la asignacin y la operacin de resta. Las Cotas de Complejidad son los valores mximos y mnimos que tarda un algoritmo en ejecutarse, es decir, el tiempo mximo y el tiempo mnimo de un algoritmo. En el ejemplo anterior: El tiempo menor y por tanto la cota inferior ser 3, pues la accin de ingresar toma 1T y la comparacin que no se cumple del Mientras para que no se ejecuten las acciones siguientes. El tiempo peor, o sea, la cota superior ser 1 + la sumatoria desde Suma hasta n-1 de (2+7) +2, El primer uno es de el ingreso de la variable, luego las operaciones del ciclo del mientras se irn ejecutando desde el valor que tenga Suma hasta Suma-1, o para no confundir, tomamos n como el valor inicial de Suma, las operaciones del ciclo son 7 ms la de comparar Suma con cero en el mientras, y se le suma un dos ms al final por la ltima comparacin que realiza el ciclo para terminar. En otras palabras sera: 1 + 9*Suma + 2. FIN. NOTA: Los casos de eliminacin siempre son los mismos, difiere en los dibujos y en el algoritmo ya que las asignaciones de punteros es diferente en cada tipo de lista. Faltan los ejemplos de los dems tipos de lista. Los casos de insercin no estn hechos todava (Lista vaca, Insertar al principio, insertar en medio y al final), los ir aadiendo posteriormente.

Si encuentra algn error o desea aportar sugerencias u otro tipo de informacin al apunte, por favor comunicarse por correo electrnico a la siguiente direccin: rotatomel@gmail.com

19

Вам также может понравиться