2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Manuel Freire -
Número de respuestas: 28

Dudas sobre la parte 2

En respuesta a Manuel Freire

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de German Capurro Rodriguez -
Buenas en el .h se pide que tanto la función crearTVisitaDia y en estaEnTVisitaDia sea de O(1) el peor caso, pero no es algo posible de hacer para ambos, consultando con múltiples personas opinaron lo mismo, al menos con las herramientas presentadas en el curso, quizás sea error mio pero me parece que es un error de letra.

Espero su respuesta, Germán.
En respuesta a German Capurro Rodriguez

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Tomás Imperial García -
Buenas, acordate que podés usar estructuras auxiliares(dice en la letra), y creo también modificar a tu favor las que tenés (capaz algún docente me puede resolver esa duda)
En respuesta a Tomás Imperial García

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de German Capurro Rodriguez -
Pero las q sirven para mantener el orden en una elevan el orden de la otra
En respuesta a German Capurro Rodriguez

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Graciana Zecchi Ferrari -
Hola, tengo la misma duda!
Estoy usando una estructura auxiliar como recomendaron pero para inicializarla la función crear debe ser O(n).
Capaz hay otra estructura posible y no la estoy viendo!
Saludos,
Graciana
En respuesta a German Capurro Rodriguez

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Tomás Imperial García -
Tenés razón, estaba confundiendo crear con otra función, por eso me cerraba todo, mal yo.
En respuesta a Tomás Imperial García

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Manuel Freire -

Hola,

Tienen razón, quedó mal el .h cuando hicimos los cambios. El crear es O(N), agregamos el cambio.

Saludos!
Manuel

En respuesta a Manuel Freire

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Pablo Andres Balliva Costa -
Perdón, estoy medio confundido. La letra sugiere usar un heap. Este se crea en O(1) y encontrar si un elemento pertenece es O(N) (hay que comparar con todos, salvo que se busque por prioridad). ¿Qué es lo que no estoy captando?
En respuesta a Pablo Andres Balliva Costa

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Federico Rivero -

Hola Pablo, buen día!

Efectivamente, únicamente con le heap la búsqueda sería O(n). Se debe complementar la estructura con algún campo que permita realizar la búsqueda en O(1).  Como ayuda, sugiero leer el cabezal de crearTVisitaDia, el cual tiene un dato que puede ser de ayuda.

Saludos,

        Federico

En respuesta a Manuel Freire

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Pablo Andres Balliva Costa -

Tengo una consulta sobre la implementación de la función imprimirTVisitaDia (no figura en la letra pero se requiere para el test). Lo que no entiendo es que el .h pide <imprimir secuencialmente con imprimirTGrupoABB en cada grupo> pero dice que se debe hacer por nivel, cuando imprimirTGrupoABB lo hace inorder.

Por otro lado, como se explica en el teórico, para recorrer un árbol por niveles se requiere un TAD cola con varias operaciones, ¿se espera que implementemos todo eso en esta parte?

En respuesta a Pablo Andres Balliva Costa

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Federico Rivero -
Hola Pablo!

La descripción del imprimirTVisitaDia estaba bastante flaca. La mejoré y ya está disponible en los nuevos materiales. Por favor comentame si con la nueva descripción persisten las dudas. Además, puedo contestar que a priori no se precisa ninguna estructura adicional, basta con la implementación usual de heap que ya están haciendo en este módulo.

Saludos!
Federico
En respuesta a Federico Rivero

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Ezequiel Gadea Lucas -
Buenas,
tengo una duda sobre qué significa la j en el comentario del .h

// Finalmente, para cada grupo en el nivel, se imprime:
//      <j>) Grupo <j> con edad promedio <edad promedio>
//      <imprimirTGrupoABB>
En respuesta a Ezequiel Gadea Lucas

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Valentín Barrera Fourcade -
Buenas! Tengo la misma duda. Yo interprete que solo era un numero arbitrario que decidieron incluir en el formato y que iba el mismo numero en los dos j , pero los test de prueba parece que esperan el id del grupo en el segundo j .
En respuesta a Valentín Barrera Fourcade

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Manuel Freire -
Hola,

Como dice Valentin se imprime la id del grupo. Esto es porque se cambió la implementación de grupo para agregar la id para poder identificarlos en la visitaDia.
Quedó confuso lo de imprimir porque las dos veces dice j. El primer ) debería ser ), sería un número autogenerado por el orden de la recorrida (indice del for) mientras que el segundo es la id de grupo.

Saludos!
Manuel
En respuesta a Federico Rivero

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Josefina Pírez Rodríguez -
buen día, ando en duda en el de imprimir de como se podria hacer para ir llevando conteo de los niveles en los que voy para imprimirlos, hay alguna sugerencia que me puedan dar para ubicarme o encaminarme? muchas gracias
En respuesta a Josefina Pírez Rodríguez

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Pablo Andres Balliva Costa -

La clave está en la propiedad de estructura del heap:

Un heap es un árbol binario completamente lleno, con la posible excepción del nivel más bajo, el cual se llena de izquierda a derecha.

Al ir recorriendo el array tenés que el primer elemento del heap está en el nivel 1, los dos siguientes en el nivel 2, los 4 siguientes en el nivel 3, y así sucesivamente.

