You are on page 1of 45

Universidad Nacional del Centro del Per

Facultad de Ingeniera de Sistemas

Estructura de Datos

Mg. Jos Luis Cerrn Prez

Algoritmos y Estructuras de Datos

Objetivos
Con el estudio de este captulo, usted podr: Revisar los conceptos bsicos de tipos de datos. Introducirse en las ideas fundamentales de estructuras de datos. Revisar el concepto de algoritmo y programa. Conocer y entender la utilizacin de la herramienta de programacin conocida por pseudocdigo. Entender los conceptos de anlisis, verificacin y eficiencia de un algoritmo. Conocer la complejidad de las sentencias bsicas de todo programa Java.

T IPOS DE DATOS
Los lenguajes de programacin tradicionales, como Pascal y C, proporcionan tipos de datos para clasificar diversas clases de datos. La ventajas de utilizar tipos en el desarrollo de software son:
Apoyo y ayuda en la prevencin y en la deteccin de errores. Apoyo y ayuda a los desarrolladores de software, y a la comprensin y organizacin de ideas acerca de sus objetos. Ayuda en la identificacin y descripcin de propiedades nicas de ciertos tipos.

T IPOS DE DATOS
Definicin 1: Un tipo de dato es un conjunto de valores y operaciones asociadas a esos valores. Definicin 2: Un tipo de dato consta de dos partes: un conjunto de datos y las operaciones que se pueden realizar sobre esos datos.

Tipos Primitivos de Datos


Los tipos de datos ms simples son los tipos de datos primitivos, tambin denominados datos atmicos porque no se construyen a partir de otros tipos y son entidades nicas no descomponibles en otros. Un tipo de dato atmico es un conjunto de datos atmicos con propiedades idnticas. Estas propiedades diferencian un tipo de dato atmico de otro. Los tipos de datos atmicos se definen por un conjunto de valores y un conjunto de operaciones que actan sobre esos valores.

Tipos Primitivos de Datos


Tipo de dato atmico 1. Un conjunto de valores. 2. Un conjunto de operaciones sobre esos valores.

Tipos Primitivos de Datos

Tipos de Datos Compuestos y Agregados


Los datos compuestos son el tipo opuesto a los tipos de datos atmicos. Los datos compuestos se pueden romper en sub campos que tengan significado. Un ejemplo sencillo es el nmero de su telfono celular 51199110101. Realmente, este nmero consta de varios campos, el cdigo del pas (51, Per), el cdigo del rea (1, Lima) y el nmero propiamente dicho, que corresponde a un celular porque empieza con 9.

Tipos de Datos Compuestos y Agregados


En algunas ocasiones los datos compuestos se conocen tambin como datos o tipos agregados. Los tipos agregados son tipos de datos cuyos valores constan de colecciones de elementos de datos. Un tipo agregado se compone de tipos de datos previamente definitivos. Existen tres tipos agregados bsicos: arrays (arreglos), secuencias y registros.

Tipos de Datos Compuestos y Agregados


Un array o arreglo es, normalmente, una coleccin de datos de tamao o longitud fija, cada uno de cuyos datos es accesible en tiempo de ejecucin mediante la evaluacin de las expresiones que representan a los subndices o ndices correspondientes. Todos los elementos de un array deben ser del mismo tipo. Array de enteros: [4, 6, 8, 35, 46, 810]

Tipos de Datos Compuestos y Agregados


Una secuencia o cadena es, en esencia, un array cuyo tamao puede variar en tiempo de ejecucin. Por consiguiente, las secuencias son similares a arrays dinmicos o flexibles. Cadena = "Ingeniera de Sistemas"

Tipos de Datos Compuestos y Agregados


Un registro puede contener elementos datos agregados y primitivos. Cada elemento agregado, eventualmente, se descompone en campos formados por elementos primitivos.

Registro { Dato1 Dato2 Dato3 ... }

LA NECESIDAD DE LAS ESTRUCTUR AS DE DATOS


