IBD - PowerPoint by zT0ZIQ49

VIEWS: 0 PAGES: 55

									IBD

Clase 6
        Árboles
   Índices: problemas
     Indices grandes -> mem. secundaria
     Acceso a mem. secundaria -> lento
     Búsqueda binaria -> demasiados
      desplazamientos
            • En un índice de 1000 items se requieren 9.5
              (aprox.) desplazamientos en promedio
       Costo de mantener índice ordenado
            • Es necesario un método donde las
              reorganizaciones sean locales y no masivas
        2                     IBD - CLASE 6    UNLP - Facultad de Informática
    Arboles
   Arbol: Estructura de datos que permiten
    localizar en forma más rápida información de un
    archivo. (usando esta estructura para los indices)


   Tipos de árboles
     Binarios
     AVL
     Multicamino
     Balanceado (B, B*, B+)
    3                 IBD - CLASE 6    UNLP - Facultad de Informática
Arboles
       Estructura JERÁRQUICA no lineal
       Relaciones padre-hijo entre nodos
       Ejemplos: sistema de ficheros, estructura de un libro,
        diagrama de clases JAVA, diagrama organizativo...
                                           MiEmpresa


                       Ventas                           Producción              I+D


                 ES       Internacional           Portátiles   Sobremesa


              Europa            Asia             América

4                                IBD - CLASE 6                 UNLP - Facultad de Informática
    Arboles
   Un árbol se caracteriza por estar formado
    por una serie de nodos conectados por
    una serie de aristas que verifican que:
         hay un único nodo raíz
         cada nodo, excepto la raíz, tiene un
          único padre
         hay un único camino (desde la raíz
          hasta cada nodo)
    5                 IBD - CLASE 6   UNLP - Facultad de Informática
    Arboles
   Un árbol de tipo base T es:
     la estructura vacía, o
     un nodo de tipo T con un número finito de
      estructuras árbol de tipo base T disjuntas
      llamadas subárboles
         <arbol> ::= <<nulo>> | <nodo>
          <nodo> ::= <info> {<arbol>}

   Puede estar ordenado o no

     6                 IBD - CLASE 6   UNLP - Facultad de Informática
          Arboles: terminología básica

                                                                       A
Raíz: único nodo sin padre
Nodo interno: tiene al menos un hijo
Nodo hoja (externo): no tiene hijos                    B                             C          D
Descendiente directo: hijo
Descendientes: hijo, nieto...
Subárbol: árbol formado por un nodo            E           F                  G             H
y sus descendientes

                                                   I       J      K
                                                                             subárbol

          7                    IBD - CLASE 6                   UNLP - Facultad de Informática
    Arboles: terminología básica

   Grado de un nodo: número de descendientes directos

   Grado del árbol: mayor grado de sus nodos

   Árbol binario: árbol de grado 2
      Cada nodo tiene a lo sumo dos descendientes directos


   Árbol multicamino:
      Cada nodo puede tener n descendientes directos



   Lista= árbol degenerado de grado       1
    8                      IBD - CLASE 6       UNLP - Facultad de Informática
        Arboles: terminología básica

       Profundidad de un nodo: número de predecesores
       Altura del árbol: profundidad máxima de cualquier nodo

                        A


                                                    profundidad(A)=0
            B                   C        D
                                                    profundidad(H)=2
                                                    altura=3
    E           F           G       H



        I       J   K
        9                           IBD - CLASE 6           UNLP - Facultad de Informática
        Arboles: terminología básica

   Camino: existe un
    camino del nodo X al                                      A

    nodo Y, si existe una
    sucesión de nodos                           B                           C            D

    que permitan llegar
    desde X a Y.                        E           F                G             H



                                            I       J   K
    camino(A,K)={A,B,F,K}
    camino(C,K)={}

        10                  IBD - CLASE 6                   UNLP - Facultad de Informática
    Arboles: árbol binario
   Es un árbol de grado 2
   Cada nodo tiene de 0 a 2 descendientes directos:
    el hijo izquierdo y el derecho
                                                           A
    <arbol> ::= <<nulo>> | <nodo>
    <nodo> ::= <info> <izq> <der>
    <izq> ::= <arbol>                      B                             C
    <der> ::= <arbol>

                                       D           E             F                  G



                                               H       I
     11                IBD - CLASE 6               UNLP - Facultad de Informática
    Arboles: árbol binario
   Aplicación: expresiones aritméticas, árboles de
    decisión, búsqueda (ABB)
   En algunos casos se exige que el árbol sea completo =
    todo nodo interno tiene dos descendientes.

