Práctica 2 - Ejercicio 2.8 - Algoritmos y Estructura de Datos III
Estructura de Datos y Algoritmos
Transcript of Estructura de Datos y Algoritmos
-
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.