A pesar de la gran potencia de las computadoras actuales, la eficiencia de los programas sigue siendo una de las caractersticas ms importantes a considerar. Los problemas complejos que procesan las computadoras cada vez ms obligan, sobre todo, a pensar en su eficiencia dado el elevado tamao que suelen alcanzar. Hoy, ms que nunca, los profesionales deben formarse en tcnicas de construccin de programas eficientes.

LA NECESIDAD DE LAS ESTRUCTUR AS DE DATOS


Una estructura de datos es una agregacin de tipos de datos compuestos y atmicos en un conjunto con relaciones bien definidas. Una estructura significa un conjunto de reglas que contienen los datos juntos.
1. Una combinacin de elementos en la que cada uno es o bien un tipo de dato u otra estructura de datos. 2. Un conjuntos de asociaciones o relaciones (estructura) que implica a los elementos combinados.

LA NECESIDAD DE LAS ESTRUCTUR AS DE DATOS


Una solucin se denomina eficiente si resuelve el problema dentro de las restricciones de recursos requeridas. Restricciones de recursos pueden ser el espacio total disponible para almacenar los datos (considerando la memoria principal independiente de las restricciones de espacio de discos, fijos, CD, DVD, flash) o el tiempo permitido para ejecutar cada subtarea. Se suele decir que una solucin es eficiente cuando requiere menos recursos que las alternativas conocidas. El costo de una solucin es la cantidad de recursos que la solucin consume. Normalmente, el costo se mide en trmino de recursos clave, especialmente el tiempo.

Algoritmos y Programas

Algoritmos
Un algoritmo es un mtodo, un proceso, un conjunto de instrucciones utilizadas para resolver un problema especfico. Un problema puede ser resuelto mediante muchos algoritmos. Un algoritmo dado correcto, resuelve un problema definido y determinado (por ejemplo, calcula una funcin determinada).

Propiedades de los Algoritmos


1. Especificacin precisa de la entrada. La forma ms comn del algoritmo es una transformacin que toma un conjunto de valores de entrada y ejecuta algunas manipulaciones para producir un conjunto de valores de salida. Un algoritmo debe dejar claros el nmero y tipo de valores de entrada y las condiciones iniciales que deben cumplir esos valores de entrada para conseguir que las operaciones tengan xito. 2. Especificacin precisa de cada instruccin. Cada etapa de un algoritmo debe ser definida con precisin. Esto significa que no puede haber ambigedad sobre las acciones que se deban ejecutar en cada momento.

Propiedades de los Algoritmos


3. Exactitud, correccin. Un algoritmo debe ser exacto, correcto. Se debe poder demostrar que el algoritmo resuelve el problema. Con frecuencia, esto se plasma en el formato de un argumento, lgico o matemtico, al efecto de que si las condiciones de entrada se cumplen y se ejecutan los pasos del algoritmo, entonces se producir la salida deseada. 4. Etapas bien definidas y concretas. Un algoritmo se compone de una serie de etapas concretas, lo que significa que la accin descrita por esa etapa est totalmente comprendida por la persona o mquina que debe ejecutar el algoritmo. Cada etapa debe ser ejecutable en una cantidad finita de tiempo. Por consiguiente, el algoritmo nos proporciona una receta para resolver el problema en etapas y tiempos concretos.

Propiedades de los Algoritmos


5. Nmero finito de pasos. Un algoritmo se debe componer de un nmero finito de pasos. Si la descripcin del algoritmo consta de un nmero infinito de etapas, nunca se podr implementar como un programa de computador. 6. Un algoritmo debe terminar. En otras palabras, no puede entrar en un bucle infinito. 7. Descripcin del resultado o efecto. Por ltimo, debe estar claro cul es la tarea que el algoritmo debe ejecutar. La mayora de las veces, esta condicin se expresa con la produccin de un valor como resultado que tenga ciertas propiedades.

Programas
Normalmente, se considera que un programa de computadora es una representacin concreta de un algoritmo en un lenguaje de programacin. Naturalmente, hay muchos programas que son ejemplos del mismo algoritmo, dado que cualquier lenguaje de programacin moderno se puede utilizar para implementar cualquier algoritmo. Por definicin un algoritmo debe proporcionar suficiente detalle para que se pueda convertir en un programa cuando se necesite.