En respuesta a Manuel Freire

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Ezequiel Gadea Lucas -
Buenas,
tengo una duda sobre encolar. Para poder usar la edadPromedio como prioridad necesito calcularla cada vez que inserte un nuevo grupo. Pero calcular la funcion de obtener edad promedio es Theta(n) peor caso (o bueno, en todos los casos), eso no me estaria elevando el orden de mi funcion encolar a O(n)?
En respuesta a Ezequiel Gadea Lucas

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Manuel Freire -
Hola,

La descripción en el .h de encolar dice:
"Agrega un grupo a la visita según la prioridad dada por su edad promedio. La función es O(1) caso promedio y O(log(n)) peor caso siendo n la cantidad máxima de grupos en la visita". Esto significa que el requisito de tiempo de ejecución de la función se mide contra el tamaño de la entrada en cantidad de grupos posibles, no en cantidad de visitantes. A efectos prácticos es lo mismo que asumir que la cantidad de visitantes por grupo está acotada con el máximo número de visitantes por grupo y por ende podemos sustituir por esa constante.

Saludos!
Manuel
En respuesta a Manuel Freire

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Tomás Imperial García -
Los ids de los grupos están entre 0 y N, incluidos los extremos no? Si es así en la letra y el .h estan mal, y si no el test esta mal, porque usa estaEnVisitaDia con el 0.
En respuesta a Tomás Imperial García

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Federico Rivero -
Hola Tomás,

La idea es que los ids sean 1 <= id <= N, pero igual la función estaEnVisitaDia tiene que devolver false cuando se le pregunta si el id 0 está en la visitaDia.

Saludos,
Federico
En respuesta a Manuel Freire

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Juan Cruz Domínguez Oholeguy -
Buenas tenia una consulta, cuando voy a ejecutar el test me aparece esto: Compilando src/visitaDia.cpp
Compilando y enlazando principal
0a1,6
> ==117114== Conditional jump or move depends on uninitialised value(s)
> ==117114== at 0x10FF49: filtradoAscendente(int, rep_visitadia*&) (visitaDia.cpp:59)
> ==117114== by 0x10FFF3: encolarGrupoTVisitaDia(rep_visitadia*&, rep_grupoABB*) (visitaDia.cpp:74)
> ==117114== by 0x10C89A: main_encolarGrupoVisitaDia(rep_visitadia*&, rep_grupoABB*&) (principal.cpp:1080)
> ==117114== by 0x109EE4: main (principal.cpp:397)
> ==117114==
43,46c49,52
y no puedo hacer el cambio de nivel cuando el tercer nodo tendria que subir al nivel 1. cambie el codigo en varios lugares pero el resultado siempre es exactamente el mismo
En respuesta a Juan Cruz Domínguez Oholeguy

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Federico Rivero -
Hola Juan,

Ese error aparece cuando estás tratando de usar un valor que no se inicializó. Además de las variables locales, fijate si inicializaste las posiciones del heap u otras estructuras que estés utilizando.

Saludos,
Federico
En respuesta a Manuel Freire

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Alvaro Radesca Llorente -
Buenas, a que se debe este error? Puede ser que el arreglo de arboles no este bien inicializado?

En respuesta a Alvaro Radesca Llorente

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Federico Rivero -
Hola Álvaro,

Por las dudas, el max grupos visitaDia no es la cantidad de grupos en la visitaDia (eso te lo devuelve la función cantidadGruposTVisitaDia), la función maxGruposTVisitaDia te indica cuántos grupos puede haber como máximo en la visitaDia. Básicamente te da el valor del parámetro con el que se inicializa la estructura.

Saludos,
Federico
En respuesta a Federico Rivero

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Alvaro Radesca Llorente -
cual seria mi error entonces? me falta algun campo en el struct o inicializo mal una variable en crearTVisitaDia?
En respuesta a Alvaro Radesca Llorente

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Federico Rivero -
Hola Álvaro,

Pudiste solucionar? Por lo que veo estás devolviendo 0 cuando deberías devolver 100. Parecería que no estás devolviendo el valor correcto.

Saludos,
Federico
En respuesta a Manuel Freire

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de Shakira Gonzalez Pedetti -
Buenas, cuando hago el test visitaDia1 sale:
73c73,77 < Visitante Nombre4 Apellido4
---
> Visitan==2412== Conditional jump or move depends on uninitialised value(s)
> ==2412== at 0x10CAE7: main_estaEnTVisitaDia(rep_visitadia*) (principal.cpp:1116)
> ==2412== by 0x109FD9: main (principal.cpp:407)
> ==2412==
> te Nombre4 Apellido4
Que significaria ese error?
En respuesta a Manuel Freire

Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia

de María Carolina Caimi Angelero -
Buenas, en el test de esta parte (y en varias otras de este modulo) me pasa que la primera vez que se pide crear un grupoABB lo hace de forma exitosa, sin embargo, a la 2da o 3era vez que se le pide la misma función me salta violación de segmento. No entiendo a que se debe, la funcion de crearGrupoABB no nos la dan ustedes? esta relacionada a alguna otra de visita dia que estaré haciendo mal? Gracias