UTNianos

Versión completa: [APORTE] Final Gestión de Datos 18/02/2014
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
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 Confused
(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 Confused

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 Confused

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! thumbup3
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!
Respecto del 3 b, aparte de un trigger o hacer un SP de inserción, podés usar una cosntraint check sobre toda la tabla. (no en una de las columnas)

https://mariadb.com/kb/en/sql-99/constra...onstraint/
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 Confused) 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.
Páginas: 1 2
URLs de referencia