Sei sulla pagina 1di 4

Diego Rocha Cod.

257354
Universidad Nacional De Colombia
Algoritmos Taller No. 2.

1. Calse Queue{
Stack a;
Stack b;
}
Void push(elemen){
a.push(elemen);
}
Tipo pop(){
while(a.vacio()==false)
b.push(a.pop);
elemen=b.pop();
while(b.vacio()==false)
a.push(b.pop);
return elemen;
}
2. Nodo invertList(Head){
Nodo aux1;
Nodo aux2;
Nodo Head2;
If(Head.next!=null){
While(Head!=null){
aux1.next=Head.next;
aux2.next=Head.next.next;
Head.next=null;
aux1.next.next=Head;
Head2=aux1.next;
aux1=aux2;
Head=aux1
If(Head.next==null){
aux1=null;
aux2=null;
Head.next=Head2
Head2=Head;
Head=null;
}
}
Head=Head2;

Return Head;
}
Else{
Return Head;
}
}
3. La diferencia entre un rbol de bsqueda binario y un heap radica en que
en el heap los hijos son siempre menores a su padre o siempre mayores
que su padre segn sea el caso y en el rbol de bsqueda binaria los hijos
izquierdos son menores que el padre, pero los hijos derechos son mayores
que el padre.
Si es posible imprimir con un heap los datos ordenados en tiempo O(n),
pues puedo comenzar de la cabeza hacia abajo e ir mirando cual de sus
hijos es menor o mayor segn sea el caso e ir imprimiendo en ese orden,
solo son comparaciones que toman O(n).
4. Xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
5. Dado que el sucesor es el menor del subrbol de la derecha, y dado que el
subrbol de la derecha cumple todas las condiciones de un rbol binario de
bsqueda el menor de este subrbol esta contenido en el nodo de mas a la
izquierda; ya que este es el nodo de mas a la izquierda conlleva a que este
no tenga hijo izquierdo. Ahora para el predecesor de la misma manera
tenemos que es el mayor del subrbol de la izquierda y dado que el
subrbol de la izquierda cumple todas las condiciones de un rbol binario
de bsqueda el mayor de este subrbol esta contenido en el nodo de mas a
la derecha; ya que este es el nodo de mas a la derecha da como
consecuencia que este no tenga hijo derecho.
6. Todo depende del algoritmo de eliminacin utilizado:
El algoritmo ms usado es el siguiente:

Caso 1: Nodo sin hijos, elimina normalmente.


Caso 2: Un solo Hijo, hace que el ancestro apunte a ese nico hijo.
Caso 3: Dos Hijos, se reemplaza por el sucesor.

Esta operacin en este caso no es conmutativa, veamos un contraejemplo:

Eliminar 5, 6 del siguiente rbol:

75 8
6
2 4

Primero eliminamos 5 y 6 , en ese orden:

78
6
2 4

78
24

Si eliminamos Primero 6 y luego 5 tendremos:

7
58
2 4

7
8
2 4

De esta manera podemos ver que este algoritmo de eliminacin no


es conmutativo ya que nos genera dos arboles diferentes.
7. El mnimo numero de elementos en un heap de altura h es 2 h-1.
El mximo numero de elementos en un heap de altura h es 2 h - 1.
8. En un heap el elemento ms pequeo puede estar en la cabeza o ser una
de las hojas segn sea el caso del heap.
9. Heapify(A,i){
Int aux=i;
While(i==aux){
Le=left(i);
Ri=right(i);

If(Le<=heap_size(A) && A[Le]>A[i]){


Largest=Le;
}
Else{
Largest=I;
}
If(Ri<=heap_size(A) && A[Ri]>A[largest]){
Largest=Ri;
{
If(largest!=i){
Exchange A[i] <-> A[largest];
i= Largest;
aux=Largest;
}
Else{
i=Largest;
}
}
}

10. Xxxxxxxxxxxxxxxxxxxxxxxxxxxx.
11.La mayora de los arboles binarios completos con n nodos tienen una
altura de mximo log(n). Por lo tanto, el procedimiento downheap
requiere mximo log(n) pasos. El procedimiento builtheap llama a
downheap para cada nodo, por lo tanto esto requiere a lo mas nlog(n)
pasos. Heapsort llama a buildheap una vez; luego este llama a
downheap para cada nodo, juntos esto requiere a lo ms 2nlog(n) pasos.
As, la complejidad de tiempo de heapsort es T(n) = (nlog(n)).

Potrebbero piacerti anche