Programas
El diseo de un algoritmo para ser implementado por un programa de computadora debe tener dos caractersticas principales: 1. Que sea fcil de entender, codificar y depurar. 2. Que consiga la mayor eficiencia para los recursos de la computadora. Idealmente, el programa resultante debera ser el ms eficiente. Cmo medir la eficiencia de un algoritmo o programa? El mtodo correspondiente se denomina anlisis de algoritmos y permite medir la dificultad inherente a un problema.

EFICIENCIA Y EXACTITUD
La eficiencia de un algoritmo es la propiedad mediante la cual un algoritmo debe alcanzar la solucin al problema en el tiempo ms corto posible o utilizando la cantidad ms pequea posible de recursos fsicos y que sea compatible con su exactitud o correccin. Un buen programador buscar el algoritmo ms eficiente dentro del conjunto de aquellos que resuelven con exactitud un problema dado.

EFICIENCIA Y EXACTITUD
Brassard y Bratley acuaron, en 1988, el trmino algoritmia (algorithmics) , que defina como el estudio sistemtico de las tcnicas fundamentales utilizadas para disear y analizar algoritmos eficientes. Este estudio fue ampliado en 1997 con la consideracin de que la determinacin de la eficiencia de un algoritmo se poda expresar en el tiempo requerido para realizar la tarea en funcin del tamao de la muestra e independiente del ambiente en que se efecte.

EFICIENCIA Y EXACTITUD
El estudio de la eficiencia de los algoritmos se centra, fundamentalmente, en el anlisis de la ejecucin de bucles, ya que en el caso de funciones lineales no contienen bucles, la eficiencia es funcin del nmero de instrucciones que contiene. En este caso, su eficiencia depende de la velocidad de las computadoras y, generalmente, no es un factor decisivo en la eficiencia global de un programa.

Formato General de la Eficiencia


En general, el formato se puede expresar mediante una funcin: f (n) = eficiencia Es decir, la eficiencia del algoritmo se examina como una funcin del nmero de elementos que tienen que ser procesados.

Formato General de la Eficiencia


Bucles lineales En los bucles se repiten las sentencias del cuerpo del bucle un nmero determinado de veces, que determina la eficiencia del mismo. Normalmente, en los algoritmos los bucles son el trmino dominante en cuanto a la eficiencia del mismo.

Formato General de la Eficiencia


Cuntas veces se repite el cuerpo del bucle en el siguiente cdigo?
1i=1 2 iterar (i <= n)
1 cdigo de la aplicacin 2i=i+1

3 fin _ iterar

Formato General de la Eficiencia


Si n es un entero, por ejemplo de valor 100, la respuesta es 100 veces. El nmero de iteraciones es directamente proporcional al factor del bucle, n. Como la eficiencia es directamente proporcional al nmero de iteraciones, la funcin que expresa la eficiencia es: f(n) = n

Formato General de la Eficiencia


Cuntas veces se repite el cuerpo del bucle en el siguiente cdigo? 1i=1 2 iterar (i <= n)
1 cdigo de la aplicacin 2i=i+2

3 fin _ iterar

Formato General de la Eficiencia


La respuesta no siempre es tan evidente como en el ejercicio anterior. Ahora el contador i avanza de 2 en 2, por lo que la respuesta es n/2. En este caso, el factor de eficiencia es: f(n) = n / 2

Formato General de la Eficiencia


Bucles algortmicos Consideremos un bucle en el que su variable de control se multiplique o divida dentro de dicho bucle. Cuntas veces se repetir el cuerpo del bucle en los siguientes segmentos de programa?

Formato General de la Eficiencia


1i=1 2 mientras (i < 1000) { cdigo de la aplicacin } i=i*2 3 fin _ mientras 1 i = 1000 2 mientras (i >= 1) { cdigo de la aplicacin } i = i/2 3 fin _ mientras

