ALGORITMOS Y ESTRUCTURAS DE DATOS III Esta materia presenta una profundización de las materias Algoritmos y Estructura de Datos I y II • • • • • • Se conoce que el mundo real tiene problemas que no se pueden modelar con estructuras simples, por eso es que se requieren de estructuras no lineales y recursivas. La materia es anual Carga horaria 4 hs Dias de cursados lunes y martes de 20:00 a 22:00 hs Regimen de Aprobacion: 2 parciales- TP – Final. Ahora vamos a ver como esta compuesta la materia. 1°Vamos a revisar que es un algoritmo 2°Vamos a analizarlo para estudiar su complejidad 3°como elegir un algoritmo cuando tenemos Mas de uno para resolver un problema 4°Vamos a ver cuando un algoritmo es eficiente y cuando no. 5°y también vamos a ver distintas técnicas generales para diseñar algoritmos 6° y Vamos a mencionar que es un algoritmo aproximado y heuristico Aquí vamos a ver la complejidad computacional Vamos a ver cuando un problema esta bien resuelto o no. Clasificación de las estructuras de datos Fuente: Facomsys ¿Qué son las estructuras de datos? Son colecciones de elementos de datos relacionados. Los objetos arreglo son estructuras de datos que consisten en elementos de datos relacionados, del mismo tipo. Los arreglos facilitan el procesamiento de grupos de valores relacionados. Los arreglos conservan la misma longitud una vez creados Estáticas: • Arreglos ¿Qué es un arreglo? Un arreglo es una estructura de datos utilizada para almacenar datos del mismo tipo. Los arreglos almacenan sus elementos en ubicaciones de memoria contiguas. En Java, los arreglos son objetos. Clasificación de los arreglos: • Arreglo Unidimensional: Nos referimos a un vector de datos • Arreglo Bidimensional: Nos referimos a una estructura de doble entrada, es decir que tiene filas y columnas • Arreglo Tridimensional: Extendemos una dimensión mas, lo que se traduce en tener filas, columnas y profundad • Arreglo Multidimensional: Nos referimos a que cada dimensión, puede tener un tamaño diferente a las demás dimensiones Arreglo como estructura estática • La particularidad que un arreglo como una estructura estática, viene desde el momento en que el arreglo se define en tiempo de diseño, nosotros podemos establecer el tamaño del arreglo, de una manera inicial, cuando nosotros usamos esta estructura, el tamaño de la estructura esta definido por el tamaño inicial de la estructura, lo que implica que la estructura no puede crecer, ni disminuir en tiempo de ejecución, por eso se les llama estáticas, esto tiene algunas complicaciones y efectos durante la ejecución lo que significa que cuando la estructura llega a su limite de capacidad, nos tenemos que conformar con ese limite definido, no podemos ajustar el tamaño de la estructura durante la ejecución de la operación, para ello debemos detener la aplicación y modificar el tamaño de la ejecución y posteriormente volver a cargar los datos. Dinamicas • Lineales • Pilas • Colas • Listas • No Lineales • Arboles • Grafos Pilas • Una pila es una estructura de datos que principalmente tiene dos operaciones: Apilar y desapilar • Es un tipo de estructura que sigue un patrón LIFO (Last in, First Out), es decir el ultimo en entrar es el primero en salir Colas • Una cola es una estructura de datos que almacena elementos en una lista y permite acceder a los datos por uno de los dos extremos de la lista. Un elemento se inserta en la cola (parte final) de la lista y se suprime o elimina por la frente (parte inicial, cabeza) de la lista. • Los elementos se eliminan (se quitan) de la cola en el mismo orden en que se almacenan y, por consiguiente, una cola es una estructura de tipo FIFO (first-in-first-out, primero en entrar, Primero en salir o bien primero en llegar/primero en ser servido). o El servicio de atención a clientes es un ejemplo típico de cola o el cajero de un banco Listas • Una lista es una secuencia de elementos dispuesto en un cierto orden, en la que cada elemento tiene como mucho un predecesor y un sucesor. El número de elementos de la lista no suele estar fijado, ni suele estar limitado por anticipado. • Representaremos la estructura de datos de forma gráfica con cajas y flechas. Las cajas son los elementos y las flechas simbolizan el orden de los elementos. • La estructura de datos deberá permitirnos determinar cuál es el primer elemento y el último de la estructura, cuál es su predecesor y su sucesor (si existen de cualquier elemento dado). Cada uno de los elementos de información suele denominarse nodo. • La lista también puede representarse de forma simbólica escribiendo sus elementos separados por comas y encerrados entre corchetes. Por ejemplo: • ["rojo","verde","azul","amarillo"] • El uso de listas en Java es una forma útil de almacenar y manipular grandes volúmenes de datos, tal como haríamos en una matriz o arreglo, pero con una serie de ventajas que hacen de este tipo de variables las preferidas para el procesamiento de grandes cantidades de información. • Las listas en Java son variables que permiten almacenar grandes cantidades de datos. Son similares a los Array o a las Matrices. Arboles • Un árbol es una estructura jerárquica de datos que imita la forma de un árbol, un conjunto de nodos conectados. Un nodo es la unidad sobre la que se construye el árbol y puede tener ceros o mas nodos hijos conectados a él. Se dice que un nodo a es padre de un nodo b si existe un enlace desde a hasta b. Solo puede haber un único nodo sin padres, que llamaremos raíz. Un nodo que no tiene hijos se conoce como hoja y a los demás nodos se les conoce como ramas. • Formalmente, un árbol se puede definir de manera recursiva, se utiliza la recursión para definir un árbol porque es una característica inherente a los mismos, como: • 1. Un solo nodo es, por si mismo, un árbol. Ese nodo es también la raíz de dicho árbol. • 2. Se supone que n es un nodo y que A1 , A2 ,..., Ak son arboles con raíces n1 , n2 ,…, nk respectivamente. Se puede construir un nuevo árbol haciendo que n se constituya en el padre de los nodos n1 , n2 ,…, nk . En dicho árbol, n es la raíz y A1 , A2 ,..., Ak son los subarboles (o arboles hijos) de la raíz. Los nodos n1 , n2 ,… ,nk reciben el nombre de hijos del nodo n y el nodo n recibe el nombre de padre de dichos nodo • Como ejemplo se puede considerar el índice de un libro. • T1 (Tema 1) • 1.1.-(Pregunta 1 del Tema 1) • 1.2.-(Pregunta 2 del Tema 1) • T2 (Tema 2) • 2.1.-(Pregunta 1 del Tema 2) • 2.1.1.-(Pregunta 1 de la pregunta 1 del Tema 2) • 2.1.2.-( Pregunta 2 de la pregunta 1 del Tema 2) • 2.2.-(Pregunta 2 del Tema 2) • 2.3.-(Pregunta 3 del Tema 2) • T3 (Tema 3) Árbol del índice: Grafos • Desde un punto de vista intuitivo un grafo es un conjunto de nodos unidos por un conjunto de arcos. Un ejemplo de grafo que podemos encontrar en la vida real es el de un plano de trenes. El plano de trenes está compuesto por varias estaciones (nodos) y los recorridos entre las estaciones (arcos) constituyen las líneas del trazado. • La siguiente clasificación, aunque no es completa, presenta las principales características que nos podemos encontrar en los grafos: • Grafo conexo: Cuando entre cada dos nodos del grafo hay un camino. • Bosque: Es un grafo sin ciclos. • Arbol libre: es un bosque conexo. • La representación más extendida de los grafos es mediante lo que se llaman Matrices de adyacencia. • Como medida ante la estática los arreglos, tenemos estructuras dinámicas, esto significa que el tamaño de estructura puede ir creciendo o disminuyendo en tiempo de ejecución, lo que significa que el tamaño de la estructura es variante, y por lo tanto siempre estaremos utilizando la cantidad de memoria necesario para manejar o manipular los datos que la aplicación requiere, dentro de esta calificación tenemos las lineales y no lineales, cada una de estas estructuras tiene una lógica o algoritmo de funcionamiento partículas