Estructura de Datos y Algoritmos

Embed Size (px)

Citation preview

  • CAPITULO 5

    ESTRUCTURAS DE DATOS Y ALGORITMOS

  • ii Sistemas Informticos

  • Sistemas Informticos iii

    Resumen

    Antes de introducirse en el mundo de la programacin de computadoras es necesario

    el estudio y entendimiento de las estructuras de datos y los algoritmos.

    Las estructuras de datos y los algoritmos repercuten de forma directa en el

    almacenamiento y tratamiento de la informacin, tanto desde el punto de vista fsico

    como funcional. Por tanto, el amplsimo mbito de la programacin se construye sobre

    los cimientos de dichos algoritmos y estructuras de datos, de ah la sobresaliente

    importancia de su conocimiento previo.

  • iv Sistemas Informticos

  • Sistemas Informticos v

    Tabla de Contenidos 1. Introduccin...................................................................................................... 1 2. Tipos de datos.................................................................................................. 2

    2.1. Datos de tipo entero................................................................................ 2 2.2. Datos de tipo real .................................................................................... 3 2.3. Datos de tipo lgico................................................................................. 3 2.4. Datos de tipo carcter ............................................................................. 4 2.5. Datos de tipo enumerado........................................................................ 4 2.6. Datos de tipo subrango ........................................................................... 5

    3. Estructuras de datos ........................................................................................ 6 3.1. Arrays...................................................................................................... 6 3.2. Cadena de caracteres............................................................................. 7 3.3. Registros ................................................................................................. 8 3.4. Listas....................................................................................................... 9 3.5. rboles .................................................................................................... 9

    4. Algoritmos ...................................................................................................... 11 4.1. Definicin de algoritmo.......................................................................... 11 4.2. Representacin de algoritmos .............................................................. 12

    4.2.1 Pseudocdigo ................................................................................... 12 4.2.2 Organigramas ................................................................................... 13 4.2.3 Diagramas de Nassi-Schneiderman.................................................. 14

    4.3. Acciones y estructuras de control ......................................................... 15 4.3.1 Asignaciones..................................................................................... 15 4.3.2 Entradas/salidas................................................................................ 15 4.3.3 Decisiones......................................................................................... 15 4.3.4 Ciclos ................................................................................................ 16 4.3.5 Procedimientos ................................................................................. 17

    4.4. Recursividad ......................................................................................... 18 4.5. Proceso de creacin de un programa ................................................... 20

    4.5.1 Planteamiento del problema ............................................................. 20 4.5.2 Representacin de los datos............................................................. 20 4.5.3 Diseo de un algoritmo ..................................................................... 20 4.5.4 Diseo descendente ......................................................................... 21 4.5.5 Comprobacin y optimizacin de algoritmos..................................... 22

    5. Conclusiones.................................................................................................. 23 6. Bibliografa ..................................................................................................... 24

  • vi Sistemas Informticos

  • Sistemas Informticos vii

    Tabla de ilustraciones Figura 1.- Representacin de un array de 7 elementos ................................................. 7 Figura 2.- Representacin de un array rectangular de 3x5 elementos........................... 7 Figura 3.- Representacin de una lista........................................................................... 9 Figura 4.- Representacin de un rbol ......................................................................... 10 Figura 5.- Pseudocdigo............................................................................................... 12 Figura 6.- Smbologa de un organigrama.................................................................... 13 Figura 7.- Organigrama de un programa...................................................................... 13 Figura 8.- Simbologa de los diagramas de Nassi-Schneiderman................................ 14 Figura 9.- Diagrama de Nassi-Schneiderman de un programa .................................... 14 Figura 10.- Estructuras de diferentes ciclos ................................................................. 17 Figura 11.- rbol de diseo descendente..................................................................... 21

  • viii Sistemas Informticos

  • - 1 -

    1. Introduccin

    Las computadoras son mquinas para el tratamiento automtico de la informacin.

    Esta informacin no se almacena ni se representa al azar, sino que debe organizarse

    o estructurarse en forma adecuada para obtener un rendimiento razonable en su

    memorizacin, tratamiento y recuperacin. El tratamiento de la informacin se debe

    realizar de un modo sistemtico. La resolucin de cualquier problema conlleva el encontrar un mtodo de resolucin expresado con la suficiente precisin para poder

    ser descompuesto en acciones realizables por la computadora (esto es lo que se

    conoce como algoritmos).

  • Estructuras de datos y algoritmos

    Sistemas Informticos 2

    2. Tipos de datos

    Se denomina dato a cualquier objeto manipulable por la computadora. Un dato puede ser un carcter ledo de un teclado, informacin almacenada en un disco, un nmero

    que se encuentra en memoria principal, etc.

    Cuando utilizamos una computadora para resolver un problema debemos hacer

    una abstraccin de sta y de las magnitudes que influyen en ella. Dichas magnitudes

    deben ser representadas por datos. La representacin de una magnitud como un dato

    se puede entender como una aplicacin que hace corresponder un dato a cada valor

    de la magnitud.

    Esta correspondencia debe definir el conjunto de valores de la magnitud. Es

    conveniente, adems, que sea unvoca, es decir, que a dos valores de magnitud

    distintos les asocie datos distintos. Para que se pueda operar con los datos es

    necesario que existan unas operaciones internas en el conjunto de datos, que sean

    semejantes a las operaciones usuales en el conjunto de magnitudes. Dichas

    operaciones deben cumplir que la imagen de la transformacin del resultado de una

    operacin en el conjunto de magnitudes sea igual al resultado de las operaciones

    correspondientes en el conjunto de datos sobre las imgenes de los operandos.

    Para que los resultados obtenidos en el conjunto de datos puedan ser

    interpretados es necesario que exista una transformacin de stos al conjunto de

    magnitudes.

    Se denomina tipo de dato al conjunto de la transformacin y de las operaciones y funciones internas y externas definidas sobre el conjunto de datos.

    A continuacin se presentan algunos de los tipos de datos bsicos ms usuales

    en informtica. No obstante, no todos los tipos de datos anteriores existen en todos los

    lenguajes de programacin, sino que simplemente sirven de base orientativa debido a

    la gran variedad de lenguajes que existe.

    2.1. Datos de tipo entero

    El tipo entero es una representacin del conjunto de los nmeros enteros. La representacin es posible para un subrango de magnitudes enteras centrado en el

    origen: nmeros entre 2n-1 -1 y -2n-1.

  • Estructuras de datos y algoritmos

    3 Sistemas Informticos

    La razn de esta limitacin est en la necesidad de utilizar un espacio finito, y fijo,

    para cada dato.

    El nmero de datos distintos de tipo entero que se pueden generar es 2n, donde n es el nmero de bits que se utiliza en la representacin. Por tanto, si se modifica el

    nmero de bits, se obtienen distintos tipos enteros.

    Cualquier operacin con datos de tipo entero es exacta salvo que se produzcan

    desbordamientos.

    Ejemplos: x 21; y -34; z 0;

    2.2. Datos de tipo real

    El tipo de datos real es una representacin del conjunto de los nmeros reales.

    Esta representacin no suele permitir el almacenamiento de nmeros muy

    grandes o muy pequeos, lo que conlleva que se produzcan desbordamientos

    (overflows) o agotamiento (underflows). La limitacin del nmero de bits usados para

    representar la mantisa provoca una falta de precisin en la representacin. Esto es

    debido a que la aplicacin que define al tipo real no es unvoca. Es decir, cada dato de

    tipo real es la imagen de un conjunto infinito de nmeros reales, concretamente

    representa a un intervalo de la recta real.

    En cada operacin pueden producirse errores por falta de precisin en la

    representacin (errores de redondeo), que se acumulan durante todo el proceso de

    clculo.

    Ejemplos: y 4,56000987000001; x 23,236666666666666667;

    2.3. Datos de tipo lgico

    Los datos de tipo lgico representan valores lgicos o booleanos. Pueden tomar uno de entre dos valores: verdadero o falso (abreviadamente V, F o 0,1)

  • Estructuras de datos y algoritmos

    Sistemas Informticos 4

    Sobre los valores lgicos pueden actuar los llamados operadores lgicos. Los operadores lgicos son: Y, O y NO (en ingls AND, OR y NOT).

    En algunos lenguajes de programacin hay definidos sobre los datos de tipo

    lgico otros operadores booleanos, como son: NO-Y, NO-O y NO-exclusivo (en ingls

    NAN, NOR y XOR).

    Un caso particularmente importante de valor de tipo lgico es el obtenido como

    resultado de una operacin de relacin sobre datos de un tipo para el que existe una relacin de orden. Una relacin es una expresin formada por dos operandos

    pertenecientes a un mismo tipo ordenado y un operador de relacin. El resultado de

    una operacin de relacin es el valor lgico verdadero si la relacin expresada es

    cierta, y falso en caso contrario.

    2.4. Datos de tipo carcter

    Los datos de tipo carcter representan elementos individuales de conjuntos finitos y ordenados de caracteres. El conjunto de caracteres representado depende de la

    computadora. Uno de los conjuntos ms usuales es el ASCII.

    No hay ninguna operacin interna sobre datos de tipo carcter (salvo la

    asignacin). Normalmente existen funciones de conversin de tipo, como por ejemplo

    la que asocia a cada dato de tipo carcter un valor entero, que indica su posicin en el

    cdigo.

    Ejemplos: x a; y 4;

    2.5. Datos de tipo enumerado

    Los datos de tipo enumerado se definen explcitamente dando un conjunto finito de valores. Al contrario de los tipos vistos anteriormente, no es un tipo normalizado. Puede haber muchos tipos de datos enumerados distintos dentro de un programa en

    un lenguaje determinado.

  • Estructuras de datos y algoritmos

    5 Sistemas Informticos

    Los datos vistos en las secciones anteriores son usualmente tratados por la

    computadora a nivel hardware. Mientras que el tipo de datos enumerado y el tipo de

    datos subrango slo son interpretados por el software.

    Internamente los datos de tipo enumerado se almacenan como valores enteros. A

    cada valor del tipo se le asocia un entero consecutivo, comenzando por cero.

    Ejemplo: x { azul(0) , rojo(1) , verde(2) , amarillo(3) };

    2.6. Datos de tipo subrango

    El tipo subrango se define a partir del tipo entero, carcter o de un tipo enumerado. Un dato de tipo subrango puede tomar determinados valores del tipo original, a partir

    del cual se ha definido el subrango, entre un mnimo y un mximo. Con datos de tipo

    subrango se pueden realizar las operaciones definidas para el tipo original.

  • Estructuras de datos y algoritmos

    Sistemas Informticos 6

    3. Estructuras de datos

    Los tipos de datos vistos en el apartado anterior se suelen denominar elementales, ya

    que se pueden utilizar para construir tipos de datos ms elaborados. Una estructura de datos o tipo de dato estructurado es un tipo de dato construido a partir de otros tipos de datos.

    Un dato de tipo estructurado est compuesto por una serie de datos de tipos

    elementales y alguna relacin existente entre ellos.

    Una estructura de datos se dice que es homognea cuando todos los datos elementales que la forman son del mismo tipo. En caso contrario se dice que la

    estructura es heterognea.

    Siempre que se utilice un dato en un programa debe estar determinado su tipo,

    para que el traductor sepa cmo debe tratarlo y almacenarlo. En el caso de datos de

    tipos elementales, el tipo del dato determina el espacio que se usa en memoria. Esto

    puede no ocurrir si el dato es de un tipo estructurado. Algunos tipos estructurados

    (listas y rboles) se declaran sin especificar el nmero de componentes que van a

    tener. Durante la ejecucin del programa la estructura de datos puede ir creciendo; es

    decir, ocupando ms memoria. Si se necesitase ms memoria de la disponible en el

    programa, ste terminara por error. Una estructura de datos que es gestionada de

    esta forma se dice que es dinmica, ya que la memoria que necesita se asigna dinmicamente. Por el contrario una estructura de datos que siempre ocupa el mismo

    espacio se dice que es esttica. Los tipos de datos ms empleados son: arrays, cadena de caracteres, registros, listas y rboles.

    3.1. Arrays

    El array es la estructura de datos ms usual. Existe en todos los lenguajes de

    programacin.

    Un array es una estructura de datos formada por una cantidad fija de datos de un

    mismo tipo, cada uno de los cuales tiene asociado uno o ms ndices que determinan de forma unvoca la posicin del dato en el array. Para cada combinacin posible de

    valores de ndices existe uno y slo un dato del tipo constituyente, o elemento del array.

  • Estructuras de datos y algoritmos

    7 Sistemas Informticos

    En la siguiente ilustracin se representa un array como una matriz de un solo

    ndice donde se pueden almacenar valores de 1 a 7. Es una estructura de celdas.

    Figura 1.- Representacin de un array de 7 elementos

    En la siguiente figura se representa un array rectangular. Cada elemento de esta

    matriz est especificado por un par ordenado de nmeros, el valor de los dos ndices.

    Figura 2.- Representacin de un array rectangular de 3x5 elementos

    En general, al nmero de ndices del array se le denomina nmero de

    dimensiones del array. La dimensin de la formacin est dada por los valores

    mximos de los ndices, y el nmero total de elementos es el producto de estos

    valores mximos.

    3.2. Cadena de caracteres

    Una cadena de caracteres (String) es una estructura de datos formada por una secuencia de caracteres. En una variable de tipo cadena se puede almacenar una

    palabra, una frase, una matrcula de un coche, una temperatura, etc. Las constantes

    de este tipo se escriben normalmente entre comillas.

    Ejemplo: x hola qu tal;

  • Estructuras de datos y algoritmos

    Sistemas Informticos 8

    Sobre datos de tipo cadena de caracteres se pueden realizar, entre otras, las

    siguientes operaciones:

    Concatenacin: unin de dos cadenas para formar una sola. Extraccin de subcadena: extraer un fragmento de una cadena. Comparacin de cadenas: determinar si dos cadenas son iguales o no. Obtencin de longitud: obtener el nmero de elementos que forman la

    cadena.

    3.3. Registros

    Un registro es una estructura de datos formada por unin de elementos que contienen informacin relativa a un mismo ente. A los elementos que componen el registro se les

    denomina campos. Cada campo puede ser de un tipo determinado, independientemente de los dems campos. Los campos dentro del registro aparecen

    en un orden determinado, y se identifican por un nombre. Para definir un registro es

    necesario especificar el nombre y tipo de cada campo. Los campos pueden ser de un

    tipo estructurado.

    Ejemplo:

    Class Curso

    {

    Integer horas;

    String nombre;

    String fecha;

    String lugar;

    }

  • Estructuras de datos y algoritmos

    9 Sistemas Informticos

    3.4. Listas

    Una lista est formada por un nmero variable de datos (elementos) de un mismo tipo, ordenados segn una secuencia lineal. Cada elemento, salvo el primero, tiene un

    predecesor en la lista. Todos los elementos, salvo el ltimo, tienen un sucesor. La lista

    es una estructura dinmica.

    Podemos definir una lista como una estructura de datos formada por registros de, al menos, dos campos, en que uno de ellos contiene informacin que permite localizar

    al siguiente registro en la lista segn una secuencia dada.

    La lista no es direccionable, tan slo se puede recuperar un elemento accediendo

    previamente a los que le anteceden, y por tanto, en cada momento hay slo un

    elemento en disposicin de ser procesado.

    Un tipo de lista especialmente importante es la pila o lista de LIFO, en que se aaden y eliminan elementos slo en un extremo; es decir, no se puede eliminar ms

    que el elemento que ocupa el primer lugar de la lista en ese momento. Las pilas se

    utilizan en hardware y software para almacenar las direcciones de instrucciones desde

    las que se hacen llamadas a subrutinas.

    Se denominan cola o listas FIFO a una lista en que las inserciones se realizan slo en el final y slo se puede acceder o eliminar en un instante dado el primer

    elemento de la lista.

    Las listas se memorizan utilizando punteros.

    Figura 3.- Representacin de una lista

    3.5. rboles

    Un rbol es una estructura de datos formada por elementos del mismo tipo, llamados nodos, relacionados de tal modo que el rbol puede descomponerse en un nodo,

  • Estructuras de datos y algoritmos

    Sistemas Informticos 10

    llamado raz, y un conjunto finito de objetos de tipo rbol, llamados subrboles del nodo raz.

    Figura 4.- Representacin de un rbol

    Se denomina hijo de un nodo a cada uno de los nodos que dependen de l. Se denomina grado de un nodo al nmero de subrboles que sustenta. El orden de un rbol es el mayor de los grados de sus nodos.

    Un rbol es una estructura dinmica. Su representacin en el interior de una

    computadora se realiza utilizando punteros. Cada nodo puede incluir varios punteros:

    uno para dirigirse al padre, y cada uno de los restantes para dirigirse a cada uno de los

    hijos. Esto permite moverse con gran facilidad dentro del rbol en cualquier direccin,

    pero presenta el inconveniente de que el nmero de punteros para cada nodo no es

    fijo y puede ser excesivamente grande. Normalmente se utilizan ciertas tcnicas para

    solucionar este problema y permitir que todos y cada uno de los nodos tengan un

    nmero de referencias o punteros fijo.

  • Estructuras de datos y algoritmos

    11 Sistemas Informticos

    4. Algoritmos

    Para solucionar un problema real es necesario encontrar un mtodo de resolucin del

    problema, y posteriormente descomponerlo en acciones sencillas, que la computadora

    sea capaz de realizar. De ello se encargan los algoritmos.

    4.1. Definicin de algoritmo

    Para que un procedimiento pueda ser implantado en una computadora, o en otra

    mquina capaz de interpretar instrucciones, debe cumplir determinados requisitos:

    El procedimiento debe estar compuesto de acciones bien definidas. El procedimiento debe estar formado por una secuencia finita de

    operaciones.

    El procedimiento debe acabar en un tiempo finito.

    Un procedimiento o mtodo de solucin, para resolver un problema, que cumpla

    estos requisitos se dice que es un algoritmo que resuelve ese problema.

    Se puede definir algoritmo como un procedimiento no ambiguo que resuelve un problema. Un procedimiento es una secuencia de operaciones bien definidas, cada una de las cuales requiere una cantidad finita de memoria y se realiza en un tiempo

    finito.

    Normalmente interesa, no slo encontrar un algoritmo, sino que ste sea

    suficientemente bueno. La calidad de un algoritmo se mide, bsicamente, por dos

    factores:

    El tiempo que se necesita para ejecutarlo. Los recursos que se necesitan para implantar el algoritmo.

    Por tanto es necesario, una vez diseado el primer algoritmo, realizar una

    evaluacin del mismo. Si se decide que ste no es eficiente, ser necesario o bien

    disear uno nuevo, o bien optimizar el original.

  • Estructuras de datos y algoritmos

    Sistemas Informticos 12

    4.2. Representacin de algoritmos

    Hay diferentes mtodos para representar los algoritmos. Por supuesto, un mtodo

    consiste narrar o enunciar el algoritmo. Para facilitar esta descripcin es frecuente

    utilizar un lenguaje de descripcin de algoritmos o pseudocdigo. Existen otros

    procedimientos de representacin que utilizan grficas o diagramas. Entre estos

    ltimos cabe destacar los organigramas o diagramas de flujo y los diagramas de

    Chapin o diagramas de Nassi-Schneiderman.

    4.2.1 Pseudocdigo

    No hay reglas fijas para la representacin narrativa de algoritmos. No obstante para

    describir algoritmos est muy extendido el uso de las estructuras de control del

    lenguaje Pascal entre otros. En este caso, como el objetivo no es escribir un programa para ser ejecutado por una computadora, no hay reglas sintcticas escritas, el inters

    se centra en la secuencia de instrucciones. Este tipo de descripcin se denomina

    pseudocdigo. La utilizacin de pseudocdigo presenta las ventajas de ser ms compacto que un organigrama, ser ms fcil de escribir, y ser ms fcil de transcribir a

    un lenguaje de programacin.

    Ejemplo:

    Figura 5.- Pseudocdigo

  • Estructuras de datos y algoritmos

    13 Sistemas Informticos

    4.2.2 Organigramas

    Los organigramas son herramientas grficas para representar algoritmos. Se les conoce tambin como diagramas de flujo. Un organigrama est compuesto por una

    serie de smbolos unidos por flechas. Los smbolos representan acciones y las flechas

    el orden de realizacin de las acciones.

    Figura 6.- Smbologa de un organigrama

    Figura 7.- Organigrama de un programa

  • Estructuras de datos y algoritmos

    Sistemas Informticos 14

    4.2.3 Diagramas de Nassi-Schneiderman

    Los diagramas de Nassi-Schneiderman tienen la ventaja de adecuarse a las tcnicas de programacin estructurada. Adems, estos organigramas tienen otras

    ventajas respecto a los organigramas clsicos, como son

    Se leen de arriba abajo, al igual que un programa estructurado. Permiten el uso de tcnicas de diseo descendente Favorecen la particin de los programas en mdulos pequeos. Resaltan ms las partes generales.

    Figura 8.- Simbologa de los diagramas de Nassi-Schneiderman

    Figura 9.- Diagrama de Nassi-Schneiderman de un programa

  • Estructuras de datos y algoritmos

    15 Sistemas Informticos

    4.3. Acciones y estructuras de control

    A continuacin se vern las distintas acciones que pueden utilizarse en un algoritmo o

    en un programa y las estructuras que se pueden usar para controlar el orden de

    realizacin de stas.

    4.3.1 Asignaciones

    Una asignacin consiste en la evaluacin de una expresin y en el almacenamiento de su valor en una variable. Este tipo de sentencias se ejecutan siempre

    secuencialmente; es decir, a continuacin de la asignacin se realiza siempre la

    accin siguiente del programa.

    Ejemplo:

    x 56;

    y x;

    4.3.2 Entradas/salidas

    Las operaciones de entrada/salida se utilizan para que el programa intercambie informacin con un medio externo. En una operacin de entrada o lectura, el programa asigna a una variable un valor almacenado en un soporte masivo o

    generado por un perifrico. En una operacin de salida o escritura el programa transfiere a un dispositivo de memoria masiva, o a un perifrico, el valor de una

    variable. Como ejemplos tpicos se pueden destacar la lectura de los caracteres

    introducidos por teclado y la salida de caracteres generados por un programa en la

    pantalla.

    4.3.3 Decisiones

    Las decisiones son acciones de control de flujo. Permiten modificar el orden en que se realizan otras acciones. Una decisin posee siempre un argumento, que

    normalmente debe ser una expresin lgica. Dependiendo del valor de la expresin

    lgica se ejecutan las acciones que estn en uno u otro camino, a partir de la decisin.

    Una decisin permite, por tanto, bifurcar en dos caminos el flujo de acciones.

  • Estructuras de datos y algoritmos

    Sistemas Informticos 16

    Ejemplo: programa que devuelve el mximo de dos nmeros a y b:

    Si ( a > b ) {

    devolver a ;

    FIN ;

    }

    Si no {

    devolver b ;

    FIN ;

    }

    4.3.4 Ciclos

    Un ciclo es una estructura de control que indica la repeticin de un segmento de programa. El ciclo puede ser repetitivo, en cuyo caso el segmento se repite un nmero fijo de veces. En este tipo de ciclos existe una variable de control de ciclo a la

    que automticamente se le asignan valores sucesivos durante la ejecucin del ciclo.

    En un ciclo repetitivo se debe especificar siempre el valor inicial y final que toma el

    contador del ciclo, y el incremento a aplicar en cada iteracin, si ste es distinto a uno.

    Otra estructura de control usual es el ciclo condicional, en el que un segmento de programa se repite mientras (ciclo while) se cumpla una condicin o hasta que (ciclo until) se deje cumplir una condicin.

  • Estructuras de datos y algoritmos

    17 Sistemas Informticos

    Figura 10.- Estructuras de diferentes ciclos

    Ejemplo:

    lmite 45 ;

    contador leer_de_teclado () ;

    mientras ( contador < lmite )

    {

    contador contador + 1 ;

    }

    imprimir_por_pantalla ( contador ) ;

    FIN ;

    4.3.5 Procedimientos

    Un procedimiento o subrutina es un fragmento del programa que realiza una tarea concreta, y recibe un nombre por el que puede ser llamado. Puede tener una serie de

    variables denominadas argumentos que permiten el paso de informacin entre el

    programa y el procedimiento.

  • Estructuras de datos y algoritmos

    Sistemas Informticos 18

    El uso de procedimientos evita la duplicacin de grupos de sentencias en

    diferentes partes del programa y facilita la construccin y comprensin de los

    programas, ya que es ms fcil disear y poner a punto un segmento de programa

    pequeo que uno grande.

    Ejemplo: procedimiento que suma dos nmeros enteros:

    Sumar (entero a, entero b)

    {

    entero resultado a + b;

    devolver resultado;

    }

    Utilizacin del procedimiento dentro de un programa:

    Mientras ( x < 1000 )

    {

    acumulado Sumar ( x , 4 )

    }

    devolver acumulado;

    4.4. Recursividad

    El concepto de recursividad, en cualquiera de los mbitos a los que se aplica, hace referencia a la definicin de una entidad en funcin de s misma. La recursividad

    probablemente no est muy bien vista en algunos campos como la lingstica, pero es

    una herramienta muy til y potente en programacin.

    La recursividad puede verse tambin como el proceso de resolver un problema

    largo reducindolo a uno o ms subproblemas que son idnticos en su estructura al

  • Estructuras de datos y algoritmos

    19 Sistemas Informticos

    problema original y, de algn modo, ms simples de resolver. Una vez que se realiza

    la subdivisin original, se usa la misma tcnica de descomposicin para dividir cada uno de esos subproblemas en otros todava ms simples. Finalmente, los

    subproblemas se hacen tan simples que se pueden resolver sin ms subdivisiones y la

    solucin final obtiene reensamblando los componentes resueltos.

    La recursividad est basada en la utilizacin de procedimientos, y en una tcnica

    de resolucin aplicable a problemas con estructura recursiva.

    En trminos del lenguaje de programacin, supone utilizar un procedimiento que

    se va a llamar a s mismo, para resolver parte del problema.

    La solucin recursiva no es nunca la nica posible. No obstante, es la solucin

    natural del problema y, por tanto, la ms clara.

    Si al resolver el problema es necesario utilizar pilas, el uso de procedimientos

    recursivos puede ser conveniente. En caso contrario, normalmente es desaconsejable,

    pues una solucin recursiva es ms lenta que una solucin en ciclo.

    Ejemplo: clculo recursivo del factorial de un nmero:

    Factorial (entero n)

    {

    Si (n es_igual_a 0)

    devolver 1;

    Si no

    devolver ( n * Factorial (n-1) );

    Fin

    }

  • Estructuras de datos y algoritmos

    Sistemas Informticos 20

    4.5. Proceso de creacin de un programa

    La concepcin de cualquier programa comienza con el planteamiento del problema. Cuando se ha adquirido una idea clara y precisa del problema, se debe escoger una

    representacin para los diferentes datos que intervienen en l. Hecho esto, se puede pensar en redactar un algoritmo que resuelva el problema. Este algoritmo ha de depurarse y optimizarse. El paso siguiente es redactar un programa segn el algoritmo

    encontrado, que habr de ser igualmente depurado. Por ultimo, se debe optimizar y

    documentar el programa.

    4.5.1 Planteamiento del problema

    Es necesario conocer perfectamente el problema antes de comenzar con su

    resolucin. Esto es, saber de que informacin, datos se dispone, cual es su

    significado, que valores pueden tomar y que relaciones hay entre ellos. Se deben

    detectar omisiones en los datos de partida o ambigedades en la especificacin de los

    resultados.

    4.5.2 Representacin de los datos

    Si la representacin no es la adecuada, el algoritmo no ser bueno. Si el problema a

    resolver es complejo, ser necesario establecer un proceso de ajuste entre las

    estructuras de datos y algoritmos, hasta llegar a una solucin aceptable.

    4.5.3 Diseo de un algoritmo

    Esta es, junto con la fase anterior, la parte ms delicada del desarrollo de un

    programa. Ambas etapas estn, adems, ntimamente relacionadas.

    Siempre habr problemas lo suficientemente complejos, como para que la mente

    humana no pueda entenderlos en conjunto. Por tanto, hay un lmite de complejidad,

    por encima del cual es difcil moverse sin ayudas, independientemente de la

    experiencia que se tenga.

    No obstante, se puede ir descomponiendo el problema a resolver en problemas

    cada vez ms simples, hasta llega a un nivel que seamos capaces de resolver

  • Estructuras de datos y algoritmos

    21 Sistemas Informticos

    directamente. sta es en esencia la idea del diseo descendente, que se tratar a

    continuacin.

    4.5.4 Diseo descendente

    El diseo descendente es una tcnica natural de desarrollo de algoritmos. Consiste en comenzar trabajando a nivel abstracto, para ir dividiendo el problema en sus partes

    naturales. De esta forma el problema a resolver se descompone en otros ms simples,

    hasta llegar a problemas suficientemente pequeos como para ser resueltos

    directamente.

    Usando este mtodo, se van generando soluciones del problema a distintos

    niveles de detalle. En cada nivel la solucin podr ser comprobada y depurada, antes

    de pasar a resolver los mdulos que la forman a un nivel ms bajo. El algoritmo

    resuelto de esta forma, se puede representar por un rbol en que cada nodo es un

    mdulo (un problema o accin hipottica). El nodo raz es el problema de partida. El

    algoritmo ser correcto si la solucin dada a cada nivel es correcta.

    El programa podra construirse de abajo a arriba creando primero procedimientos

    que resuelvan los mdulos de detalle, que una vez comprobados sern usados por

    otros procedimientos ms generales.

    Otra ventaja del diseo descendente es su adaptacin a la programacin

    estructurada. Un programa estructurado puede representarse en forma de rbol.

    Figura 11.- rbol de diseo descendente

  • Estructuras de datos y algoritmos

    Sistemas Informticos 22

    4.5.5 Comprobacin y optimizacin de algoritmos

    Un ltimo paso a realizar cuando se desarrolla un algoritmo es comprobar que es

    correcto, y que realiza las operaciones que se desean. Para comprobar un algoritmo, se puede efectuar un seguimiento del mismo. Esto consiste en ejecutar manualmente

    las operaciones descritas en el algoritmo, segn el orden especificado en el mismo,

    anotando el valor que toma cada dato durante el proceso.

    Si dos partes del algoritmo son completamente independientes se puede probar el

    funcionamiento de cada una de ellas independientemente.

    En la resolucin de cualquier problema es necesario usar variables, para

    almacenar los datos que se han de manejar. Para que el algoritmo sea legible, se

    deben especificar en l todas las variables usadas, indicando su tipo y contenido.

    La optimizacin del algoritmo normalmente consiste en buscar uno mejor, para sustituirlo total o parcialmente. Para realizarlo es necesario realizar una evaluacin del

    mismo. La evaluacin es normalmente una tarea compleja consistente en calcular el

    nmero de sentencias que se habrn de ejecutar.

  • Estructuras de datos y algoritmos

    23 Sistemas Informticos

    5. Conclusiones

    Las estructuras de datos y algoritmos constituyen elementos bsicos en el

    almacenamiento y tratamiento de la informacin.

    El conocimiento y entendimiento del concepto de algoritmo, sus representaciones

    y mtodos que desembocan en el desarrollo de programas constituyen un paso previo

    indispensable para introducirse en el mbito de la programacin.

    Han de conocerse y manejarse con facilidad los tipos de datos y las tcnicas de

    creacin, representacin y refinamiento de algoritmos para la futura construccin de

    programas de calidad.

  • Estructuras de datos y algoritmos

    Sistemas Informticos 24

    6. Bibliografa

    [Prieto et al., 2001] Prieto A., Lloris A. y Torres J.C. - Introduccin a la informtica. Editorial: Mc Graw Hill.

    [Alcalde et al., 1988] Alcalde Lancharro; Garca y Peuelas Informtica bsica. Editorial: Mc Graw-Hill.

    [Eguluz, 1999] Eguluz Morn, Andoni Estructuras de datos y algoritmos. Editorial: Mc Graw-Hill.

    [Joyanes, 1996] Joyanes, L. Fundamentos de programacin. Algoritmos y estructuras de datos. 2 edicin. Editorial: Mc Graw-Hill.