Árbol binario completo        Árbol binario no completo




    12                   IBD - CLASE 6         UNLP - Facultad de Informática
     Arboles: árbol binario
   Ejemplo: expresiones aritméticas
     nodo interno: operadores
     nodos hoja: operandos

                                                      +
    2*(a-1)+3*b
                                                                  

                             2              -               3            b

                                        a       1

    13              IBD - CLASE 6                   UNLP - Facultad de Informática
    Arboles: árbol binario
   Ejemplo de aplicación: árboles de decisión
        nodo interno: preguntas con respuesta si/no
        nodos hoja: decisiones
        ¿Dónde cenamos?

                      ¿Cómida rápida?
                 Sí                              No

          ¿Con café?                             ¿Cara?
         Sí            No                   Sí                 No

    Trattoría    McDonalds             Rodizio             Pizza hut
    14                      IBD - CLASE 6             UNLP - Facultad de Informática
     Arboles: árbol binario
    Ejemplo: dada una lista de claves ordenada

     AX CL DE FB FT HN JD KF NR PA RF SD TK
     WA YJ           KF

                     FB                                  SD

                                               PA                         WS
          CL              HN


AX             DE   FT         JD      NR           RF         TK                YS




     15                             IBD - CLASE 6             UNLP - Facultad de Informática
    Arboles: árbol binario
 Cada nodo es un registro de long. fija
 Cómo se almacena ?
     Archivo con reg. de long fija
     La informacion en el archivo no está
      físicamente ordenada
     Ver ejemplo del archivo para el árbol del
      slide anterior
     Costo de espacio (muchos campos vacios)


    16              IBD - CLASE 6   UNLP - Facultad de Informática
    Arboles: árbol binario
   Insertar las claves LV NP MB
                                     KF

                    FB                              SD
                                                                    WS
         CL             HN                   PA


    AX        DE   FT         JD        NR         RF    TK              YS


                               LV


                                          NP
                         MB

    17                             IBD - CLASE 6         UNLP - Facultad de Informática
