Estructura de Datos : Busqueda Fibonacci


Definiciones

               R1   R2   R3             Ri                   Rk             Rn
         ...------------------.......--------.............--------.......--------...............--------....
             | K1 | K2 | K3 |         | Ki |               | Kk |         | Kn |                 |    |           n slots
         ...------------------.......--------.............--------.......--------...............--------....

                                      F(k-1)                F(k)                                 F(k+1)

             |<---------------------->|    |<--------------------------------->|
                  subarchivo menor                   subarchivo mayor


Funciones

SEQSRCH

Se busca, en un archivo secuencial G, con claves ordenadas en forma creciente, por un registro Ri, tal que Ki = K La variable n es la cantidad de registros del archivo. La variable K es la clave que se busca. La variable i es la unica clave de salida, e indicara 0, si no existe la clave K en el archivo, y la posicion del registro, si la clave K existe en el archivo. Se asume que F(k) + m = n + 1. O sea, m = n + 1 - F(k).

               1    2    3              q              p                  i                    r              n   n+1               s

               R1   R2   R3             Rq             Rp                 Ri                   Rk             Rn
         ...------------------.......--------.......--------...........--------.............--------.......--------..............--------.......
             | K1 | K2 | K3 |         | Kq |         | Kp |             | Ki |               | Kk |         | Kn |                |    |              n slots
         ...------------------.......--------.......--------...........--------.............--------.......--------..............--------.......


                                    q = F(k-3)     p = F(k-2)         i = F(k-1)            r =  F(k)                            s = F(k+1)

Interpretacion usando un arbol binario

Ejmeplo n = 33
        k = 8
        m = 33 + 1 - 21 = 13
        F(k)   = F(8) = 21
        F(k-1) = F(7) = 13
        F(k-2) = F(6) = 8
        F(k-3) = F(5) = 5
        F(k-4) = F(4) = 3
        F(k-5) = F(3) = 2
        F(k-6) = F(2) = 1
                                                          *---*
                                                          |2 1|                                                  Primera comparacion
                                                          *---*
                                                           | |
                                    +----------------------+ +----------------------+
                                    |                                               |
                                  *---*                                           *---*
                                  |1 3|                                           |2 9|                          Segunda comparacion
                                  *---*                                           *---*
                                   | |                                             | |
                        +----------+ +----------+                       +----------+ +----------+
                        |                       |                       |                       |
                      *---*                   *---*                   *---*                   *---*
                      | 8 |                   |1 8|                   |2 6|                   |3 2|              Tercera comparacion
                      *---*                   *---*                   *---*                   *---*
                       | |                     | |                     | |                     | |
                  +----+ +----+           +----+ +----+           +----+ +----+           +----+ +----+
                  |           |           |           |           |           |           |           |
                *---*       *---*       *---*       *---*       *---*       *---*       *---*       *---*
                | 5 |       |1 1|       |1 6|       |2 0|       |2 4|       |2 8|       |3 1|       |3 3|        Cuarta comparacion
                *---*       *---*       *---*       *---*       *---*       *---*       *---*       *---*
                 | |         | |         | |         |           | |         |           |
               +-+ +-+     +-+ +-+     +-+ +-+     +-+         +-+ +-+     +-+         +-+
               |     |     |     |     |     |     |           |     |     |           |
             *---* *---* *---* *---* *---* *---* *---*       *---* *---* *---*       *---*
             | 3 | | 7 | |1 0| |1 2| |1 5| |1 7| |1 9|       |2 3| |2 5| |2 7|       |3 0|                       Quinta comparacion
             *---* *---* *---* *---* *---* *---* *---*       *---* *---* *---*       *---*
              | |   |     |           |                       |
            +-+ 4 +-+   +-+         +-+                     +-+
            |     |     |           |                       |
          *---* *---* *---*       *---*                   *---*
          | 2 | | 6 | | 9 |       |1 4|                   |2 2|                                                  Sexta comparacion
          *---* *---* *---*       *---*                   *---*
           |
         +-+
         |
       *---*
       | 1 |                                                                                                     Septima comparacion
       *---*