ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
Estructura de datos avanzada
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. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
Ejercicio
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. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
Ejercicio
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. 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. 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. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
Ejercicio
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 y
un circuito es una ruta cerrada de longitud mayor o igual a 3 en la cual todos los
vé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 tiene
circuitos, entonces se le llama bosque. El árbol que consiste de un solo vértice sin
aristas (i.e. el grafo trivial) es llamado árbol degenerado. Los siguientes son ejemplos
de árbol (a) y bosque (b).
www.maestronline.com
7. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
a b
Un subgrafo T de un grafo conectado G es llamado un árbol de expansión de G si T es
un árbol y T incluye a todos los vértices de G. A continuación se presenta un grafo G y
tres posibles árboles de expansión T1, T2 y T3 de G:
G T1
T2 T3
Supón que G es un grafo conectado pesado. Es decir, a cada arista de G le es asignado
un número no negativo llamado el peso de la arista. Entonces a cualquier árbol de
expansión T de G le es asignado un peso total obtenido al sumar los pesos de las
aristas en T. Un árbol de expansión mínimo de G es un árbol de expansión cuyo peso
total es tan pequeño como sea posible.
El siguiente pseudocódigo permitirá encontrar el árbol de expansión mínimo T de un
grafo conectado pesado G en donde G tiene n vértices (en tal caso, T deberá tener n-1
arisas).
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. Servicio de asesoría y resolución de ejercicios ciencias_help@hotmail.com
El peso de un árbol de expansión mínimo es único, pero el árbol de expansión mínimo
no lo es. Se pueden obtener diferentes árboles de expansión mínimos cuando dos o
má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 se
ordenan las aristas en orden decreciente respecto al peso y entonces de manera
sucesiva se eliminan aquellas sin desconectar a G hasta que sólo se tengan cinco
aristas.
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 Si
Por lo tanto, el árbol de expansión mínimo de G es obtenido y se compone por las
aristas:
{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. 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