Arboles: árbol binario

   Inserción
      Sólo ligar al nodo apropiado (no
       reorganizar)
      Para acceder al nodo MB son
       necesarios 7 accesos
      Para árboles con cientos de claves, se
       requieren más de 30 accesos.


    18             IBD - CLASE 6   UNLP - Facultad de Informática
      Arboles: árbol binario
   Arbol balanceado: la altura de la trayectoria más
    corta hacia una hoja no difiere de la altura de la
    trayectoria mas grande

   Inconveniente: los árboles binarios (como en el
    ejemplo) se desbalancean fácilmente -> búsquedas
    más costosas (mayor cantidad de desplazamientos)

   Solución: reorganizar los nodos del árbol a medida
    que se reciben las claves. Resultado: Arboles AVL

      19                  IBD - CLASE 6     UNLP - Facultad de Informática
 Arboles

 Tipos   de árboles
   Binarios
   AVL
   Multicamino
   Balanceado    (B, B*, B+)


 20               IBD - CLASE 6   UNLP - Facultad de Informática
    Arboles AVL
   Arbol binario balanceado en altura. La diferencia
    máx. de altura entre las alturas de cualquiera de
    2 subárboles que comparten raiz común es 1
        Se llama árbol balanceado en altura ó árbol BA(1)
        Las inserciones y eliminaciones se efectúan con
         un mínimo de accesos
        Miembro de una clase más gral. de árboles
         balanceados en altura BA(k): máx. diferencia de
         altura es k



    21                   IBD - CLASE 6    UNLP - Facultad de Informática
    Arboles AVL
   Garantizan un cierto nivel mínimo de desempeño
    de búsqueda.

   La estructura debe ser respetada -> al insertar
    nuevos nodos, se realizan rotaciones
    restringidas a un área local del árbol

   Como son árboles binarios, con muchos niveles
    son muy profundos.

    22                IBD - CLASE 6   UNLP - Facultad de Informática
    Arboles AVL

   En un árbol binario completamente
    balanceado, el peor caso de búsqueda para
    encontrar 1 clave (considerando N claves
    posibles) busca en log2(N+1) niveles del árbol

   En un árbol AVL el peor caso de búsqueda
    podría ser buscar en 1.44 log2(N+2) niveles del
    árbol


    23                IBD - CLASE 6   UNLP - Facultad de Informática
    Arboles AVL

   Para 1.000.000 claves, un árbol completamente
    balanceado requiere desplazamiento en 20 niveles para
    buscar alguna de las claves.

   En un árbol AVL el Nº máx. de niveles a buscar es 28

   Esto es bueno para almacenamiento en memoria principal

   En almacenamiento secundario es deseable a lo sumo
    5 o 6 desplazamientos, 20 o 28 es inaceptable.

    24                   IBD - CLASE 6      UNLP - Facultad de Informática
    Arboles
   Volviendo a los 2 problemas iniciales:
     La búsqueda binaria requiere demasiados
      desplazamientos
     Mantener un índice en orden es costoso


         Los árboles balanceados en altura
         proporcionan solución aceptable al
         segundo problema.

    25                 IBD - CLASE 6   UNLP - Facultad de Informática
    Arboles Binarios paginados
   Desplazarse en mem. secundaria tiene un costo
    de tiempo relativamente alto

   Aunque, una vez en posición, leer o escribir un
    conjunto de bytes continuos es rápido

   La combinación de : desplazamiento lento +
    transferencia rápida -> conduce a la idea de
    paginación

    26                IBD - CLASE 6   UNLP - Facultad de Informática
         Arboles Binarios paginados

   Al dividir un arbol binario en págs y después
    almacenar c/pág en bloques de localidad
    contiguas en disco  se puede reducir el Nº de
    desplazamientos para cualquier búsqueda.

   Paginación -> solución potencial al problema
    de búsqueda.



    27               IBD - CLASE 6   UNLP - Facultad de Informática
    Arboles Binarios paginados

   Estrategia:
        Dividir el árbol binario en páginas
        Almacenar cada página en un bloque de
         direcciones contiguas en disco
        Ver ejemplo (posibilidad de acceder a 63
         nodos con sólo 2 accesos a disco)

   Dividir el árbol en páginas permite búsquedas
    más rápidas en almacenamiento secundario.

    28                  IBD - CLASE 6   UNLP - Facultad de Informática
    Arboles Binarios paginados

   Ejemplo:

        Suposición de árbol completamente balanceado

        Páginas de 8 Kb -> 511 claves por pág.

        Para buscar cualquiera de 134.217.727 claves se
         requieren sólo 3 desplazamientos.



    29                   IBD - CLASE 6    UNLP - Facultad de Informática
    Arboles Binarios paginados
   Ejemplo:

        Pero caso de búsqueda en un árbol binario
         balanceado: log2 (N+1), N: cantidad de claves

        Para las versiones paginadas del mismo árbol:
         logk+1(N+1), N: cantidad de claves, k: cant. claves
         por pág.

    Comparación
     log2 (134.217.727 +1) = 27 desplazamientos
     log511+1(134.217.727 +1)= 3 desplazamientos
    30                    IBD - CLASE 6     UNLP - Facultad de Informática
    Arboles Binarios paginados
   Uso de páginas grandes:
        Cada acceso a una página requiere transmitir muchos
         datos, la mayoría no usados.
        Hay tiempo de transmisión adicional, pero se ahorran
         muchos desplazamientos que consumen más tiempo que
         las retransmisiones.

   Problemas:
        Cómo construirlo ?
        Cómo elegir la raiz ?
        Cómo mantenerlo balanceado ?
        La idea de agrupar claves en páginas es MB, pero no se ha
         encontrado forma de agrupar las claves correctamente


    31                      IBD - CLASE 6       UNLP - Facultad de Informática
 Arboles

 Tipos   de árboles
   Binarios
   AVL
   Multicamino
   Balanceado   (B, B*, B+)


 32              IBD - CLASE 6   UNLP - Facultad de Informática
    Arboles Multicamino
   Árboles n-arios o Multicamino:
        Árbol en el que cualquier nodo puede tener
         cualquier número de hijos
                 
        Árboles con grado  2




    33                   IBD - CLASE 6    UNLP - Facultad de Informática
     Arboles Multicamino
   Implementación 1
         Hijos como arreglo de referencias
         Desaprovecha memoria si el número de hijos es
          muy variable
         No puede usarse si el número de hijos es ilimitado
                             A
                                 ...
               B             C                       D              E
                   ...           ...                     ...            ...
                   F             G
                       ...           ...
                                     H                    I              J
                                         ...                  ...            ...
     34                              IBD - CLASE 6                  UNLP - Facultad de Informática
    Arboles Multicamino

