Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Practica grafos estructuras, Ejercicios de Estructuras de Datos y Algoritmos

Practica grafosPractica grafosPractica grafosPractica grafosPractica grafosPractica grafosPractica grafos

Tipo: Ejercicios

2021/2022

Subido el 14/06/2022

paula-home
paula-home 🇪🇸

1 documento

1 / 4

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Pràctica 2
ED 2021-22
Estructures de Dades 2022
Pràctica 2: Grafs
En aquesta segona pràctica tenim com a objectiu treballar amb un graf. Concretament,
generarem un graf dels punts de recàrrega de Catalunya que proporciona l'ICAEN (Institut Català
d'Energia): https://xarxarecarrega.icaen.gencat.cat/ICAEN/
Es tracta d'un dataset que conté tots els punts de recàrrega instal·lats a Catalunya amb les seves
coordenades per tal de poder-los situar en el mapa.
La informació que ens proporcionen com a input és una llista de connectors en format JSON. Cal
notar que un punt de recàrrega pot tenir múltiples connectors (endolls), i a la seva vegada un
punt de recàrrega es troba en una localització concreta on pot haver-hi més punts de recàrrega,
per tant, és normal que trobeu més d’un connector amb les mateixes coordenades. Per a
simplificar el problema, no agruparem els endolls en punts de recàrrega i zones de recàrrega,
sinó que agruparem els endolls directament en zones de recàrrega, és a dir, tots els endolls amb
les mateixes coordenades formaran part de la mateixa zona de recàrrega, indiferentment de com
estiguin organitzats físicament en punts de recàrrega.
Aquesta informació s’haurà d’emmagatzemar en un graf on els nodes del graf representaran les
zones de recàrrega que hi ha. Cada node estarà identificat per un identificador corresponent
a la zona de càrrega (podeu utilitzar el vostre propi sistema d’identificació basat en la
ciutat, carrer, coordenades o altre propietats del data set que us permetin identificar una
zona...), i tindrà una posició del mapa i informació de la potència dels endolls que hi ha a
la zona. A més tindrem que cada node contindrà una llista de les zones properes i la distància
que els separa en forma d’aresta.
Per a guardar el graf primer haurem de programar una estructura de dades genèrica que ens
permetrà emmagatzemar un graf, i posteriorment haurem de crear una instància d’aquest graf
genèric per guardar les dades dels punts de càrrega.
L’estructura de dades genèrica per a guardar dades en forma de graf haurà de respectar la
següent interfície:
void CrearGraf();
- Constructor per inicialitzar la taula.
void afegirAresta(V v1, V v2, E e);
- Funció per a afegir una aresta.
- L’operació llença una excepció en cas que no es pugui afegir.
boolean existeixAresta(V v1, V v2);
- Funció que ens diu si una aresta existeix.
pf3
pf4

Vista previa parcial del texto

¡Descarga Practica grafos estructuras y más Ejercicios en PDF de Estructuras de Datos y Algoritmos solo en Docsity!

Pràctica 2

Estructures de Dades 20 22

Pràctica 2 : Grafs

En aquesta segona pràctica tenim com a objectiu treballar amb un graf. Concretament, generarem un graf dels punts de recàrrega de Catalunya que proporciona l'ICAEN (Institut Català d'Energia): https://xarxarecarrega.icaen.gencat.cat/ICAEN/ Es tracta d'un dataset que conté tots els punts de recàrrega instal·lats a Catalunya amb les seves coordenades per tal de poder-los situar en el mapa. La informació que ens proporcionen com a input és una llista de connectors en format JSON. Cal notar que un punt de recàrrega pot tenir múltiples connectors (endolls), i a la seva vegada un punt de recàrrega es troba en una localització concreta on pot haver-hi més punts de recàrrega, per tant, és normal que trobeu més d’un connector amb les mateixes coordenades. Per a simplificar el problema, no agruparem els endolls en punts de recàrrega i zones de recàrrega, sinó que agruparem els endolls directament en zones de recàrrega, és a dir, tots els endolls amb les mateixes coordenades formaran part de la mateixa zona de recàrrega, indiferentment de com estiguin organitzats físicament en punts de recàrrega. Aquesta informació s’haurà d’emmagatzemar en un graf on els nodes del graf representaran les zones de recàrrega que hi ha. Cada node estarà identificat per un identificador corresponent a la zona de càrrega (podeu utilitzar el vostre propi sistema d’identificació basat en la ciutat, carrer, coordenades o altre propietats del data set que us permetin identificar una zona...), i tindrà una posició del mapa i informació de la potència dels endolls que hi ha a la zona. A més tindrem que cada node contindrà una llista de les zones properes i la distància que els separa en forma d’aresta. Per a guardar el graf primer haurem de programar una estructura de dades genèrica que ens permetrà emmagatzemar un graf, i posteriorment haurem de crear una instància d’aquest graf genèric per guardar les dades dels punts de càrrega. L’estructura de dades genèrica per a guardar dades en forma de graf haurà de respectar la següent interfície: void CrearGraf();

  • Constructor per inicialitzar la taula. void afegirAresta(V v1, V v2, E e);
  • Funció per a afegir una aresta.
  • L’operació llença una excepció en cas que no es pugui afegir. boolean existeixAresta(V v1, V v2);
  • Funció que ens diu si una aresta existeix.

