Servicio de asesoría y resolución de ejercicios      ciencias_help@hotmail.com         Pide una cotización a nuestros corr...
Servicio de asesoría y resolución de ejercicios          ciencias_help@hotmail.comEjercicio       Supon que se está diseña...
Servicio de asesoría y resolución de ejercicios        ciencias_help@hotmail.comEjercicio       Considera el siguiente gra...
Servicio de asesoría y resolución de ejercicios           ciencias_help@hotmail.com       }       color[u] = Black       f...
Servicio de asesoría y resolución de ejercicios           ciencias_help@hotmail.com                                       ...
Servicio de asesoría y resolución de ejercicios           ciencias_help@hotmail.comEjercicio       Se tienen n puntos pi =...
Servicio de asesoría y resolución de ejercicios       ciencias_help@hotmail.com                             a             ...
Servicio de asesoría y resolución de ejercicios            ciencias_help@hotmail.comEl peso de un árbol de expansión mínim...
Servicio de asesoría y resolución de ejercicios          ciencias_help@hotmail.com            o   Implementar en lenguaje ...
Upcoming SlideShare
Loading in …5
×

Estructura de datos avanzada

637 views

Published on

www.maestronline.com

ciencias_help@hotmail.com

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
637
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Estructura de datos avanzada

  1. 1. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com Pide una cotización a nuestros correos. Maestros Online Estructura de datos avanzada Apoyo en ejercicios Servicio de asesorías y solución de ejercicios Ciencias_help@hotmail.com www.maestronline.com
  2. 2. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.comEjercicio Supon que se está diseñando el módulo de procesamiento de un sistema para manipulación de gráficos. En este caso te han asignado manipular los siguientes poliedros tridimensionales:  Tetraedro  Cubo  Octaedro Las actividades a realizar son las siguientes: o Define las estructuras necesarias para representar los objetos dados. o Diseña un programa en lenguaje C que solicite las coordenadas de los vértices de los tres objetos. o Diseña un menú, una vez que cuentas con las coordenadas de los objetos, en el cual se puedan elegir las siguientes operaciones a realizar sobre los poliedros:  Traslación: Se deberán proporcionar la traslación en dirección del eje X, la traslación en dirección del eje Y, y la traslación en dirección del eje Z.  Rotación: Se deberá proporcionar el ángulo en radianes a rotar. Además, deberá indicarse alrededor de qué eje del espacio tridimensional se lleva a cabo la rotación: X, Y o Z.  Escalamiento: Se deberán proporcionar el escalamiento en dirección del eje X, el escalamiento en dirección del eje Y, y el escalamiento en dirección del eje Z. o Presenta los nuevos valores de sus coordenadas, al momento en que los objetos han sido transformados de acuerdo a la operación elegida.Ejercicio 1.-Escribe un programa en lenguaje C que combine dos listas encadenadas cuyos nodos contienen enteros. Los enteros en las listas deberán estar ordenados de manera ascendente. Diseña una función combinar que recibe los apuntadores al primer nodo de cada una de las listas. La función deberá retornar como parámetro de salida un apuntador al primer nodo de la nueva lista combinada. Obviamente la lista combinada tiene sus elementos ordenados de manera ascendente. Realiza la operación de eliminación de listas, verificación de lista vacía y 2.- realiza consultas. www.maestronline.com
  3. 3. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.comEjercicio Considera el siguiente grafo G:  Muestra sus listas de adyacencias.  Muestra el orden en que los vértices de G son procesados al usar el algoritmo de búsqueda por profundidad comenzando por el vértice C (también incluye todos los estados de la pila y el estatus de cada vértice durante la ejecución del algoritmo). Ahora considera la siguiente versión en pseudocódigo del algoritmo para la búsqueda por profundidad (en donde los arreglos color, P, f, d y la variable time son globales): DEPTH_FIRST_SEARCH(G) { Por cada vértice u en V(G) { color[u] = White P[u] = Null } time = 0 Por cada vértice u en V(G) { Si color[u] = White entonces { DEPTH_FIRST_SEARCH_Visit(u) } } } DEPTH_FIRST_SEARCH_Visit(u) { color[u] = Gray d[u] = time time = time + 1 Por cada vértice v en Adj[u] { Si color[v] = White entonces { P[v] = u DEPTH_FIRST_SEARCH_Visit(v) } www.maestronline.com
  4. 4. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com } color[u] = Black f[u] = time time = time + 1 } Aplica esta versión de la búsqueda por profundidad al grafo G dado: o Compara las salidas obtenidas por los dos algoritmos. o Discute las diferencias entre los dos procedimientos dados. o ¿Existe de manera explicita una pila en el nuevo algoritmo dado? Justifica tu respuesta.Ejercicio Tu actividad consistirá de los siguientes puntos, los cuales deberán estar conjuntados en un sistema programado en lenguaje C (reutiliza funciones de la Actividad Integradora del Módulo 2):  En primer lugar, solicita al usuario que introduzca un grafo de n vértices en donde el valor de n lo define precisamente su usuario. Una vez que cuente con el valor de n, el usuario deberá introducir el grafo. Los vértices en el grafo serán etiquetados como 1, 2, 3, …, n. El proceso de introducción de grafo será llevado a efecto al preguntar, por cada vértice, los vértices con los cuales comparte una arista. Por ejemplo: Programa Usuario ¿Cuántos vértices son vecinos del vértice 2? 4 Introduce la etiqueta de vecino del vértice 2: 1 Introduce la etiqueta de vecino del vértice 2: 3 Introduce la etiqueta de vecino del vértice 2: 4 Introduce la etiqueta de vecino del vértice 2: 5 ¿Cuántos vértices son vecinos del vértice 3? …  Diseña una estructura autorreferenciada nodoVertice la cual tendrá tres miembros: El primer miembro será un entero, el segundo miembro será el primer elemento de una lista encadenada del tipo NODO_LISTA_PTR mientras que el tercer miembro será un enlace para conectarse con otro nodo del tipo nodoVertice. Es decir, programarás una lista encadenada en la que cada nodo tendrá también una lista encadenada aunque ésta última será con nodos del tipo NODO_LISTA_PTR. La finalidad es que representes al grafo que el usuario introduzca mediante listas de adyacencias tal como se definió en la sesión 6. Por ejemplo, considera el siguiente grafo: www.maestronline.com
  5. 5. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com Adj 1 à 2 à 5 2 à 1 à 3 à 4 à 5 3 à 2 à 4 4 à 2 à 5 à 3 5 à 1 à 2 à 4 Tal grafo tiene cinco vértices (n = 5). Por lo tanto, la lista encadenada Adj tendrá en total cinco nodos del tipo NODO_VERTICE_PTR. Considera al nodo 4. Tal nodo tiene en su primer miembro el valor 4 (la etiqueta del vértice), el primer elemento de la lista encadenada conformada por 2, 5, y 3; y finalmente su enlace que apunta al nodo con valor 5 de la lista Adj.  Una vez que se tenga en memoria el grafo dado por el usuario, se le deberá solicitar que indique un vértice inicial. Dado el vértice inicial se deberá realizar una búsqueda por amplitud sobre el grafo dado. Para este efecto programa el pseudocódigo analizado en la sesión 9. Diseña una estructura autorreferencia nodoCola la cual tendrá tres miembros: Dos de los miembros serán enteros mientras que el tercer miembro será un enlace para conectarse con otro nodo del tipo nodoCola. El primer miembro entero deberá guardar la etiqueta de un vértice mientras que el segundo miembro entero guardará el STATUS del vértice. Tal cola será auxiliar en el algoritmo para la búsqueda por amplitud.  Una vez que la búsqueda ha sido realizada se deberá presentar al usuario el resultado correspondiente. Utiliza únicamente las estructuras de datos dinámicas que se le solicitan. El programa que diseñaráa no requiere de la declaración ni uso de arreglos.Ejercicio Muestra el árbol de búsqueda binaria que se obtiene al insertar los siguientes elementos: 5, 9, -10, 11, 20, 14, 3, 2, 6, 7, 12, 15, -6, -1, 0, 1, 4, 13. Inserta los enteros de la lista procediendo de izquierda a derecha (es decir, el número 5 será el nodo raíz del árbol resultante). Realiza “corridas de escritorio” a fin de mostrar cómo se recorrería el árbol que ha construido y listarían sus elementos de acuerdo a: 1. La función inOrder 2. La función preOrder 3. La función postOrder Muestra claramente cómo se van realizado las llamadas recursivas. www.maestronline.com
  6. 6. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.comEjercicio Se tienen n puntos pi = (xi, yi) dentro de un círculo de radio igual a uno y con centro en el origen tales que (xi2 + yi2) Î (0, 1] para i = 1, 2, 3, …, n. Supón que los puntos están uniformemente distribuidos, i.e., la probabilidad de encontrar un punto en cualquier región del círculo es proporcional al área de tal región. Modifica al algoritmo Bucket Sort para ordenar a los n puntos de acuerdo a sus distancias del origen (Hint: Rediseña el proceso de división del intervalo [0, 1) en el algoritmo a fin de que reflejes la distribución de los puntos en un círculo unitario).Ejercicio Considera el siguiente arreglo ordenado: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 12 14 20 21 22 40 50 60 70 100 121 122 125 127 128 Realiza “corridas de escritorio” del algoritmo de Búsqueda binaria para responder a las siguientes preguntas: 1. Sea x = 127 ¿Está x en el arreglo A? 2. Sea x = 55 ¿Está x en el arreglo A? 3. Sea x = 12 ¿Está x en el arreglo A? Presenta los valores de las variables e indique el subarreglo de búsqueda durante cada llamada recursiva.Práctica integradora opción 1:Un grafo G está conectado si existe una ruta entre cualesquiera de sus dos vértices yun circuito es una ruta cerrada de longitud mayor o igual a 3 en la cual todos losvértices son distintos excepto el inicial y el final. Recuerda que a un grafo T se le llamaárbol si es conectado y T no tiene circuitos. Si un grafo G no es conectado y no tienecircuitos, entonces se le llama bosque. El árbol que consiste de un solo vértice sinaristas (i.e. el grafo trivial) es llamado árbol degenerado. Los siguientes son ejemplosde árbol (a) y bosque (b). www.maestronline.com
  7. 7. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com a bUn subgrafo T de un grafo conectado G es llamado un árbol de expansión de G si T esun árbol y T incluye a todos los vértices de G. A continuación se presenta un grafo G ytres posibles árboles de expansión T1, T2 y T3 de G: G T1 T2 T3Supón que G es un grafo conectado pesado. Es decir, a cada arista de G le es asignadoun número no negativo llamado el peso de la arista. Entonces a cualquier árbol deexpansión T de G le es asignado un peso total obtenido al sumar los pesos de lasaristas en T. Un árbol de expansión mínimo de G es un árbol de expansión cuyo pesototal es tan pequeño como sea posible.El siguiente pseudocódigo permitirá encontrar el árbol de expansión mínimo T de ungrafo conectado pesado G en donde G tiene n vértices (en tal caso, T deberá tener n-1arisas).MINIMUM_SPANNING_TREE(G, n){ o Ordenar las aristas de G en orden decreciente respecto a su peso. o Proceder secuencialmente, borrar cada arista que no desconecte al grafo hasta que se conserven n-1 aristas.} www.maestronline.com
  8. 8. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.comEl peso de un árbol de expansión mínimo es único, pero el árbol de expansión mínimono lo es. Se pueden obtener diferentes árboles de expansión mínimos cuando dos omás aristas tienen el mismo peso.Considérese el siguiente grafo G:En donde:V= {A, B, C, D, E ,F}E = {{B,C}, {A,F}, {A,C}, {B,E}, {C,E}, {B,F}, {A,E}, {D,F}, {B,D}}y w({B,C})= 8, w({A,F})= 7, w({A,C})= 7, w({B,E})= 7, w({C,E})= 6, w({B,F})= 5,w({A,E})= 4, w({D,F})= 4, w({B,D})= 3.Se aplicará el algoritmo a fin de encontrar un árbol de expansión mínimo. Primero seordenan las aristas en orden decreciente respecto al peso y entonces de manerasucesiva se eliminan aquellas sin desconectar a G hasta que sólo se tengan cincoaristas.Aristas {B,C} {A,F} {A,C} {B,E} {C,E} {B,F} {A,E} {D,F} {B,D}Peso 8 7 7 7 6 5 4 4 2¿Eliminar? Si Si Si No No SiPor lo tanto, el árbol de expansión mínimo de G es obtenido y se compone por lasaristas:{B,E}, {C,E}, {A,E}, {D,F}, {B,D}El peso de tal árbol es igual a 24 y se muestra a continuación:Cuando el número de aristas y vértices en G es muy grande, el decidir si G estáconectado al remover una de sus aristas no es un problema obvio.Actividades:  Avance de práctica integradora (a entregar al finalizar el Módulo 3): www.maestronline.com
  9. 9. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com o Implementar en lenguaje C el algoritmo MINIMUM_SPANNING_TREE(G,n) en donde los grafos estarán representados en la computadora mediante listas de adyacencias. o Como ya se comentó, el problema de determinar si un grafo G está conectado al remover una de sus aristas no es trivial, sin embargo existen en la literatura algoritmos que lo solucionan. Busque e implemente en lenguaje C el algoritmo que resuelva el problema dado a fin de que pueda entonces implementar la función MINIMUM_SPANNING_TREE(G,n). Deberá hacer referencia debidamente a las fuentes de información consultadas. Recuerde que los algoritmos implementados deben asumir la representación de un grafo por listas de adyacencias.  Complemento de práctica integradora (a entregar al finalizar el Módulo 4):  Una vez que se cuente con la debida implementación de la función MINIMUM_SPANNING_TREE(G,n) programa un sistema en lenguaje C con las siguientes características:  El sistema deberá solicitar al usuario que proporcione el nombre de un archivo de texto que contiene la especificación de su grafo. En el archivo se deberán indicar: el conjunto de vértices del grafo, el conjunto de aristas y los pesos de cada arista. Un ejemplo de archivo de entrada sería el siguiente:  {A, B, C, D, E ,F} {{B,C}, {A,F}, {A,C}, {B,E}, {C,E}, {B,F}, {A,E}, {D,F}, {B,D}} w({B,C})= 8 w({A,F})= 7 w({A,C})= 7 w({B,E})= 7 w({C,E})= 6 w({B,F})= 5 w({A,E})= 4 w({D,F})= 4 w({B,D})= 3  En el primer renglón se indican las etiquetas de los vértices del grafo. En el segundo renglón se indican los pares de vértices que definen cada arista del grafo. En el renglón 3 y subsecuentes se indica el peso de cada arista. Cuando se cuente con esta información se deberá representar al grafo con listas de adyacencias y se deberá validar que el grafo de entrada sea conectado, si no lo es entonces el sistema deberá informar al usuario que no puede proceder la búsqueda del árbol de expansión mínimo.  Una vez que se cuenta con el grafo en memoria y éste ha sido validado entonces se procede a buscar el árbol de expansión mínimo. El árbol encontrado deberá ser presentado tanto en pantalla como en un archivo cuyo nombre se deberá solicitar al usuario. Para describir el árbol resultante utilice el formato descrito para los archivos de entrada. www.maestronline.com

×