A   hijos
                 B   hijos
                                                                    Implementación 2
         siguiente
                                                                        Hijos como una lista
                 C   hijos       F       hijos

                        siguiente
                                                                         enlazada
         siguiente

                 D   hijos
                                     G        hijos


         siguiente

                 E   hijos       H       hijos

                        siguiente

                                     I       hijos


                             siguiente

                                         J       hijos




    35                                           IBD - CLASE 6               UNLP - Facultad de Informática
   Arboles

 Tipos   de árboles
   Binarios
   AVL
   Multicamino
   Balanceado    (B, B*, B+)


  36              IBD - CLASE 6   UNLP - Facultad de Informática
    Arboles B
   Hasta ahora, se han construido árboles
    desde la raiz hacia abajo.
     Problemas:
         • Elegir la raiz
         • Mantenerlo balanceado

   Arboles B  construirlos hacia arriba a
    partir de la base. La raiz emerge con la
    construcción.
    37               IBD - CLASE 6   UNLP - Facultad de Informática
Árboles B


    Árboles B (balanceados)
        Son árboles multicamino con una
         construcción especial en forma
         ascendente que permite mantenerlo
         balanceado a bajo costo.



38                  IBD - CLASE 6   UNLP - Facultad de Informática
     Arboles B
   Propiedades de un árbol B de orden M:
        Orden: cant. máx. de punteros por nodo
        Cant. de punteros= cant. claves + 1
        Ningún nodo tiene más de M hijos
        C/nodo (menos raíz y los terminales) tienen como mínimo [M/2]
         hijos
        La raíz tiene como mínimo 2 hijos (o sino ninguno)
        Todos los nodos terminales a igual nivel
        Nodos no terminales con K hijos contienen K-1 nodos. Los nodos
         terminales tienen:
          • Minimo: [M/2]–1 nodos
          • Máximo: M–1 nodos
        Formato del nodo

     PO R1 P1 R2 P2 R3 P3 R4 P4                     R5   P5   Nro de registros

        Cada    Ri-1 < Ri < Ri+1


    39                              IBD - CLASE 6               UNLP - Facultad de Informática
    Arboles B

   Estructura
     Archivo con registros de long. Fija
     Cada registro tiene una pág. o nodo
    En Pascal (ver ejemplo):
      PaginaAB=record
       cant_claves: integer
       claves: array [1..maxllaves] of char;
       hijos: array [1..maxhijos] of integer;
      end
    40               IBD - CLASE 6   UNLP - Facultad de Informática
    Arboles B
   Definición: nodo adyacente hermano
        Dos nodos son adyacentes hermanos si tienen el
         mismo padre y son apuntados por punteros
         adyacentes en el padre.

   Operaciones
        Búsqueda
        Borrado
        Creación e inserción
        modificación
    41                   IBD - CLASE 6   UNLP - Facultad de Informática
     Arboles B
   Búsqueda de información
        Comienza desde el nodo raíz
          • Busca la llave en el nodo

          • Sino la localiza se toma el puntero correspondiente entre
            las claves existentes

          • Si no es puntero nulo se toma ese nodo y se repite
            desde principio. Si es un puntero nulo el elemento no se
            encuentra en el árbol.

          Ver ejemplos

    42                       IBD - CLASE 6        UNLP - Facultad de Informática
          Arboles B
   Algoritmo (iterativo)                    Algoritmo (recursivo)
encontro := false         (k llave)     ordem M estruc. del registro
tomar la raíz                             Record
                                             contador llaves
