UNIDAD 1: ALGORITMOS Y ESTRUCTURAS DE DATOS
1.1 LA NECESIDAD DE LAS ESTRUCTURAS DE DATOS
1.2 ALGORITMOS Y PROGRAMAS
1.3 EFICIENCIA Y EXACTITUD.
1.4 NOTACIÓN O-GRANDE
1.1. TIPOS DE DATOS
• Los lenguajes de programación 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 [TREMBLAY 2003] son:
• • Apoyo y ayuda en la prevención y en la detección de errores.
• • Apoyo y ayuda a los desarrolladores de software, y a la comprensión y
organización de ideas acerca de sus objetos.
• • Ayuda en la identificación y descripción de propiedades únicas de ciertos
tipos.
1.2. LA NECESIDAD DE LAS
ESTRUCTURAS DE DATOS
• A pesar de la gran potencia de las computadoras actuales, la eficiencia de los
programas sigue siendo una de las características más importantes a considerar.
Los problemas complejos que procesan las computadoras cada vez más
obligan, sobre todo, a pensar en su eficiencia dado el elevado tamaño que
suelen alcanzar. Hoy, más que nunca, los profesionales deben formarse en
técnicas de construcción de programas eficientes.
1.3. ALGORITMOS Y PROGRAMAS
• Un algoritmo es un método, un proceso, un conjunto de instrucciones utilizadas
para resolver un problema específico. Un problema puede ser resuelto mediante
muchos algoritmos. Un algoritmo dado correcto, resuelve un problema definido
y determinado (por ejemplo, calcula una función determinada). En este libro se
explican muchos algoritmos y, para algunos problemas, se proponen diferentes
algoritmos, como es el caso del problema típico de ordenación de listas.
1.4. EFICIENCIA Y EXACTITUD
• De las características que antes se han analizado y deben cumplir los
algoritmos, destacan dos por su importancia en el desarrollo de algoritmos y en
la construcción de programas: eficiencia y exactitud.
1.5. NOTACIÓN O-GRANDE
• La alta velocidad de las computadoras actuales (frecuencias del procesador de 3
GHz ya son usuales en computadoras comerciales) hace que la medida exacta
de la eficiencia de un algoritmo no sea una preocupación vital en el diseño,
pero sí el orden general de magnitud de la misma. Si el análisis de dos
algoritmos muestra que uno ejecuta 25 iteraciones mientras otro ejecuta 40, la
práctica muestra que ambos son muy rápidos; entonces, ¿cómo se valoran las
diferencias? Por otra parte, si un algoritmo realiza 25 iteraciones y otro 2.500
iteraciones, entonces debemos estar preocupados por la rapidez de uno o la
lentitud de otro.
1.6. COMPLEJIDAD DE LAS
SENTENCIAS BÁSICAS DE JAVA
• Al analizar la complejidad de un método no recursivo, se han de aplicar las
propiedades de la notación O y las siguientes consideraciones relativas al orden
que tienen las sentencias, funda-mentalmente a las estructuras de control.
TIPOS DE DATOS: CLASES Y OBJETOS
• •Abstracción en lenguajes de programación.
• •Tipos abstractos de datos
• •Especificación de los tad
• •Clases y objetos
• •Declaración de una clase.
LISTAS ENLAZADAS
• • Fundamentos teóricos de listas enlazadas
• • Clasificación de listas enlazadas
• • Tipo abstracto de datos (tad ) lista
• • Operaciones de listas enlazadas
• • Inserción de un elemento en una lista
• • Búsqueda en listas enlazadas
• • Eliminación de un nodo de una lista
• • Lista ordenada
• • Lista doblemente enlazada
PILAS
• 4.1 Concepto de pila.
• • 4.2 Tipo de dato Pila implementado con arrays.
• • 4.3 Pila dinámica implementada con un vector.
• • 4.4 El tipo Pila implementado como una lista enlazada.
• • 4.5 Evaluación de expresiones aritméticas con pilas.
COLAS
• • 5.1 Concepto de Cola.
• • 5.2 Colas implementadas con arrays.
• • 5.3 Cola con un array circular.
• • 5.4 Cola con una lista enlazada.
• • 5.5 Bicolas: Colas de doble entrada.