Pràctica 2 E valorAresta(V v1, V v2);

  • Funció que retorna el valor d'una aresta.
  • L’operació llença una excepció en cas que no existeixi. LlistaGenerica adjacents(V v);
  • Funció que retorna una llista que conté tots els nodes adjacents al node passat per paràmetre.
  • L’operació llença una excepció en cas que no es pugui crear aquesta llista. Implementació del graf Per a construir el graf, simplificarem el problema de nou i, en lloc de representar la xarxa de carreteres de Catalunya per a unir els punts de recàrrega, simularem les carreteres a partir d’aquestes dues assumpcions:
  1. Totes les zones de recàrrega a menys de 40km de distància estaran connectades entre elles en línia recta i les arestes no seran dirigides. Per tal de calcular la distància entre dos punts utilitzarem la distància entre dues coordenades en un pla 2D (distància euclidià entre dos punts)
  2. Si una zona de recàrrega no està connectada amb ningú a partir de la condició anterior, es connectarà amb la zona més propera sigui quina sigui la distància que les separa, de manera que garantirem que hi hagi només hi haurà una component connexa en el graf. A més, considereu els següents aspectes:
  • Implementeu les classes necessàries per tal de definir tots els elements mencionats en la introducció del problema i guardar els atributs corresponents. Una d'aquestes classes serà la classe de "graf genèrica", la qual ha de seguir l'especificació que hem esmentat. La instància d'aquesta ens servirà per a guardar les dades de punts de càrrega.
  • Per a guardar la informació dels nodes podeu fer servir l’estructura que vulgueu, tot i que es recomana fer servir la taula de hashing, la que vau fer a la primera pràctica o en el seu defecte, el HashMap de Java.
  • Per a guardar les arestes us recomanem una multillista d’adjacència de manera que el cost en memòria sigui òptim, és a dir, el mínim. Valorarem que la multillista d’adjacència guardi el mínim d’informació possible.
  • Per a totes aquelles classes que no formin part de l'estructura graf i que requereixin guardar les dades en una estructura seqüencial (ex. llista de resultats, llista d'endolls) es podrà utilitzar la classe ArrayList de java.util. Tenint en compte que l'objectiu de la pràctica no és el manegament d'inputs i el seu parseig, es permetrà l'ús de qualsevol llibreria per a llegir el fitxer d'input en format JSON i convertir-lo en objectes. Algunes suggerències: Gson, Json-simple, Org.json... us recomanem la utilització d'un gestor de dependències com Maven per afegir la dependència de la llibreria (el vostre IDE us pot ajudar amb això), o bé, podeu baixar el .jar i linkar-lo manualment en el pitjor dels casos.

Pràctica 2 Lliurament

  • Les pràctiques són individuals.
  • Es fa el lliurament d’un únic arxiu PR 2 - NOM_COGNOMS.zip que conté: o Els arxius de codi font. o Informe (en PDF) incloent explicacions dels aspectes més rellevants de les vostres implementacions, jocs de proves realitzats... al final de tot de l’informe també haureu d’incloure tot el vostre codi enganxat. Puntuació
  • Construcció del graf – 4 pt
  • Buscar ruta òptima – 3 pt
  • Buscar les zones de recàrrega que no tenen una altra zona de recàrrega a menys de certa distància – 2 pt
  • Joc de proves – 1pt