Repeat                                        llaves (arreglo M-1 elem.)
    N       nro de elementos nodo             hijos (arreglo M elem.)
                                          End
   Case                                 Function Busca (Nrr, llave,
                                                          NRR_encon, Pos-enc)
         k = llave del registro          Si Nrr = nulo
               encontro := true           entonces devuelve (‘no encon’)
                                          sino lee nodo apuntado x NRR en página
         k < llave( R1)                          busca la llave en nodo;
                                                 Pos:= Posición donde encuentra o debería estar
                P := Po                                 la llave
         k > llave (Rn)                          Si encontro llave
                                                    entonces nrr_encon := Nrr (nodo con la llave)
                P := Pn                                       pos_enc := pos (posición dentro de
         otherwise                                                      la llave)
                                                              devuelve (encontrada)
            P := Pi (i/ Ri-1 < k <Ri)               sino {busco en el nivel inferior}
                                                         devuelve (busca( hijo[pos], llave,
      EndCase                                                         nrr_encon, pos_enc))
      IF P not null then                         Fin S
                                          Fin S
         leer nodo apuntado por P       Fin Function
Until encontro or P null

         43                             IBD - CLASE 6                  UNLP - Facultad de Informática
    Arboles
   Performance
     • Orden M, # de nodos terminales N, N+1 punteros
       nulos.
     • Accesos:
        • Mejor caso: 1 lectura
        • Pero caso: h lecturas (con h altura del árbol)
     • Como acotamos h
        Nivel # mínimo de descendientes
         1                   2
         2                2 * [M/2]
         3        2 * [M/2] * [M/2]
        ………………………………………………….
         h           2 * [M/2]h-1


44                         IBD - CLASE 6           UNLP - Facultad de Informática
Arboles

     • Relacion entre h y # de nodos

         N+1 >= 2 * [M/2]h-1

          h <= 1 + log[M/2] ((N+1)/2)

         M = 512 y N = 1000000
             h <= 3.37 (4 lecturas encuentra un registro)




