Buenas! Ayer pasé a firmar la materia y un profesor bondadoso (no sé quién era la verdad) me ofreció una copia del final, así que acá se las dejo.
tarde 3 minutos en leerlo e irme a la carajo.
A varios nos pasó lo mismo.
Se agradece el aporte.
¿Alguien tiene idea que es un árbol principal derecho balanceado? Estuve buscando en los apuntes pero no encontré nada de eso
(23-02-2014 21:54)Neliel escribió: [ -> ]¿Alguien tiene idea que es un árbol principal derecho balanceado? Estuve buscando en los apuntes pero no encontré nada de eso
No importa eso de derecho.. Es falso, Incluso Huffman comprime mejor mientras mas desbalanceado es el arbol
(23-02-2014 21:54)Neliel escribió: [ -> ]¿Alguien tiene idea que es un árbol principal derecho balanceado? Estuve buscando en los apuntes pero no encontré nada de eso
Es un árbol que cumple dos condiciones a la vez:
1- Árbol Balanceado: todas sus hojas tienen el mismo nivel.
2- Árbol ppal derecho: todos los nodos no-principales tienen un único padre y el nodo principal es el minimal del árbol (llamado raíz) y es único.
La condición 2 se cumplen para TODOS los árboles binarios, así que también se cumple para Huffman.
Sin embargo Huffman puede ser o no ser Balanceado, por lo cual la afirmación es FALSA.
______________________________________________________________________________________________________
APORTE:
Les dejo el
ejercicio 3a) codificado, por si quieren hacer una prueba de escritorio.
Para mi, la respuesta a ese ejercicio es que el código funciona bien (sacando que de preguntar por un producto que no existe va a devolver un "0" de todas formas).... Pero la verdad no sé como optimizarlo.... alguna ayuda?
create function dbo.Nivel_composicion(@idElem int)
returns int as
BEGIN
declare @id_composicion int,
@id_componente int
declare @grado int,
@max_grado int
declare composicion cursor
for
select c.comp_producto, c.comp_componente
from Composicion c
WHERE c.comp_producto = @idElem
set @grado = 0
open composicion
fetch composicion into @id_composicion, @id_componente
if @@FETCH_STATUS != 0
BEGIN
close composicion
deallocate composicion
return 0
END
set @max_grado = 1
WHILE @@FETCH_STATUS = 0
begin
if exists (SELECT * FROM Composicion c WHERE c.comp_producto = @id_componente)
BEGIN
SET @grado = 1 + dbo.Nivel_composicion(@id_componente)
END
IF(@grado > @max_grado)
BEGIN
SET @max_grado = @grado
END
FETCH composicion into @id_composicion, @id_componente
END
close composicion
deallocate composicion
return @max_grado
END
gracias!
Que tal gente,
Tengo algunas consultas
3.a. A mi parecer funciona bien, no se me ocurre mucho como optimizarlo alguna idea??
3.b. Se me ocurre una forma que es con triggers. Pero no se me ocurre otra.
1.b es falso?? me parece q no necesariamente es asi.
Desde ya Muchas gracias por las respuestas.
Se me ocurren 2 posibilidades con TRIGGER para el 3b. ¿Serán aceptadas como 2 formas distintas?
Opcion1
CREATE TRIGGER control_mismo_valor
-- Se activará cada vez que se inserte o actualice
BEFORE INSERT OR UPDATE ON Composicion
FOR EACH ROW
BEGIN
IF :NEW.comp_producto= :NEW.comp_componente THEN
RAISE_APPLICATION_ERROR(-1, 'Comp_producto es igual a comp_componente');
END IF
END control_mismo_valor;
Opcion2
CREATE TRIGGER control_mismo_valor_2
-- Se activará cada vez que se inserte o actualice
BEFORE INSERT OR UPDATE ON Composicion
FOR EACH ROW WHEN (:NEW.comp_producto= :NEW.comp_componente)
BEGIN
RAISE_APPLICATION_ERROR(-2, 'Comp_producto es igual a comp_componente');
END control_mismo_valor_2;
¿Qué opinan?
no
una forma es trigger
la otra una unique key
y ademas ojo, porque si bien no se especifica el motor, es sabido que toda la cursada se de MSSQL, que no soporta Before Trigger;
por lo tanto tu opción sería usar un Instead Of
Unique??? No funcionaría con un unique. Lo que dice es que un material no se puede componer por si mismo.
Las dos formas son: trigger (instead of) o un stored procedure (para hacer la logica ahi dentro, y si son iguales que falle).
El 3.A) me mató, ni idea como se puede llegar a hacer.
Y agrego algo del V/F: vi en bocha de post que confunden lo que es un arbol completo, lleno y balanceado.
Lleno: completo y tiene todos los maximales en el mismo nivel.
Completo: el grado de salida de los no maximales es igual para todos.
Balanceado: para todos (x,y) hijos de un mismo padre, la diferencia de la cantidad de nodos que hay por debajo de cada hijo es 0 o 1.
Eso quiere decir que huffman es completo, pero no lleno ni balanceado. Puede que si, pero no podés asegurarlo SIEMPRE.
Con respecto al 3.a se me ocurrió algo que quizas este mal, pero lo planteo. Voy a darlo con un ejemplo ABSURDO de comida. Por ejemplo Lasagna contiene mayonesa y sal. Luego la mayonesa contiene huevo aceite y sal. Esta funcion para mi no valida que algun padre ya haya contado un componente previamente(contaría dos veces la sal). Y esto no tengo idea como se podria validar, o optimizar.
En realidad no estoy seguro que sea este el problema, o se refiere a otra cosa que optimizar porque no encuentro otra manera mejor de realizarlo.
Gracias!
Te podes parar e irte en el final de gestion?
(17-02-2015 20:32)coolerking escribió: [ -> ]Te podes parar e irte en el final de gestion?
Sí, la semana pasada rendí (me fue mal
) y te daban 5 minutos para leer el enunciado, y si no te sentías seguro te podías ir.
Yo me confié de más... pero no era tan difícil.