Actividadades Fundamentales
December 3, 2022 | Author: Anonymous | Category: N/A
Short Description
Download Actividadades Fundamentales...
Description
UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA Semestre Agosto-Diciembre 2021
Programación de estructuras de datos
Actividad fundamental 1
Dra. Karla Nathali Porras Vazquez Grupo 004 V5 LMV
Estefanía Trujillo Elizondo Matricula: 1899528 Carrera: IAS
UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA Semestre Agosto-Diciembre 2021
Programación de estructuras de datos
Actividad fundamental 2
Dra. Karla Nathali Porras Vazquez Grupo 004 V5 LMV
Estefanía Trujillo Elizondo Matricula: 1899528 Carrera: IAS
SECUENCIAL
SECUENCIAL
UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA Semestre Agosto-Diciembre 2021
Programación de estructuras de datos
Actividad fundamental 3
Dra. Karla Nathali Porras Vazquez Grupo 004 V5 LMV
Estefanía Trujillo Elizondo Matricula: 1899528 Carrera: IAS
Actt i vi d ad Fu n d amen Ac am entt al 3 Estructur as de datos lineales: lineales: lis tas
Estructura lineal compuesta por una secuencia de 0 o más elementos de algún tipo determinado y ordenados de alguna forma. Puede crecer o disminuir en el número de elementos podrán insertarse o eliminarse elementos en cualquier Universidad Pontificia dey Salamanca (Campus Madrid) Luis Rodríguez Baena, Escuela Superior de Ingeniería y Arquitectura, 2012 16 podrán insertarse o eliminarse elementos en cualquier posición sin alterar su orden lógico. Estructuras de datos lineales: listas Listas contiguas. ● Los elementos ocupan posiciones contiguas de memoria. ● Se pueden implementar con arrays. Los elementos ocuparían posiciones
correlativas del array. Presentan dos problemas: La inserción o el borrado de elementos implica mover las posiciones para mantener el orden original. o El número de elementos de la lista se puede modificar, pero no puede sobrepasar el tamaño máximo del array Listas enlazadas. ● Los elementos no ocupan posicion es contiguas de memoria. Aparecen dispersos dispe rsos
por el almacenamiento. ● Cada elemento contiene una referencia al siguiente elemento de la estructura. ●
El orden lógico lo darán los enlaces que hay entre elementos. ● El primer elemento en el orden lógico no tiene por qué ● El primer elemento en el orden lógico no tiene por qué corresponderse con el
primer elemento almacenado. El necesario indicar cuál es el primer elemento en el orden lógico. ● También es necesario indicar cual será el último elemento en el orden
lógico de
la estructura. ● La inserción o eliminación de elementos no implica mover los elementos de sitio. Sólo se modifican las referencias al siguiente elemento. ● Si se utilizan estructuras
de datos dinámicas el número de elementos será virtualmente ilimitado.
Pilas
Es un tipo especial de lista. Estructura lineal de datos compuesta por una secuencia de elementos en la que las operaciones sólo se pueden realizar por uno de sus extremos llamado cima (tope o top). ● Estructuras de tipo LIFO
(Last In-First Out). Se utiliza para poder recuperar elementos en orden inverso a como entran. ● Ejemplos reales: montones de platos. ● Aplicaciones en informática. Evaluación
de algunos tipos de expresiones Cuadros de diálogos, pantallas y menús desplegables. o Cada cuadro se abre encima de otro; al cerrarse uno, el cuadro activo es el último que se ha abierto. Simulación de la recursividad. … En general,
cualquier aplicación en la que se necesite nece site recuperar información en orden inverso a como ha entrado. La estructura de tipo Pila no se considera implementada en nuestro lenguaje de programación. ● En otros lenguajes, como .NET, existe la clase Stack (pila en inglés) que
implementa pilas e incluye todas las operaciones que se pueden hacer sobre las pilas. Será necesario crear el tipo de dato Pila. Será necesario crear el tipo de dato Pila. ● Determinar las operaciones básicas que se pueden realizar sobre el tipo de dato
Pila: las operaciones primitivas. ● Definir el tipo de elementos que contendrá la pila. ● Definir la organización de los datos utilizando los datos y estructuras de datos que
ofrezca el lenguaje de programación. ● Implementar las operaciones operacion es primitivas para la organización de los dato datos s definida.
Dependiendo de la organización definida, la implementación de las operaciones primitivas variará. Operaciones primitivas. ● Procedimiento PilaNueva(ref pila: p) Crea un pila sin elementos. ● Función lógica EsPilaVacía(valor pila: p). Devuelve ve rdad si la pila está vacía. ● Procedimiento PInsertar (ref pila:p; valor TipoElemento:e) o Push(ref pila : p; valor
TipoElemento: e). Inserta un elemento e en la pila y devuelve la pila resultante. Inserta un elemento e en la pila y devuelve la pila resultante. TipoElemento es un
tipo de dato genérico que se corresponde al tipo de dato de los elementos que contendrá la pila. ● Procedimiento Cima(valor pila: p; ref TipoElemento : e). Devuelve en el argumento e el elemento situado en la cima de la pila. ● Procedimiento PBorrar(ref pila : p). Elimina el elemento cima de la pila y devuelve
la pila resultante. ● Procedimiento Pop(ref pila : p; ref TipoElemento : e) o Sacar(ref pila : p; ref
TipoElemento : e). Elimina un elemento Colas
Estructura lineal de datos compuesta por un conjunto de elementos en la que la adición de nuevos elementos se hará por un extremo de la cola, final (rear), y la salida de elementos por el contrario, principio (front). Estructura de datos de tipo FIFO (first in-first out), es decir el primer elemento en entrar es el primero en salir. En aplicaciones informáticas se utiliza para controlar procesos que tengan que realizarse en un cierto orden (colas de impresión, colas de prioridades, etc.) La estructura de tipo Cola no se considera implementada en nuestro lenguaje de programación. ● En otros lenguajes, como .NET, existe la clase Queue (cola en inglés) que
implementa colas e incluye todas las operaciones que se pueden hacer sobre las colas. Será necesario crear el tipo de dato Cola. Col a. Será necesario crear el tipo de dato Cola. ● Determinar las operaciones básicas que se pueden realizar sobre el tipo de dato
Cola: las operaciones primitivas. ● Definir el tipo de elementos que contendrá la cola. ● Definir la organización de los datos utilizando los datos y estructuras de datos que
ofrezca el lenguaje de programación. ● Implementar las operaciones primitivas para la organización de los datos definida.
Dependiendo de la organización definida, la implementación de las operaciones primitivas variará.
UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA Semestre Agosto-Diciembre 2021
Programación de estructuras de datos
Actividad fundamental 4
Dra. Karla Nathali Porras Vazquez Grupo 004 V5 LMV
Estefanía Trujillo Elizondo Matricula: 1899528 Carrera: IAS
ACTIVIDAD FUNDAMENTAL 4 Realizar un programa de un método de ordenamiento, y entregar de manera digital un documento con el código, pantallazo de corrida, asi como el ejecutable del mismo PANTALLAZO DE CÓDIGO
PANTALLAZO DE CORRIDA
UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA Semestre Agosto-Diciembre 2021
Programación de estructuras de datos
Actividad fundamental 5
Dra. Karla Nathali Porras Vazquez
Grupo 004 V5 LMV
Estefanía Trujillo Elizondo Matricula: 1899528 Carrera: IAS
TABLAS TABL AS HASH Las tablas hash son estructuras de datos que se utilizan para almacenar un número elevado de datos sobre los que se necesitan operaciones de búsqueda e inserción muy eficientes. Una tabla hash almacena un conjunto de pares“( clave, valor )”. )”. La clave es única para cada elemento de la tabla y es el dato que se utiliza para buscar un determinado valor. Características:
Una tabla hash se construye con tres elementos básicos: Un array capaz de almacenar “m” elementos Función Hash Hash o de dispersiónque ppermita ermita a partir de los datos (llamados clave) obtener el índice donde estará el dato en el arreglo Una función de resolución de colisiones
Función Hash: Hash: Una
función hash es método para generar claves o llaves que representen de manera casi unívoca a un documento o conjunto de datos. Es una operación matemática que se realiza sobre este conjunto de datos de cualquier longitud, y su salida es una huella digital, de tamaño fijo e independiente de la dimensión del documento original. El contenido es ilegible Las operaciones básicas implementadas en las tablas hash son: inserción(llave, valor) búsqueda(llave) que devuelve valor
La mayoría de las implementaciones también incluyen borrar (llave).También se pueden ofrecer funciones como iteración en la tabla, crecimiento c recimiento y vaciado. Algunas tablas hash permiten almacenar múltiples valores bajo la misma clave. Para usar una tabla hash se necesita: Una estructura de acceso directo (normalmente un array). Una estructura de datos con una clave. Una función resumen ((hash) hash) cuyo dominio sea el espacio de clases y su
imagen (o rango) los números naturales.
Colisiones: Son
producto de cuando dos elementos de información distintos, la función de dispersión les asigna la misma clave. La potencia de las tablas hash se encuentra en la búsqueda de elementos; conociendo el campo clave se puede obtener directamente la posición que ocupa, y por tanto, la información que se encuentra almacenada en ese espacio de memoria. Es claro, que el hashing tiene sus desventajas como cualquier algoritmo, y una de ellas es lo que se le conoce como colisiones (la operación matemática definida por la función de dispersión para calcular la posición que ocupa pueda pertenecer a un campo mas) y la otra, el uso innecesario de memoria en declaraciones de estructuras amplias intentando evitar dichas colisiones. Por muy buena que sea la distribución que se realice en la tabla siempre hay posibilidad de que colisiones dos claves, por ello el estudio del direccionamiento disperso se divide en dos partes: búsqueda de funciones hash y resolución de colisiones. Existen métodos para intentar evitar en su mayoría las colisiones, pero no n o son totalmente perfectos y fijos, pero los más populares son exploración de direcciones y hashing enlazado La eficacia de una tabla hash va de acuerdo a como se tratan las colisiones y la lógica de un algoritmo que permita un rápido acceso e inserción de datos a la estructura sin ninguna fuga de datos. Una de las aplicaciones de las tablas hash esta en los compiladores de lenguajes de programación. La tabla donde se s e guardan los identificadores del programa, tabla de símbolos, se implementa como una tabla hash. La clave es el símbolo que se transforma en un valor entero para aplicar alguna de las funciones hash. Se pretende con este trabajo de investigación descubrir esta importante y rápida herramienta y de a ello describir y utilizar las funciones hash como algoritmo más eficaz que los arrays Existen dos tip os de tablas hash, hash, en función de cómo r esuelven esuelven las colis iones: Encadenamiento separado: Las
coliciones se resuelven insertándolas en una lista. De esa forma tendríamos como estructura un vector de listas. Al número medio med io de claves por lista se le llama factor de carga y habría que intentar que esté próximo a 1. Direccionamiento abierto: Utilizamos un vector como representación y cuando se
produzca una colisión la resolvemos reasignándole otro valor hash a la clave hasta que encontremos un hueco.
Inserción: 1. Para almacenar un elemento en la tabla hash se ha de convertir su clave a un número. Esto se consigue aplicando la función resumen a la clave del elemento. 2. El resultado de la función resumen ha de mapearse mapea rse al espacio de direcciones del arreglo que se emplea como soporte, lo cual se consigue con la función módulo. Tras este paso se obtiene un índice válido para la tabla. 3. El elemento se almacena en la posición de la tabla, obtenido en el paso anterior. a. Si en la posición de la tabla ya había otro elemento, se ha producido una colisión. Este problema se puede solucionar asociando una lista a cada posición de la tabla, aplicando otra función o buscando el siguiente elemento libre. Estas posibilidades han de considerarse a la hora de recuperar los datos. Búsqueda: 1. Para recuperar los datos, es necesario únicamente conocer la clave del elemento, a la cual se le aplica la función resumen. 2. El valor obtenido se mapea al espacio de direcciones de la tabla. 3. Si el elemento existente en la posición indicada en el e l paso anterior tiene la misma clave que la empleada, entonces es el deseado. Si la clave es distinta, se ha de buscar el elemento según la técnica empleada para resolver el problema de las colisiones al almacenar el elemento. Para utilizar las tablas hash en C# necesitamos el nombre de espacio Collections; El cual lo invocamos de la siguiente forma using System.Collections; Sintaxis de métodos que utiliza las tablas hash en C# • Para crear la tabla hash:
o Hashtable nombretable = new Hashtable() • Para agregar valores.
o Nombretable.Add(clave, valor); • Para accedes a
los valores por medio de la clave.
o Nombretable [clave]
• Quitar un par llave/valor de la colección.
o Nombretable.Remove(clave) • Saber si la colección contiene un par cuya clave sea la que se le pasa como
parámetro. o Nombretable.ContainsKey(clave) • Contiene un par cuyo valor sea el que se le pasa como parámetro.
o Nombretable.ContainsValue (valor)
UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA Semestre Agosto-Diciembre 2021
Programación de estructuras de datos
Actividad fundamental 6
Dra. Karla Nathali Porras Vazquez Grupo 004 V5 LMV
Estefanía Trujillo Elizondo Matricula: 1899528 Carrera: IAS
CUADRO COMPARATIVO
BUSQUEDA SECUENCIAL
BUSQUEDA BINARIA BINA RIA
Busca un elemento comparándolo consecutivamente con cada uno de los elementos existentes en el arreglo, hasta encontrar el elemento buscando o hasta llegar al final de arreglo.
Divide y compara con elementos centrales, si los elementos centrales, si el elemento es menor se encuentra a la izquierda en caso contrario se busca a la derecha
Se utiliza cuando el vector no está Debe estar ordenado. ordenado o cuando no se puede ordenar. Iterativo
Recursivo
Fácil de implementar y no requiere orden Reduce el tiempo de búsqueda de un de entradas elemento y, con los archivos grandes, que se reduce la mitad con una sola comparación En un mejor caso: Se encuentra en la En el mejor caso: Requiere solo una primera entrada comparación En un peor caso: No se encuentra o está En el peor caso: Dividir el arreglo a rreglo muchas en la última posición veces y no encontrar el valor Es más fácil de implementar, por esto es Es más eficiente por reducir el tiempo de más común búsqueda
UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA Semestre Agosto-Diciembre 2021
Programación de estructuras de datos
Actividad fundamental 7 Tipos de búsqueda Dra. Karla Nathali Porras Vazquez
Grupo 004 V5 LMV Estefanía Trujillo Elizondo Matricula: 1899528 Carrera: IAS
UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA Semestre Agosto-Diciembre 2021
Programación de estructuras de datos
Actividad fundamental 8
Dra. Karla Nathali Porras Vazquez Grupo 004 V5 LMV
Estefanía Trujillo Elizondo Matricula: 1899528 Carrera: IAS
Actividad fundamental 8
UNIVERSIDAD AUTÓNOMA DE NUEVO LEÓN FACULTAD DE INGENIERÍA MECÁNICA Y ELÉCTRICA Semestre Agosto-Diciembre 2021
Programación de estructuras de datos
Actividad fundamental 9 Grafos
Dra. Karla Nathali Porras Vazquez
Grupo 004 V5 LMV Estefanía Trujillo Elizondo Matricula: 1899528 Carrera: IAS
Grafos Los grafos son una estructura interesante de conjuntos de objetos que denominamos nodos. En ellos se almacena diversos tipos de recursos o datos que tenemos la posibilidad de usar para procesar o conocer con objetivos específicos. Adicionalmente estos nodos, suelen estar aristas. unidos o conectados a otros nodos a través de elementos que denominamos Los nodos pertenecientes a un grafo pueden contener datos estructurada o no estructurada y al interrelacionarse con otros nodos producen relaciones interesantes que podemos analizar con diferentes finalidades. Estos elementos son reconocidos por su capacidad de manejar altos volúmenes de datos y ser fácilmente procesados por motores de búsqueda búsqued a o gestores de bases de datos orientados a grafos.
Historia El trabajo de Leonhard Euler, en 1736, sobre el problema de los puentes de Königsberg es considerado el primer resultado de la teoría de grafos. También se considera uno de los primeros resultados topológicos en geometría (que no depende de ninguna medida). Este ejemplo ilustra la profunda relación entre la teoría de grafos y la topología. En 1845 Gustav Kirchhoff publicó sus leyes de los circuitos para calcular el voltaje y la corriente en los circuitos eléctricos. En 1852 Francis Guthrie planteó el problema de los cuatro colores que plantea si es posible, p osible, utilizando solamente cuatro colores, colorear cualquier mapa de países de d e tal forma que dos países vecinos nunca tengan el mismo color. Este problema, que no fue resuelto hasta un siglo después por Kenneth Appel y Wolfgang Haken, puede ser considerado como el nacimiento de la teoría de grafos. Al tratar de resolverlo, los matemáticos definieron términos y conceptos teóricos fundamentales de los grafos.
Teoría Teor ía de grafos grafo s La Teoría de grafos es una mezcla impresionante de cultura, historia, La soluciones matemáticas y retos que llevaron un buen tiempo para ser resueltos con fórmulas matemáticas. La teoría de grafos nació con la finalidad de representar de forma visual conjuntos abstractos de datos que se encuentran en el mundo real para ser útiles en soluciones de problemas de complejidad.
Un ejemplo de grafo dirigido lo constituye c onstituye la red de aguas de una ciudad ya que cada tubería sólo admite que el agua la recorra en un único sentido, por el contrario, la red de carreteras de un país representa en
general un grafo no dirigido, puesto que una misma carretera puede ser recorrida en ambos sentidos. No obstante, podemos podemos dar unas definiciones generales para ambos tipos. Notación Nota ción y con ceptos
Untal grafo con junto ende el que hay adefinida relación binaria,es decir,o G=(V,A) queGVesesununconjunto conjunto objetos los queuna denominaremos vértices nodos y A Í V x V es una relación binaria a cuyos elementos denominaremos arcos o aristas. Dados x, y Î V, puede ocurrir que: Ø (x, y) Î A, en cuyo caso diremos que x e y están unidos mediante un arco y, Ø (x, y) Ï A, en cuyo caso dir diremos emos que no lo están. Si las aristas tienen asociada una dirección (las aristas (x,y) y (y,x) no son equivalentes) diremos que el grafo es dirigido, en otro caso ((x,y)=(y,x)) diremos que el grafo es no dirigido.
Estructur Estruc tura a de li lista sta Grafo Grafo de list li sta a de adyace adyacenci ncia. a. • Lista de incidencia -
Las aristas son representadas con un vector de pares (ordenados, si el grafo es dirigido), donde cada par representa una de las aristas. • Lista de adyacencia -
Cada vértice tiene una lista de vértices los cuales son adyacentes a él. Esto causa redundancia en un grafo no dirigido (ya que A existe en la lista de adyacencia de B y viceversa), pero las búsquedas son más rápidas, al costo de almacenamiento extra. En esta estructura de datos la idea es asociar a cada vértice i del grafo una lista que contenga todos aquellos vértices j que sean adyacentes a él. De esta forma sólo reservará memoria para los arcos adyacentes adyace ntes a i y no para todos llos os posibles arcos que pudieran tener como origen i. El grafo, por tanto, se representa por medio de un vector de n componentes (si |V|=n) donde cada componente va a ser una lista de adyacencia correspondiente a cada uno de los vértices del grafo. Cada elemento de la lista consta de un campo indicando el vértice adyacente. En caso de que el grafo sea etiquetado, habrá que añadir un segundo campo para mostrar el valor de la etiqueta.
Grafos planos Un grafo es plano si se puede dibujar sin cruces de aristas. El problema de las tres casas y los tres pozos tiene solución sobre sobr e el toro, pero no en el plano. Cuando un grafo o multigrafo se puede dibujar en un plano sin que dos segmentos se corten, se dice que es plano. Un juego muy conocido es el siguiente: Se dibujan tres casas y tres pozos. Todos los vecinos de las casas tienen el derecho de utilizar los tres pozos. Como no se llevan bien en absoluto, no quieren cruzarse jamás. ¿Es posible trazar los nueve caminos que juntan las tres casas con los tres pozos sin que haya cruces? Cualquier disposición de las casas, los pozos y los caminos implica la presencia de al menos un cruce. Sea Kn el grafo completo con n vértices, Kn, p es el grafo bipartito de n y p vértices. El juego anterior equivale a descubrir si el grafo bipartito completo K3,3 es plano, es decir, si se puede dibujar en un plano sin que haya cruces, siendo la respuesta que no. En general, puede determinarse que un grafo no es plano, si en su diseño puede encontrase una estructura análoga (conocida (conoc ida como menor) a K5 o a K3,3. Establecer Estab lecer qué grafos son planos no es obvio, y es un problema pro blema que tiene que ver con topología.
Representaciones Representacione s de grafos en memoria Matr Ma triz iz de adyacencia
Un grafo se puede representar mediante una matriz A tal que A[i,j]=1 si hay un arco que conecta vi con v j, y 0 si no. La matriz de adyacencia de un grafo no dirigido es simétrica. Una matriz de adyacencia permite determinar si dos vértices están conectados o no en tiempo constante, pero requieren O(n2) bits de memoria. Esto puede ser demasiado para muchos grafos que aparecen en aplicaciones reales, en donde |E|
View more...
Comments