45                      IBD - CLASE 6     UNLP - Facultad de Informática
    Arboles B
   Inserción (creación)

        Comienza con una búsqueda que llega
         hasta el nivel hoja

        Después de encontrar lugar de inserción
         en el nivel hoja, el trabajo de inserción,
         división y promoción continúa en forma
         ascendente desde abajo

    46                  IBD - CLASE 6   UNLP - Facultad de Informática
     Arboles B

   Inserción (creación)
       Los registros se insertan en un nodo terminal

       Casos posibles
          • El registro tiene lugar en el nodo terminal (no se produce
            overflow): solo se hacen reacomodamientos internos en
            el nodo
          • El registro no tiene lugar en el nodo terminal (se produce
            overflow): el nodo se divide y los elementos se reparten
            entre los nodos, hay una promoción al nivel superior, y
            esta puede propagarse y generar una nueva raíz.
          • Ver ejemplos

     47                        IBD - CLASE 6         UNLP - Facultad de Informática
       Arboles B

   Algoritmo (iterativo)                         Repeat
{ reg.: reg a insertar                                  Si nodo no esta lleno
   fin: inserción finalizada                             entonces poner reg y
   encontro: elemento ya está P: puntero                            reordenar
     al nodo                                                        encontro
  N_G: nodo sobredimensionado                            sino copiar el nodo enN_G
  N : # reg }                                                 insertar reg. en N_G
{ busco la llave en el árbol }                                reg:= centro de N_G
If encontro                                                   nodo corr.:=1/2 N_G izq
   Then reportar llave repetida                               nodo nuevo:=1/2 N_G der
   Else { insertar elemento }                                 If nodo raiz nuevo
     P := nil                                                    then generar nuevos
     encontro := falso                                               punteros
                                                  Until encontro



      48                          IBD - CLASE 6                 UNLP - Facultad de Informática
         Arboles B
   Algoritmo (recursivo)
                                                     Si valordevuelto <> promocion
Funcion inserta (Nrr_Actual, llave,                     entonces devuelve(valordevuelto)
             hijo_promo, llave_promo)                   sino
Si Nrr_Actual = nulo                                      si hay espacio en pagina para llave_p_a
   entonces                                                 entonces insertar(llave_p_a, nrr_p_a
      llave_promo := llave                                                en pagina) promovida abajo
      hijo_promo := nulo                                              devuelve (no promocion)
      devuelve Promocion (promueve llave                     sino divide( llave_p_a, nrr_p_a,
     original                                                           pagina, llave_promo,
                            y nulo)                                    hijo_promo,
   sino                                                                página_nueva)
      leer página de Nrr_acutal en pagina                         escribe pagina en archivo en
      buscar llave en pagina                                                      nrr_actual
      pos := posicion donde deberia estar                         escribe pagina_nueva en
              en llave                                                            hijo_promo
      Si encuentra llave                                   devuelve promoción promociona
          entonces devuelve (error)                     Fin Si            llave_promo, hijo_promo

      valordevuelto := inserta(pagina,               fin funcion
         hijo[pos], llave, nrr_P_A, llave_P_a)

        49                                IBD - CLASE 6                  UNLP - Facultad de Informática
       Arboles B

Procedimiento Divide (llave_i, nrr_i, pagina, llave_promo,
  hijo_promo, pagina_nueva )
 copiar pagina + llave a un nodo que pueda contener a todas las llaves.
 insertar llave_i, nrr_i en los lugares correctos de la pagina
 crear una nueva pagina para pagina_nueva
 asignar a llave_promo el valor de la llave de enmedio de la pagina grande
 asignar a hijo_d_promo el nrr de pagina_nueva
 copiar las llaves y apuntadores que preceen a llave_promo en pagina
 idem posteriores pagina_nueva
fin procedemiento




       50                       IBD - CLASE 6         UNLP - Facultad de Informática
        Arboles B
   Performance
        Mejor caso (sin overflow)
             • H lecturas
             • 1 escritura

        Peor caso (overflow hasta la raíz, aumenta en uno el nivel
         del árbol)
             • H lecturas
             • 2h+1 escrituras (dos por nivel más la raíz)

        Estudios realizados
             • M = 10 25% divisiones
             • M = 100 2% divisiones


        51                          IBD - CLASE 6            UNLP - Facultad de Informática
    Arboles B

   Eliminación

        Mejor caso: borra un elemento del nodo y no produce
         underflow, solo reacomodos ( # elementos >= [M/2]-1

        Peor caso: se produce underflow, #elementos < [M/2] – 1

        Eliminar
          • Nodo terminal         Caso 1
          • Nodo no terminal (llevar a un nodo terminal)          Caso 2

        Dos soluciones
          • Redistribuir        Caso 3
          • Concatenar         Caso 4

    52                         IBD - CLASE 6           UNLP - Facultad de Informática
Arboles B
    Redistribuir
      • Cuando un nodo tiene underflow puede trasladarse
        claves de un nodo adyacente hermano (en caso que este
        tenga suficientes elementos)


    Concatenación
     Si un nodo adyacente hermano está al minimo (no
     le sobra ningún elemento, no se puede
     redistribuir), se concatena con un nodo adyacente
     disminuyendo el # de nodos (y en algunos casos la
     altura del árbol)

53                      IBD - CLASE 6      UNLP - Facultad de Informática
      Arboles B
   Algoritmo de eliminación
    (iterativo)                                            copiar ady y nodo actual en n_g
                                                                dividir n_g
                                                                promover nueva llave a padre
{ fin: indica fin del borrado
                                                                armar nodo actual y ady con la
  n_g:nodo tamaño mayor al normal
  ady: nodo adyacente hermano                                        mitad de n_g en c/u
  reg: reg. a borrar}                                           fin := true
{buscar reg en el árbol }                                  else {concatenar}
If reg no está en un nodo terminal                           elegir el mejor ady para concat.
   then buscar el sucesor de reg en un                       poner ady y nodo actual juntos y acoplarle
            nodo terminal                                      elemnto nodo padre
          intercalar reg con su sucesor                      eliminar nodo que sobra y producir
{ eliminación de reg }                                         enganches
fin := falso
                                                             nuevo reg elemento que bajo nodo padra y
repeat
   remover reg y el puntero asociado                           que debemos eliminar
   If nodo corriente > [M/2] -1 elem.                     Until fin
      then fin := true                                    IF no hay registro en la raiz
      else if es posible redistribuir                       then nueva raiz nodo corriente
         then {redistribuir}{ady.>min.}                            liberar vieja raíz

      54                                  IBD - CLASE 6                    UNLP - Facultad de Informática
    Arboles

   Performance

        Mejor caso (borra de un nodo terminal)
          • H lecturas
          • 1 escritura (escribir el nodo sin el elem. borrado)


        Peor caso (concatenación lleva a decrementar el
         nivel del árbol en 1)
          • 2h – 1 lecturas
          • H + 1 escrituras

    55                         IBD - CLASE 6       UNLP - Facultad de Informática

								
To top