Ejercicios_Resueltos_Arboles

Embed Size (px)

Citation preview

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    1/27

    Arboles

    1.- Grafique el árbol que contiene el código de Huffman y complete la tabla dadas las siguientes frecuencias.

    Letra Frecuencia Código de Huffman

    A 18

    E 20

    I 32

    O 5

    U 7

    b Codificar las cadenas!

    1AA"#$%" &%A%A"#

    c 'ecodificar las cadenas de bits!

    1((((1((1(((1((((((1 &1(1((1((1(((((1(((1

    )olución!

    Un algoritmo para construir arboles de Huffman consiste en lo siguiente

    !efinimos un con"unto de nodos# en donde cada nodo representa las letra como un nodo de un $rbol# eti%uetamos las

    frecuencias definidas para cada letra# tal & como muestra la siguiente figura

    Empe'amos con las dos letras de menor frecuencia# estas se unen & crean un nue(o s)mbolo# la frecuencia del nue(o

    nodo es la suma de los dos anteriores# agregamos el nue(o s)mbolo al con"unto de las letras* Obser(e %ue el grupo de

    letras se (uel(e mas pe%ue+o* Asumiremos %ue el elemento con menor frecuencia ira siempre a la i'%uierda* El $rbol

    formado se muestra a continuaci,n*

     

    Hacemos esto -asta %ue no %ueden nodos en el con"unto*

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    2/27

    ara concluir# en este caso# (amos a marcar los -i"os i'%uierdos con el numero uno & los derec-os con el cero* odemos

    omitir las eti%uetas de las frecuencias * El $rbol de Huffman resultante se presenta a continuaci,n

    os c,digos ser$n los siguientes

    A! 000 "! 01 #!1 $!0011 %!0010

    Codificar las cadenas! 14AAEIOUE0000000110011001001 24UAUAEI00100000010000011

    'ecodificar las cadenas de bits! 140000100100010000001AEEAIAAI 241010010010000010001IEUEAU

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    3/27

    &- 'ado el siguiente árbol binario completo* con+iertalo en un árbol parcialmente ordenado. "n la ra, debe estar el

    mayor de todos.

    )olución!

    .ecordemos la definici,n de un $rbol parcialmente ordenado Un $rbol parcialmente ordenado tiene dos principales

    caracter)sticas

    6 Es un $rbol binario completo# es decir %ue todos sus ni(eles est$n completos a ecepci,n del ultimo ni(el en donde

    las -o"as (an a apareciendo seguidas de i'%uierda a derec-a*

    6 iene definida alguna propiedad de orden# por e"emplo entre ra)' e -i"os# la ra)' contiene el menor de todos*El $rbol presentado en el problema es un $rbol binario completo# lo %ue debemos -acer es a"ustar los nodos del $rbol

    de tal forma %ue se cumpla la propiedad de orden# en este caso en la ra)' debe estar el ma&or de todos* ara facilitar la

    eplicaci,n de la resoluci,n del problema (amos a eti%uetar los nodos del $rbol

    Empe'aremos desde el pen9ltimo ni(el del $rbol:ni(el dos4 iremos (erificando si el (alor de la ra)' de cada subarbol es

    ma&or %ue los (alores de sus -i"os* or e"emplo el subarbol con ra)' en el nodo 7 almacena el (alor ;3# (erificamos con

    los nodos -i"os falso# debemos intercambiar el (alor de los nodos* A-ora la ra)' almacena el (alor de 83#

    (ol(emos a (erificar el (alor de la nue(a ra)' con los nodos -i"os (erdadero# # tambin es (erdadero*

    Hacemos esto para todas las ra)ces en ese ni(el# teniendo lo siguiente

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    4/27

    A-ora a"ustamos desde el ni(el 1* Hagamos el an$lisis para el subarbol %ue tiene por ra)' el nodo 2# %ue almacena el

    (alor ?7*

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    5/27

    "n la tabla proporcionada a continuación se encuentran las frecuencias aproimadas de las / letras mas frecuentes

    en el idioma castellano. Construya un árbol de Huffman considerando que!

    - "n el árbol binario* la rama iquierda se codifica con cero y la derec0a con uno.

    - )e debe poner siempre a la iquierda al elemento con menor frecuencia* el momento de unir dos s,mbolos. )i

    coinciden en frecuencia se orden alfabticamente.

    Letra Frecuencia

    E 15

    A 1?

    O 11

    10

    . 8

    B 7

    I ;

    ! 5

    ?

    "n base al código construido decodifique la siguiente cadena!

    (11(11((((11(1(11111 (11111111(1((1((111

    )olución!

    Antes de empe'ar a resol(er el problema tenemos %ue tener mu& claro %ue para este caso el teto detalla

    epl)citamente como debe ser construido el $rbol de Huffman# en donde codificaremos los sub$rboles i'%uierdos con

    el cero & los sub$rboles derec-os con el uno* /onsidere tambin %ue el elemento de menor frecuencia (a siempre a la

    i'%uierda* /on estas consideraciones a-ora procederemos a aplicar el algoritmo %ue &a conocemos para resol(er este

    tipo de e"ercicios*

    !efinimos un con"unto de elementos# en donde cada elemento del mismo representa un nodo de un $rbol %ue

    almacena una letra con su respecti(a frecuencia*

    eleccionamos las dos letras de menor frecuencia# estas se unen & crean un nue(o s)mbolo# la frecuencia del nue(o

    nodo es la suma de los dos anteriores# agregamos el nue(o s)mbolo al con"unto de las letras* En un principio nuestro

    $rbol de Huffman estar$ conformado por los dos nodos de menor frecuencia pre(iamente seleccionados*

    /ontinuamos con este mismo procedimiento -asta %ue &a no %ueden nodos por seleccionar*

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    6/27

    Obser(e %ue en el proceso se forman (arios arboles binarios*

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    7/27

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    8/27

    El $rbol resultante es el %ue se muestra a continuaci,n# obser(e %ue se cumplen estrictamente las indicaciones del

    teto*

    os c,digos obtenidos se detallan a continuaci,n

    E 00

    A 111

    100O 101

    . 010

    0110

    ! 0111

    I 1100

    B 1101

    El significado de la cadena 011011000011010111111 0111111110100100111 es IEB!A !ABEA

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    9/27

    2.- "l profesor Gig A. 3yte necesita almacenar teto formado con los caracteres A*3*C*'*" que ocurren con las

    siguientes frecuencias!

    Letra Frecuencia

    A ;

    C 2

    / 3

    ! 2

    E 8

    "l profesor 3yte sugiere usar los códigos de longitud +ariable!

    Carácter Código

    A 1

    C 0 0

    / 0 1

    ! 10

    E 0

    Los cuales* asegura* almacenan teto en menos espacio que el usado por un cogido Huffman optimo 4"sta en lo

    correcto el profesor5 "plique su respuesta.

    El problema se resume en lo siguiente# El profesor Dig A* C&te le presenta a usted una opci,n alternati(a para codificar

    letras* El argumento principal %ue el profesor usa para "ustificar %ue su soluci,n es optima consiste en %ue los c,digos

    %ue el proponen ocupan menos espacio %ue un c,digo de Huffman optimo* A usted se le pregunta si la tesis del

    profesor C&te es correcta*

    abemos mu& bien %ue cuando buscamos codificar un con"unto de caracteres# siempre %ueremos %ue los caracteres

    con ma&or frecuencia ocupen un menor espacio# & los caracteres de menor frecuencia ocupen ma&or espacio* A simple

    (ista el modelo propuesto por el profesor C&te cumple esta condici,n* ero cuando proponemos un c,digo pararepresentar un car$cter debemos asegurarnos de un detalle mu& importante#e(itar la ambigedad* El c,digo

    propuesto es ambiguo & confuso* or e"emplo la cadena 00 podr)a significar el car$cter C o tambin la palabra EE* As) 

    eiste un sin numero de cadenas %ue podr)an representar (arios significados* or conclusi,n el c,digo propuesto no es

    correcto*

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    10/27

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    11/27

    El elemento %ue sigue es el 11* Este numero es menor %ue la rai' 17# esto supone %ue se debe insertar en el subarbol

    i'%uierdo* A-ora (emos %ue el once es ma&or %ue la rai' @ entonces debe ir en el subarbol derec-o* El 11 es menor

    %ue la rai' 12 entonces debera ubicarse en la i'%uierda de dic-o nodo*

     

    eguimos con este procedimiento -asta %ue &a no %ueden elementos para insertar*

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    12/27

    El arbol resultante es el %ue se muestra a continuaci,n# obser(e %ue siempre se conser(an las caracteristicas propias

    de un Arbol Cinario de Cus%ueda*

    b4 ara eliminar un nodo p de un Arbol Cinario de Cus%ueda# primero locali'amos la ubicacion de dic-o nodo en el

    arbol* ara este caso en particular# el nodo a eliminar es la rai' del arbol* ara eliminar la rai'# debemos buscar un nodo

    F %ue sea el ma&or de las cla(es menores*

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    13/27

    Intercambiamos la cla(e del nodo p con el nodo F* Eliminamos el nodo F*

    Ga %ue el nodo F tiene un solo nodo -i"o# basta con intercambiar estas cla(es* a cla(e 17 debe ba"ar -asta %ue sea un

    nodo -o"a del arbol*

    or ultimo simplemente se remue(e el nodo -o"a con la cla(e 17# el estado final del arbol se muestra a continuaci,n*

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    14/27

    )e quiere en+iar por internet la siguiente imagen 7e tcnica podr,a utiliar para comprimir la información de esta imagen5

    b 'e la tcnica seleccionada* describa como se calcular,an los +alores de sus parámetros en base a los datos del

    problema.

    c 4>ue porcenta;e de reducción de bits a en+iar puede lograr al aplicar la tcnica seleccionada por usted*

     ;ustifique su cálculo5d 4>u otro mecanismo cree usted que puede usarse para reducir a7n más la cantidad de bits a en+iar5

    a4 odemos usar un arbol de Huffman# en donde cada nodo del arbol (a a representar un color# el arbol lo (amos a

    construir en funcion de las frecuencias de cada color en la imagen* !e esta forma al en(iar la imagen por e"emplo el

    numero entero 30 %ue representa a un color en particular# se en(iara con un codigo %ue ocupe un menor tama+o*

    b4 as frecuencias serian

    ?umero Frecuencia

    0 12

    15 8

    25 12

    30 18

    eguimos el mismo procedimiento %ue &a conocemos para formar un arbol de Huffman obteniendo lo siguiente

    Color Código

    0 0 0

    15 0 1

    25 1 0

    30 1 1

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

    0 0 3 0 0 0

    0 15 30 15 0

    15 25 30 25 15

    25 25 30 25 2530 30 30 30 30

    30 30 30 30 30

    25 25 30 25 25

    15 25 30 25 15

    0 15 30 15 0

    0 0 3 0 0 0

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    15/27

    c4odemos (er la imagen como una matri' de 10 filas con 5 columnas# en cada celda -a& un numero entero %ue

    representa 8 bits# como tenemos 50 celdas la imagen tendra un tama+o de 508 bits* Aplicando el mecanismo %ue

    -emos descrito# cada numero representara 2 bits# entonces en total seria 502 bits*

    d4 Obser(ando bien la imagen podemos notar %ue a partir de la fila 5* la imagen se refle"a* Es decir la fila ; es la misma

    %ue la fila 5# la fila 7 es igual %ue la fila ?# la fila 3 es la misma %ue la fila 8# la fila 2 es igual %ue la fila @ & por ultimo la

    ultima fila es la misma %ue la primera* odemos usar un mecanismo para en(iar la mitad de la imagen & %ue esta se

    refle"e con respecto a la fila cinco* Ademas de esto tambien podemos asegurarnos %ue en el momento de construir el

    arbol de Huffman para esta imagen# el arbol debe mantenerse siempre e%uilibrado# esto -ace %ue los codigosgenerados ocupen menor espacio*

    "scriba un función llamada int SumarArbol que* dado un árbol binario retorne la suma de todos los +alores de

    sus cla+es.

    En esta funci,n nos piden %ue sumemos todos los (alores almacenados en el campo Fe& del !A Boderee#

    resol(eremos esto de forma recursi(a* o primero %ue (amos a (erificar es %ue la referencia del nodo %ue (iene por

    par$metro es (alida* uego de esto (amos a definir el caso base & las llamadas recursi(as* Imaginemos %ue tenemos un

    simple $rbol de una ra)' & tan solo dos -i"os# estos dos -i"os son nodos -o"as de ese $rbol# nuestra funci,n deber)a

    sumar la cla(e de la -o"a i'%uierda con la cla(e de la -o"a derec-a & con la cla(e de la ra)'*

    A-ora pensemos en un $rbol mas etenso# el problema se resuel(e de la misma forma# sumar las cla(es del subarbol

    i'%uierdo con las cla(es del subarbol derec-o & la cla(e de la ra)'* Es decir el problema de sumar las cla(es del subarbol

    i'%uierdo o derec-o es un problema del mismo tipo %ue el problema original de a%u) la naturale'a recursi(a de estaimplementaci,n*

    El caso base o fin de la recursion sera cuando tengamos problemas tan pe%ue+os %ue su soluci,n es simple# esto sera

    cuando lleguemos a un nodo -o"a# en donde retornaremos la cla(e %ue almacena dic-o nodo* as llamadas recursi(as

    empie'an cuando el $rbol %ue estemos tratando no sea una -o"a# para ese caso llamaremos a la funci,n de nue(o

    en(i$ndole el subarbol i'%uierdo sumado con otra llamada en donde en(iamos el subarbol derec-o & esto a su (e'

    sumado con el contenido de la cla(e de la ra)'*

    a siguiente soluci,n resuel(e el problema planteado# se recomienda %ue -aga una prueba de escritorio para %ue se

    asegure %ue todo funciona como deber)a*

    int sumar/la(es:ree A4

      if :A BU4

      if : A6=left BU JJ A6=rig-t BU4

      return integerDet:A6=Fe&4K  L else

      return sumar/la(es:A6=left4 M sumar/la(es:A6=rig-t4 M integerDet:A6=Fe&4K

      L

      Lelse

      return 0K

      L

    L

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    16/27

    "scriba una función recursi+a espe;o que para un árbol binario retorne el árbol in+ertido* como se muestra en la

    figura!

    )olucion!

    El problema simplemente consiste en intercambiar los punteros eft & .ig-t de un $rbol* Esta operaci,n se la -ar$

    tantas (eces como ra)ces eistan en el $rbol* El c,digo a continuaci,n resuel(e el problema descrito# obser(e %ue una

    (e' %ue se reali'a la operaci,n de intercambio se (uel(e a llamar a la funci,n en(i$ndole las referencias a los

    subarboles i'%uierdo & derec-o# el final de llamadas sera cuando encontremos un nodo -o"a# en donde simplemente

    no se debe -acer nada*

    int esHo"a:BodereeNnodo4

      if:nodoBU4

      return 0K

      L

      if:nodo6=leftBUJJnodo6=rig-tBU4

      return 1K

      L

      return 0K

    L

    (oid espe"o:ree A4

      BodereeNtmpK

      if :A BU4

      if :esHo"a:A44

    returnK

      L else

      tmp A6=leftK

      A6=left A6=rig-tK

      A6=rig-t tmpK

      espe"o:A6=rig-t4K

      espe"o:A6=left4K

      L  Lelse

      returnK

      L

    L

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    17/27

    'ado un árbol con enteros almacenados 7nicamente en los nodos 0o;as* implemente una función recursi+a que

    llene los nodos internos con +alores enteros de tal manera que cada nodo almacene un entero igual a la suma de

    sus 0i;os.

    E ;emplo!

     Árbol antes de la llamada función: Árbol después de llamar a la función:

    )olucion!

    Esta funcion debe ser recursi(a* El prototipo sera como sigue int llenarBodos:ree arbol4K mas adelante eplicaremos

    por%ue retornamos un entero*

    Buestro ob"eti(o es ir llenando el arbol desde los nodos -i"os# pasando por los nodos internos del arbol -asta llegar a

    la rai'* El teto describe %ue un nodo padre almacenara la suma de los (alores de sus nodos -i"os*

    a funcion implementada en la libreria int nodereeIseaf:Boderee Np4 nos retorna uno si p es un nodo -o"a & cero si

    no lo es*

    a condicion de salida de la recursion sera cuando lleguemos a un nodo -o"a# en ese momento retornamos el (alor %ue

    almacena ese nodo# por esto era necesario declarar el prototipo de la funcion como lo -icimos*

    i el nodo en analis no es -o"a entonces debe tener nodos -i"os* A-ora (eamos la siguiente linea de codigo int

    sumallenarBodos:nodereeDeteft:arbol44 M llenarBodos:nodereeDeteft:arbol44K

    as funciones BodereeNnodereeDeteft:ree A4 & BodereeNnodereeDet.ig-t:ree A4 nos retornan las referencias

    del subarbol i'%uierdo & el subarbol derec-o del arbol A respecti(amente*

    A%ui -emos (uelto a llamar a la funcion llenarBodos pero a-ora le en(iamos como parametro a sus nodos -i"os* En

    caso de %ue estos sean -o"as se retornara su (alor almacenado#se sumaran & se guardara en la rai'* i esto no es cierto

    se seguiran -aciendo llamadas a la misma funcion -asta encontrar un nodo -o"a*

    int llenarBodos:ree arbol4

    if:nodereeIseaf:arbol44

    return integerDet:nodereeDetalue:arbol44KPP(alue es un generico por eso debe etraerse el entero

    %ue almacena

    Lelse

    int sumallenarBodos:nodereeDeteft:arbol44 M llenarBodos:nodereeDeteft:arbol44K

    nodereeetalue :arbol # integerBeQ:suma44Kreturn sumaK

    L

    L

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    18/27

    @itter mantiene por cada usuario una lista con sus mensa;es ordenados en forma cronológica* del más reciente al

    más antiguo. )i un usuario quiere seguir a otro En otro -eap# &a %ue eso es lo %ue sugiere el

    problema# este ultimo -eap es el %ue (amos a retornar*

    Código!

    HeapNobtenerRensa"e:istNeguidosST#int n4

      istNlistaK

      int acumular0#i#"K

      Heap Nordenar#Nmensa"esK  BodeistNpK

      for:i0KinKiMM4

      listaeguidosSiTK

      if:listDeti'e:lista4=104

      acumularacumularM10K

      Lelse

      acumularacumularMlistDeti'e:lista4K

      L

      L

      ordenar-eapBeQ:acumular#!E/#time/mp4K

      mensa"es-eapBeQ:10#!E/#time/mp4K

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    19/27

      for:i0KinKiMM4

      listaeguidosSiTK

      for:plistDetHeader:lista4KpBUKpnodeistDetBet:p44

      if:"104

      -eapEnVueue:ordenar#nodeistDet/ont:p44K

      "MMK

      Lelse  breaFK

      L

      L

      L

     

    for:i0Ki10KiMM4

      -eapEnVueue:mensa"es#-eap!eVueue:ordenar44K

      L

      return mensa"esK

    L

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    20/27

    %n quad-tree es un @'A que se usa en informática gráfica para representar figuras planas en blanco y negro. "s un

    árbol en cual los nodos 0o;a pueden representar un blanco o un negro y los nodos internos no representan ning7n

    color* pero siempre tienen eactamente 2 0i;os. Asumiendo que la figura esta en un plano* el árbol se construye a

    partir de la figura con los siguientes pasos!

    1.- 'i+idir el plano en 2 cuadrantes.

    &.- e+isar cada cuadrante en el sentido del relo;!

    - )i el cuadrante esta lleno de blancos* corresponde a una 0o;a blanca en el árbol.

    - )i el cuadrante esta lleno de negros* corresponde a una 0o;a negra en el árbol.

    - )i el cuadrante esta parcialmente blanco y negro corresponde a un nodo interno. Aplicar el mismo algoritmo pero

    para un plano que equi+alga al cuadrante que se esta re+isando.

    "l tipo de Figura puede ser una matri de @ o F de dimensiones & & *donde es la altura del quad-tree menos uno.

    ";emplo!

    Figura

    >uad-@ree que representa la figura

    a'efinir la estructura para representar un quad-tree

    b#mplemente una función que determine la altura del quad-tree.

    c#mplemente un procedimiento que dada una figura genere el correspondiente quad-tree.

    d#mplemente un procedimiento que dado un quad-tree genere la figura correspondiente.

    )olución!

    a4 amos a -acer un repaso de todas las caracter)sticas rele(antes %ue describen a un Vuad6tree* En este tipo de $rboltenemos %ue los nodos -o"as pueden tener asociados un color :Clanco o Begro4 & en cambio los nodos internos no

    tienen ning9n color en particular* Ademas un nodo puede tener cero -i"os :nodos -o"as4 o eactamente cuatro -i"os

    :nodos internos4*

    amos a definir una enumeraci,n /olor %ue puede ser CAB/O#BED.O# o BIBDUBO* Un nodo posee un /olor en

    particular & un con"unto de -i"os %ue a su (e' son nodos tambin* Obser(e la definici,n recursi(a t)pica en los arboles*

    ara saber si un nodo es -o"a o es interno basta con saber el tipo de color %ue posee* Este nodo %ue acabamos de

    describir sera el !A Vuad6tree*

    b4 A-ora (amos a detallar como encontraremos la altura de este nue(o tipo de $rbol* a altura de un $rbol es el

    numero de nodos %ue eiste desde la ra)' -asta la -o"a mas profunda del $rbol*

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    21/27

    Usaremos una (e' mas la recursion# di(idiremos el problema en subproblemas del mismo tipo pero con menor

    tama+o# resol(eremos estos subproblemas & combinaremos esas soluciones para encontrar la soluci,n final al

    problema original*

    ara encontrar la altura de un $rbol con n -i"os lo %ue -aremos es encontrar la m$ima altura entre todos los n6

    subarboles & sumarle el nodo ra)'* ara encontrar la altura de un subarbol se -ar$ eactamente lo mismo & as) 

    sucesi(amente*

    upongamos %ue tenemos un %uad6tree %ue llamaremos V de altura -* V tiene cuatro -i"os % 1#%2#%3#%? %ue son a su(e' %uad6trees*

    !efinamos tambin la funci,n maimo:-1#-2#-3#-?4 %ue recibe cuatro enteros positi(os & retorna el ma&or entre ellos*

    odos estaremos de acuerdo si decimos %ue -altura:V4 1M maimo:altura:%1 4#altura:%2 4altura:%3 4#altura:%? 44

    Obser(e %ue se reali'an (arias llamadas recursi(as# cuando estas retornen con sus respecti(os resultados & la funci,n

    maimo -aga su traba"o# obtendremos la altura de V*

    amos a bos%ue"ar como se reali'an estas llamadas* rimero se necesita saber el (alor de altura:% 1 4* Bote %ue %1 es

    tambin un %uad6tree# asumamos %ue es un nodo interno & %ue tiene como -i"os a % 11#%12#%13#%1? entonces tambin

    podemos afirmar %ue altura:%14 1M maimo:altura:%114#altura:%124#altura:%134#altura:%1?44 *

    abemos bien %ue %11 es un %uad6tree# a-ora supongamos %ue es un nodo -o"a# la altura de un $rbol %ue posee un

    solo nodo es uno# es a%u) donde -abremos definido nuestro caso base# %ue es necesario para el fin de la recursion*

    El estado de nuestra epresi,n una (e' %ue se conocio el (alor de la altura de % 11 seria

    altura:%14 1M maimo: 1 #altura:%124#altura:%134#altura:%1?44 *

    A-ora se necesita saber la altura de %12 & asi sucesi(amente para los -i"os restantes*

    uego de %ue se -a&an calculado las respecti(as alturas nuestra epresion seria

    altura:%14 1M maimo: 1 #i # "# F4 # donde i#"#F representan la altura de los %uad6tree -i"os en cuesti,n# no entraremos

    en detalle de como se calculan puesto %ue es el mismo proceso %ue &a -emos descrito si son -o"as su altura es uno

    sino sera 1M altura maima entre sus %uad6tree -i"os*

    A-ora la funci,n maimo &a puede -acer su traba"o & encontrara el ma&or (alor entre 1#i#"#F* uego se sumara este

    resultado con uno & -abremos encontrado la altura de %1*

    uego se necesita saber el (alor de altura:% 24# & como &a -emos dic-o este proceso sera igual al %ue usamos para

    encontrar la altura de %1 & asi sucesi(amente para los %uad6tree -i"os restantes# luego de obtener esos resultadosparciales# la funci,n maimo -ace su tarea# se suma uno al resultado & obtenemos la altura de V*

    Es importante %ue usted pruebe este algoritmo con el %uad6tree de prueba %ue nos presenta el problema# o con

    cual%uier otro $rbol en particular# para %ue se pueda transparentar & entender de me"or manera como funciona la

    recursion*

    c4 ara contestar el resto de literales (amos a presentar dos !AWs adicionales %ue nos ser$n de gran a&uda*

    !A oint %ue representa un par de enteros inicial & final*

    !A !imension %ue posee dos instancias del !A oint fila & columna* Este tipo de dato nos ser(ir$ para almacenar la

    informaci,n de un cuadrante# es decir los indices iniciales & finales de las filas & las columnas*

    a parte cla(e para resol(er este problema es entender como se (a ir formando el %uad6tree a partir de la imagen# lo

    detallaremos a continuaci,n

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    22/27

    rimero supongamos %ue tenemos la siguiente figura

    Es mu& similar a la del e"emplo solo con la diferencia de %ue esta figura es una matri' de Clancos & Begros de 2 F2F

    donde F es cual%uier entero positi(o*

    A-ora el proceso de di(isi,n de la matri' en cuatro cuadrantes (a mas o menos as)

    /uadrante uno filaXinicial0#filaXfinal2F61K columnaXinicial0 columnaXfinal 2F61

    /uadrante dos filaXinicial0#filaXfinal2F61K columnaXinicial2F61 M1 columnaXfinal 2F

    /uadrante tres filaXinicial2F61M1# filaXfinal2FK columnaXinicial2F61 M1 columnaXfinal 2F

    /uadrante cuatro filaXinicial2F61M1# filaXfinal2F K columnaXinicial0 columnaXfinal 2F61

    /ada uno de estos cuadrantes ser$n anali'ados con el siguiente criterio si el cuadrante esta lleno de blancos se creara

    una -o"a dentro del %uad6tree con color CAB/O# si el cuadrante esta lleno de negros se creara una -o"a dentro del%uad6tree con color BED.O# si el cuadrante tiene combinaci,n de blancos & negros entonces se crear un %uad6tree con

    color BIBDUBO %ue tendr$ eactamente cuatro -i"os# & es a%u) en donde se (uel(e a di(idir la figura# en este caso el

    cuadrante en an$lisis es di(ido en cuatro planos de dimensiones de 2F622F62 cada uno# as) sucesi(amente* Obser(e %ue

    las di(isiones pararan cuando encontremos planos totalmente blancos o negros & tambin cuando tengamos planos de

    2020*

    /omo conclusi,n los problemas a resol(er a%u) son conocer como ir di(idiendo los cuadrantes sucesi(amente & como

    determinar el tipo de cuadrante %ue esta en an$lisis*

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    23/27

    Hablemos mas en detalle

    amos a implementar el procedimiento (oid generarVuadree:/olor NNfigura# VuadreeNarbol# int filasXini# int colXini#

    int filasXma# int colXma4 %ue recibe una matri' %ue es la representaci,n de la figura# recibimos tambin la ra)' del

    %uad6tree & cuatro enteros %ue nos indica los rangos de las filas & las columnas de la matri'* En un principio las filas (an

    de 0 a 2F & las columnas de 0 a 2F * !onde F es un entero positi(o cual%uiera como &a lo -emos dic-o*

    amos a definir los cuadrantes como un con"unto de cuatro instancias del !A !imension# recapitulando cada

    dimensi,n almacena cuatro elementos importantes los indices fila inicial#fila final# columna inicial & columna final*Antes de seguir eplicando el procedimiento generarVuadree primero eplicaremos el funcionamiento de otras

    funciones %ue usaremos para resol(er el problema de forma mas sencilla*

    a funci,n (oid asignar!imensiones:!imensionNcuadrantesST# int filasXini# int colXini# int filasXma# int colXma4 tiene

    como ob"eti(o llenar el arreglo cuadrantes con las dimensiones correspondientes# es decir se encargara de Ydi(idirZ la

    figura en cuatro partes seg9n el caso# tome muc-a atenci,n a la implementaci,n %ue se presenta a%u)*

    a funci,n /olor tipo/uadrante:/olor NNfigura# !imension Ncuadrante4 es la encargada de re(isar la matri' figura

    entre las dimensiones especificadas en la (ariable cuadrante* .ecuerde %ue un cuadrante puede estar lleno de

    blancos#negros o una combinaci,n entre esos dos colores* Obser(e %ue la (ariable cuadrante almacena solo los indices

    %ue necesitamos para anali'ar la matri' de Clancos & Begros# es decir por e"emplo si recibimos la figura %ue acabamos

    de mostrar & recibimos el cuadrante dos# entonces se anali'ara la imagen entre las filas 0 -asta 2F & entre las columnas

    2F61M1 -asta 2F*

    ol(amos al procedimiento generarVuadree .ecibimos la ra)' del $rbol# %ue sera un nodo de color BIBDUBO & con

    cuatro nodos -i"os %ue no sabemos de %ue tipo ser$n &a %ue eso depender$ de la figura* El con"unto de cuadrantes

    sera un arreglo de dimensiones %ue se iniciali'ara con la funci,n asignar!imensiones %ue mencionamos

    anteriormente*

    uego se ira iterando el con"unto de %uad6tree -i"os para determinar# en funci,n de la imagen & el cuadrante

    correspondiente# %ue tipo de nodo es* amos a determinar el tipo de cuadrante con la funci,n tipo/uadrante %ue

    describimos anteriormente*

    e empie'a con el primer cuadrante & el primer -i"o del %uad6tree* i la funci,n tipo/uadrante retorna

    6 CAB/O el primer -i"o sera de color CAB/O & se iniciali'a con cero -i"os*

    6 BED.O el primer -i"o sera de color BED.O & se iniciali'a con cero -i"os*6 BIBDUBO el primer -i"o sera de color BIBDUBO & se iniciali'a con cuatro -i"os* A-ora se necesita di(idir el primer

    cuadrante & conocer el tipo de nodos correspondientes a los -i"os del primer -i"o* ara eso se (ol(er$ a llamar a la

    funci,n generarVuadree# pero en cambio la ra)' a-ora sera el primer -i"o# se en(iara la misma figura# pero las

    dimensiones de an$lisis cambiaran# estos datos los almacena el primer cuadrante* Obser(e %ue este tambin es un

    proceso recursi(o* /uando se -a&a completado de construir este sub6%uad6tree se podr$ seguir iterando con el

    segundo -i"o & el segundo cuadrante# luego el tercer -i"o & el tercer cuadrante# despus el cuarto -i"o & cuarto

    cuadrante# con esto terminamos de construir el $rbol original*

    Bue(amente# se anima a %ue se realice una prueba de escritorio con el algoritmo %ue -emos descrito para %ue se

    pueda entender en su totalidad*

    El ultimo procedimiento %ue nos piden implementar es (oid generarigura:/olorNNfigura# VuadreeNarbol# int

    filasXini#int filasXma# int colXini#int colXma4 %ue recibe una matri' (ac)a# las dimensiones de la matri' & la ra)' de un%uad6tree %ue representa a una figura*

    Haremos un proceso mu& similar al de la funci,n anterior* endremos un con"unto de cuadrantes %ue se formaran de

    las misma forma %ue &a se eplico* amos a iterar los -i"os del nodo ra)' %ue recibimos por par$metro & el con"unto de

    cuadrantes*

    e empie'a con el primer -i"o & con el primer cuadrante* i el primer -i"o es de color

    6CAB/O el primer -i"o representa un cuadrante lleno de blancos En este caso el primero*

    uego# llenamos la figura con el color CAB/O entre las dimensiones definidas en el cuadrante*

    6BED.O el primer -i"o representa un cuadrante lleno de negros En este caso el primero*

    uego# llenamos la figura con el color BED.O entre las dimensiones definidas en el cuadrante*

    6BIBDUBO significa %ue el primer -i"o representa un cuadrante lleno de blancos & negros* Esto %uiere decir %ue se

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    24/27

    necesita anali'ar este cuadrante & los -i"os del primer -i"o* o %ue -aremos es (ol(er a llamar a la funci,n

    generarigura# en(i$ndole las nue(as dimensiones de an$lisis :las del primer cuadrante4* uego de resol(er este

    subproblema seguimos anali'ando el segundo -i"o & el segundo cuadrante# despus el tercer -i"o & el tercer cuadrante#

    & por ultimo el cuarto -i"o & el cuarto cuadrante* Obser(e %ue en cada an$lisis se pueden reali'ar (arias llamadas

    recursi(as* Bue(amente se aconse"a %ue realice una prueba siguiendo cada paso de la soluci,n# es la 9nica forma de

    terminar de entender por completo como funciona la recursion*

    resentamos un pe%ue+o programa para probar los procedimientos %ue -emos dise+ado* rimero se genera la figuradel e"emplo %ue nos muestra la descripci,n# en base a ella construimos un %uad6tree* ambin se calcula la altura del

    %uad6tree & se muestra por pantalla* uego se declara una matri' de colores de 2 F2F donde F es el ni(el del %uadtree

    %ue es calculado restando la altura del $rbol con uno* e iniciali'a la matri' con el color BIBDUBO* Esta figura sera

    llenada en funci,n del $rbol %ue generamos anteriormente*

    Código!

    t&pedef enum /olor

      BED.O# CAB/O# BIBDUBO

    L /olorK

    t&pedef struct Vuadree

      /olor colorK

      struct Vuadree NN-i"osK

    L VuadreeK

    t&pedef struct

      int inicial# finalK

    L ointK

    t&pedef struct

      oint Nfila# NcolumnaKL !imensionK

    VuadreeN%uadreeBeQ:/olor color4

      Vuadree Narbol malloc:si'eof :Vuadree44K

      arbol6=color colorK

      if :color BIBDUBO4

      arbol6=-i"os malloc:si'eof :VuadreeN4N?4K

      L else

      arbol6=-i"os BUK

      L

      return arbolKL

    !imensionNdimensionBeQ:ointNfila# ointNcolumna4

      !imensionNdimension malloc:si'eof :!imension44K

      dimension6=fila filaK

      dimension6=columna columnaK

      return dimensionK

    L

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    25/27

    oint NpointBeQ:int inicial# int final4

      ointNp malloc:si'eof :oint44K

      p6=inicial inicialK

      p6=final finalK

      return pK

    L

    /olorNNfiguraBeQ:int dimension# /olor color4 PPgenera una matri' de colores de dimensiondimension

    int i# "K

      /olorNNfiguraK

      figura malloc:si'eof :/olorN4 N dimension4K

      for :i 0K i dimensionK iMM4

      figuraSiT malloc:si'eof :/olor4 N dimension4K

      L

      for :i 0K i dimensionK iMM4

      for :" 0K " dimensionK "MM4

      figuraSiTS"T colorK

      L

      L

      return figuraK

    L

    int alturaVuadree:Vuadree Narbol4

      if :arbol6=color CAB/O [[ arbol6=color BED.O4

      return 1K

      L else

      return 1 M maimo:alturaVuadree:arbol6=-i"osS0T4# alturaVuadree:arbol6=-i"osS1T4#

      alturaVuadree:arbol6=-i"osS2T4# alturaVuadree:arbol6=-i"osS3T44K  L

    L

    int maimo:int Q# int # int int '4

      int ma# i# arra&S?TK

      arra&S0T QK

      arra&S1T K

      arra&S2T &K

      arra&S3T 'K

      ma arra&S0TK

      for :i 1K i ?K iMM4

      if :ma arra&SiT4

      ma arra&SiTK

      L

      L

      return maK

    L

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    26/27

    (oid asignar!imensiones:!imensionNcuadrantesST# int filasXini# int colXini# int filasXma# int colXma4

      cuadrantesS0T dimensionBeQ:pointBeQ:filasXini# filasXini M :filasXma 6 filasXini4 P 24#

    pointBeQ:colXini# colXini M :colXma 6 colXini4 P 244K

      cuadrantesS1T dimensionBeQ:pointBeQ:filasXini# filasXini M :filasXma 6 filasXini4 P 24#

    pointBeQ:colXini M :colXma 6 colXini4 P 2 M 1# colXma44K  cuadrantesS2T dimensionBeQ:pointBeQ:filasXini M :filasXma 6 filasXini4 P 2 M 1# filasXma4#

    pointBeQ:colXini M :colXma 6 colXini4 P 2 M 1# colXma44K

      cuadrantesS3T dimensionBeQ:pointBeQ:filasXini M :filasXma 6 filasXini4 P 2 M 1# filasXma4#

    pointBeQ:colXini# colXini M :colXma 6 colXini4 P 244K

    L

    /olor tipo/uadrante:/olor NNimagen# !imension Ndimension4

      ointNfila# NcolumnaK

      fila dimension6=filaK

      columna dimension6=columnaK

      int i# "K

      /olor colorK

      int flagK

      for :i fila6=inicialK i fila6=finalK iMM4

      for :" columna6=inicialK " columna6=finalK "MM4

      color imagenSi 6 1TS" 6 1TK

      sQitc- :color4

      case CAB/O

      if :flag 14

      return BIBDUBOK

      L  flag 0K

      breaFK

      case BED.O

      if :flag 04

      return BIBDUBOK

      L

      flag 1K

      breaFK

      L

      L

      L

      if :flag4

      return BED.OK

      L else

      return CAB/OK

      L

    L

    .odrigo /astro .e&es

    acultad de Ingenier)a Elctrica & /omputaci,n

  • 8/18/2019 Ejercicios_Resueltos_Arboles

    27/27

    (oid generarVuadree:/olor NNfigura# VuadreeNarbol# int filasXini# int colXini# int filasXma# int colXma4

      int iK

      !imension N cuadrantesS?TK

      asignar!imensiones:cuadrantes# filasXini# colXini# filasXma# colXma4K

      for :i 0K i ?K iMM4   sQitc- :tipo/uadrante:figura# cuadrantesSiT44

      case CAB/O

      arbol6=-i"osSiT %uadreeBeQ:CAB/O4K

      breaFK

      case BED.O

      arbol6=-i"osSiT %uadreeBeQ:BED.O4K

      breaFK

      case BIBDUBO

      arbol6=-i"osSiT %uadreeBeQ:BIBDUBO4K

      generarVuadree:figura# arbol6=-i"osSiT# cuadrantesSiT6=fila6=inicial# cuadrantesSiT6=columna6=inicial#

      cuadrantesSiT6=fila6=final# cuadrantesSiT6=columna6=final4K

      breaFK

      L

      L

    L

    (oid generarigura:/olorNNfigura# VuadreeNarbol# int filasXini# int filasXma# int colXini# int colXma4

      int i# "# FK

      Vuadree N-i"oK

      !imensionNdimK  ointNfila# NcolumnaK

      !imension N cuadrantesS?TK

      asignar!imensiones:cuadrantes# filasXini# filasXma# colXini# colXma4K

      for :i 0K i ?K iMM4

      -i"o arbol6=-i"osSiTK

      dim cuadrantesSiTK

      fila dim6=filaK

      columna dim6=columnaK

      if :-i"o6=color BIBDUBO4   for :" fila6=inicialK " fila6=finalK "MM4

      for :F columna6=inicialK F columna6=finalK FMM4

      figuraS"61TSF61T -i"o6=colorK

      L

      L

      L else

      generarigura:figura# -i"o# fila6=inicial# columna6=inicial# fila6=final# columna6=final4K

      L

      L

    L

    .odrigo /astro .e&es