Professional Documents
Culture Documents
Estructura 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.
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).
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.
3 fin _ iterar
3 fin _ iterar
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.
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