Formato General de la Eficiencia

Formato General de la Eficiencia


En ambos bucles se ejecutan 10 iteraciones. La razn es que, en cada iteracin, el valor de i se dobla en el bucle de multiplicar y se divide por la mitad en el bucle de divisin. Por consiguiente, el nmero de iteraciones es una funcin del multiplicador o divisor, en este caso 2. Bucle de multiplicar: 2 iteraciones < 1000 Bucle de divisin: 1000 / 2 iteraciones >= 1

Formato General de la Eficiencia


Bucles algortmicos Generalizando el anlisis, se puede decir que las iteraciones de los bucles especificados se determinan por la siguiente frmula: f(n) = [log2 n]

Formato General de la Eficiencia


Bucles anidados En el caso de bucles anidados (bucles que contienen otros bucles), se determinan cuntas iteraciones contiene cada bucle. El total es entonces el producto del nmero de iteraciones del bucle interno y el nmero de iteraciones del bucle externo.
iteraciones: iteraciones del bucle externo x iteraciones bucle interno

Existen tres tipos de bucles anidados: lineal logartmico, cuadrtico dependiente y cuadrtico que con ejemplos y anlisis similares a las anteriores nos conducen a ecuaciones de eficiencia contempladas en la siguiente tabla.

Formato General de la Eficiencia

Anlisis de Rendimiento
La medida del rendimiento de un programa se consigue mediante la complejidad del espacio y del tiempo de un programa. La complejidad del espacio de un programa es la cantidad de memoria que se necesita para ejecutarlo hasta la complecin (terminacin). El avance tecnolgico proporciona hoy en da memoria abundante; por esa razn, el anlisis de algoritmos se centra fundamentalmente en el tiempo de ejecucin. 90 68 85 - 90 60 90 96 86 97

Anlisis de Rendimiento
La complejidad del tiempo de un programa es la cantidad de tiempo de computadora que se necesita para ejecutarlo. Se utiliza una funcin, T(n), para representar el nmero de unidades de tiempo tomadas por un programa o algoritmo para cualquier entrada de tamao n. Si la funcin T(n) de un programa es T(n) = c * n, entonces el tiempo de ejecucin es linealmente proporcional al tamao de la entrada sobre la que se ejecuta. Tal programa se dice que es de tiempo lineal o, simplemente lineal.

Anlisis de Rendimiento
Tiempo de ejecucin lineal de una funcin que calcula una serie de n trminos.
double serie(double x, int n) { double s; int i; s = 0.0; // tiempo t1 for (i = 1; i <= n; i++) // tiempo t2 { s += i*x; // tiempo t3 } return s; // tiempo t4 }

La funcin T(n) del mtodo es: T(n) = t1 + n*t2 + n*t3 + t4 El tiempo crece a medida que lo hace n, por lo que es preferible expresar el tiempo de ejecucin de tal forma que indique el comportamiento que va a tener la funcin con respecto al valor de n.

Resumen
Una de las herramientas tpicas ms utilizadas para definir algoritmos es el pseudocdigo. El pseudocdigo es una representacin en espaol del cdigo requerido para un algoritmo. Los datos atmicos son datos simples que no se pueden descomponer. Un tipo de dato atmico es un conjunto de datos atmicos con propiedades idnticas. Este tipo de datos se definen por un conjunto de valores y un conjunto de operaciones que acta sobre esos valores. Una estructura de datos es un agregado de datos atmicos y datos compuestos en un conjunto con relaciones bien definidas.

Resumen
La eficiencia de un algoritmo se define, generalmente, en funcin del nmero de elementos a procesar y el tipo de bucle que se va a utilizar. Las eficiencias de los diferentes bucles son:
Bucle lineal: Bucle logartmico: Bucle logartmico lineal: Bucle cuadrtico dependiente: Bucle cuadrtico dependiente: Bucle cbico: f(n) = n f(n) = log n f(n) = n * log n f(n) = n(n+1)/2 f(n) = n2 f(n) = n3

Bibliografa

You might also like