Dudas sobre la parte 2
2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
Espero su respuesta, Germán.
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
Hola,
Tienen razón, quedó mal el .h cuando hicimos los cambios. El crear es O(N), agregamos el cambio.
Saludos!
Manuel
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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?
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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>
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
.Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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.
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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)?
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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.
Manuel
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
![](https://eva.fing.edu.uy/pluginfile.php/513170/mod_forum/post/641833/vd1.png)
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
Re: 2. Implemente las funciones crearTVisitaDia, liberarTVisitaDia, estaEnTVisitaDia y encolarGrupoTVisitaDia
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?