Está en la página 1de 47

Temas Sele

tos de
Estru turas de Datos
Jorge L. Ortega Arjona
Departamento de Matem ati as
Fa ultad de Cien ias, UNAM

Febrero 2004
2

Indi e general


1. Arboles de B
usqueda
Re orrido y Mantenimiento 7

2. Ordenamiento Se uen ial


Un Lmite Inferior de Velo idad 15

3. Alma enamiento por Hashing


La Clave esta en la Dire ion 19

4. Compresi
on de Texto
Codi a ion Hu man 27

5. B
usqueda de Cadenas
El Algoritmo Boyer-Moore 33

6. Bases de Datos Rela ionales


Consultas \Hagalo Usted Mismo" 39

3
4
Prefa io

Los Temas Sele tos de Estru turas de Datos introdu en en forma simple
y sen illa a algunos temas relevantes de Estru turas de Datos. No tiene
la inten ion de substituir a los diversos libros y publi a iones formales en
el area, ni ubrir por ompleto los ursos rela ionados, sino mas bien, su
objetivo es exponer brevemente y guiar al estudiante a traves de los temas
que por su relevan ia se onsideran esen iales para el ono imiento basi o
de esta area, desde una perspe tiva del estudio de la Computa ion.

Los temas prin ipales que se in luyen en estas notas son: Arboles de
Busqueda, Ordenamiento Se uen ial, Alma enamiento por Hashing, Com-
presion de Texto, Busqueda de Cadenas y Bases de Datos Rela ionales.
Estos temas se exponen ha iendo enfasis en los elementos que el estudiante
(parti ularmente el estudiante de Computa ion) debe aprender en las asig-
naturas que se imparten omo parte de la Li en iatura en Cien ias de la
Computa ion, Fa ultad de Cien ias, UNAM.

Jorge L. Ortega Arjona


Febrero 2004

5
6
Cap
tulo 1


Arboles de B
usqueda
Re orrido y Mantenimiento
Un arbol es una de las estru turas de datos mas utiles que se han on-
ebido en programa ion de sistemas. Consiste en un onjunto de nodos or-
ganizados que alma enan algun tipo de dato. Ciertamente, existen mu hos
algoritmos para la busqueda y manipula ion de los datos alma enados en
arboles. Este aptulo des ribe omo se onstruyen los arboles, un algoritmo
de busqueda de datos en el arbol, algunos esquemas de re orrer el arbol, y
una te ni a de mantener (a~nadiendo o borrando) los datos del arbol.
El uso de nodos y apuntadores es fundamental para la onstru ion de
arboles de busqueda. Un nodo no es mas que una ole ion de lo alidades
de memoria aso iadas en onjunto por un programa. Cada nodo tiene un
nombre que, ya sea dire ta o indire tamente, se re ere a la dire ion de una
de sus lo alidades de memoria. Esta ultima normalmente tiene un ontenido,
que es el elemento a ser alma enado en el nodo. Ademas, in luye ero, uno
o dos (y a ve es mas) apuntadores o ligas. Estos apuntadores no son mas
que los nombres de otros nodos en el arbol. Los programas que usan arboles
de busqueda tienen la op ion de pasar de un nodo a otro seguiendo tales
apuntadores.
Con eptualmente, un arbol de busqueda se representa por ajas y e has
( gura 1.1). Cada aja representa un nodo, y ada e ha representa un
apuntador. Cada nodo en el diagrama onsiste de ampos (espa ios donde
puede alma enarse un dato o apuntador), que en este aso, son un ampo
de datos y dos ampos de apuntadores.

7
37

29 0 51

5 0 −80 0 0 6

17 0 0 42 0 0 9 0 0

Figura 1.1: Un arbol de busqueda on nueve nodos

Un arbol puede dire tamente implementarse en memoria prin ipal me-


diante un programa a nivel ensamblador, o puede implementarse en forma
de arreglo en un programa de alto nivel. La gura 1.2 ilustra ambas posibil-
idades para el arbol anterior.

Elemento izquierda derecha

1 1 1
2 2 2
101 −80 nil nil
3 37 3 4 3 5
102 29 106 nil
103 4 29 4 11 4 nil
104 42 nil nil 5 51 5 10 5 7
105 37 102 110 6 6 6
106 5 nil 107
7 6 7 8 7 9
107 17 nil nil
8 42 8 8
108
9 9 9 nil 9 nil
109
10 −80 10 nil 10 nil
110 51 101 111
11 5 11 nil 11 13
111 6 104 112
12 12 12
112 9 nil nil
13 17 13 nil 13 nil
14 14 14
Directamente en memoria Como arreglo

Figura 1.2: Dos formas de programar un arbol de busqueda

8
No resulta dif il trazar en ambos diagramas los datos y apuntadores
de un nodo a otro; meramente, se ini ia en el nodo indi ado on la e ha
en ambos asos. En el primer aso, los tres ampos se alma enan en una
sola palabra en la dire ion de memoria 105. El ampo de datos ontiene
el valor 37, y los ampos de apuntador indi an respe tivamente los nodos
\hijos" izquierdo y dere ho de ese nodo. En este aso, el nodo hijo izquierdo
se en uentra en la dire ion 102, y el nodo hijo dere ho en la dire ion 110.
En la segunda representa ion, los ampos de datos y apuntadores se en uen-
tran alma enados en tres arreglos separados llamados Elemento, izquierda
y dere ha, respe tivamente. En este aso, los ampos son utilizados de la
misma manera que en el aso anterior. Los ampos de apuntador que no
apuntan a nada ontienen un valor \nil". Esto meramente signi a que se
usa un smbolo distinguible de valores (dire iones) validos para los apun-
tadores. Los espa ios en ambas representa iones se muestran para ha er
evidente que los arboles son onstruidos en formas que el programador no
siempre puede ontrolar.

Cuando los datos se alma enan en un arbol, fre uentemente es on el


proposito de a eder a elementos parti ulares rapidamente. Por ejemplo, si
los elementos que se alma enan tienen un orden en parti ular, omo puede
ser < (menor que), enton es la busqueda por elementos puede ha erse en
forma espe ialmente rapida si los nodos se ordenan de a uerdo a la siguiente
regla:

\En ada nodo, todos los elementos alma enados en su subarbol izquierdo
tienen un valor menor que el elemento alma enado en ese nodo; y todos los
elementos alma enados en el subarbol dere ho tienen un valor mayor que el
elementos alma enado en ese nodo" ( gura 1.3)

Un arbol de datos que satisfa e tal ondi ion se le ono e omo arbol de
busqueda binario. La gura 1.4 muestra un ejemplo en el que puede verse
que tan rapido puede ha erse una busqueda en arboles. En este aso, los
elementos son nombres, y el ordenamiento simplemente es alfabeti o.

Para bus ar en este arbol, se puede usar un algoritmo muy simple, que
toma omo entrada el \nombre", y su salida es s o no dependiendo si tal
nombre fue hallado en el arbol. Las nota iones item(node), left(node) y
right(node) se re eren, respe tivamente, al elemento, al apuntador izquierdo
y al apuntador dere ho de un nodo dado. El algoritmo omienza en el nodo
mas alto del arbol:

9
X

Todos Todos
los elementos los elementos
aqui son aqui son
<x >x

Figura 1.3: Un arbol de busqueda puede organizarse mediante un orden

Knuth

Cook Shannon

Church Hoare Michie Von Neumann

Chomsky Dijkstra McCarthy Turing

Codd Kleene Minsky Wiener

Figura 1.4: Utilizando nombres omo datos alma enados en un arbol

10
pro edure SEARCH
1. found false
2. node top
3. repeat

a) ifitem(node) = name
then print si; node nil; found true;
b ) if item(node) > name
then node right(node);
) if item(node) < name
then node left(node);
4. until node = nil;
5. if not found
then print no;
El pro edimiento SEARCH des iende nodo a nodo: si el nombre que se
bus a es \menor que" el nombre alma enado en tal nodo, el algoritmo toma
la rama izquierda; si el nombre que se bus a es \mayor que" el nombre alma-
enado en el nodo a tual, el algoritmo toma la rama dere ha. Finalmente,
si el nombre es en ontrado en un nodo, el algoritmo imprime s.
El i lo termina tan pronto omo node = nil. Esto su ede no solo uando
el nombre bus ado se en uentra, sino tambien uando el algoritmo trata de
des ender a traves de un apuntador nulo, es de ir, ha llegado al fondo del
arbol. Notese el uso de la variable logi a found, que a tua omo se~nal para
la prueba, al nal del algoritmo. Esta variable se ini ializa on un valor de
false, y solo ambia si la busqueda es exitosa.
Es notorio que el numero de itera iones en el i lo prin ipal de SEARCH
no es nun a mayor que el numero de niveles en el arbol. Ya que la antidad de
trabajo he ho dentro del i lo se limita a un numero onstante de pasos, es
posbile es ribir la omplejidad en el tiempo de busqueda limitado por O(l),
donde l es el numero de niveles en el arbol. Sin embargo, en un arbol de
busqueda binario on n nodos, y todos los nodos ex epto los mas profundos
teniendo dos hijos, el numero de niveles l esta dado por:

l = dlog2 ne

11
Esto permite es ribir la omplejidad en el tiempo de SEARCH omo O(log n)
en el aso general, al menos uando el arbol se en uentra \lleno" en el sentido
dado previamente.
Este tiempo de busqueda es ex esivamente rapido. Si en lugar de 15
de los mas famosos personajes en omputa ion se olo an mil millones de
nombres de quienes trabajan en omputa ion1 el tiempo de busqueda se
in rementara apenas de 4 pasos a solo 30.
Ahora bien, puede darse el aso de que se requiera listar todos los datos
alma enados en un arbol de busqueda. Un algoritmo que produ e tal lista
puede re orrer el arbol, es de ir, visitar ada nodo en alguno de varios orde-
namientos, el mas omun de los uales es el orden de \primero profundidad"
(depth- rst order) o preorden. Este modo de re orrido o visita se progra-
ma fa ilmente utilizando la re ursion. El algoritmo se mueve ha ia arriba
y abajo dentro del arbol siguiendo los apuntadores. La regla sen illa que
de ne su progreso requiere, por ejemplo, que ningun nodo a la dere ha de
un nodo dado sea visitado hasta que todos los nodos a la izquierda hayan
sido visitados.
pro edure DEP T H (x)
1. usex
2. ifleft(x) 6= nil
then DEP T H (left(x))

3. if right(x) 6= nil
then DEP T H (right(x))
program DEP T H (root)
El paso \use x" signi a aqu imprimir x o pro esarlo de alguna manera.
Si el pro edimiento no ha al anzado el fondo del arbol donde los apunta-
dores son nulos, enton es se llama a s mismo primero des endiendo por la
izquierda del nodo a tual, y luego por la dere ha. Obviamente, la llamada a
DEP T H on el nodo izquierdo omo argumento podra resultar inmediata-
mente en otra llamada igual, y as hasta llegar al fondo del arbol. De esta
forma, el algoritmo onsiste en una sola llamada a DEP T H on argumento
en el nodo raz (root) del arbol, lo que resulta en un barrido sistemati o de
izquierda a dere ha atraves de todos los nodos del arbol.
1
Lo ual sera su iente para onsiderar a todos quienes trabajamos en omputa ion

12
En mu has apli a iones, los arboles de busqueda binarios no se en uen-
tran jos de prin ipio a n, sino que pueden re er o empeque~ne erse omo
ualquier ar hivo de datos. Para insertar un nuevo elemento en un arbol de
busqueda ( gura 1.5), es tan solo ne esario modi ar levemente el algoritmo
de busqueda: tan pronto omo la busqueda por el elemento falla, obtengase
una dire ion nueva (no usada), y reempla ese el apuntador a nulo en ontra-
do on tal dire ion. En seguida se olo a el nuevo elemento en la dire ion,
y se rean dos apuntadores nulos, para formar entre los tres los ampos de
un nuevo nodo.

35 nil nil 35 nil

42 42 nil nil

Figura 1.5: A~nadiendo un nodo

Borrar un nodo resulta algo mas ompli ado. De nuevo, el algoritmo de


busqueda puede ser utilizado para lo alizar un elemento, pero la dire ion
del nodo que apunta ha ia el debe preservarse por el algoritmo de borrado.
En la segunda parte de la gura 1.6 un algoritmo de borrado se muestra en
opera ion.
Inspe ionando la gura 1.6, es notorio que el nodo onteniendo el valor
42 se remueve del arbol onjuntamente on sus dos apuntadores. Conse-
uentemente, otros dos apuntadores (mar ados on un asteris o) deben ser
re-arreglados. Esen ialmente, todo el subarbol dere ho dependiente del nodo
onteniendo el valor 42 se mueve ha ia arriba un nivel, mientras que todo
el subarbol izquierdo se ha deslizado ha ia abajo dos niveles hasta el primer
nodo disponible en la posi ion mas a la izquierda del primer subarbol. La
palabra \disponible" aqu se re ere a que el apuntador izquierdo del nodo
es nulo y es posible olo ar el segundo subarbol ah.

13
58 58
*
Borrar
42 47

35 47 46 54 nil nil

30 nil 36 46 nil 54 nil nil 35

*
30 nil 36

Figura 1.6: Borrando un nodo

14
Cap
tulo 2

Ordenamiento Se uen ial


Un Lmite Inferior de Velo idad
Ordenar es una tarea omputa ional on enormes impli a iones en el
omer io y la industria. Mu has de las omputadoras de uso omer ial e
industrial pasan una fra ion signi ativa de su tiempo ordenando listas.
De este modo, resulta muy pra ti o preguntarse: >Dada una lista de n el-
ementos, ual es la mnima antidad de tiempo que puede llevarle a una
omputadora ordenarla?
Un algoritmo ono ido omo mez la-ordenamiento (merge-sort) puede
lograr esta tarea en un tiempo O(n log n). Partiendo de esto, y onsiderando
una n lo su ientemente grande, es posible proponer una onstante posi-
tiva tal que el numero de pasos que requiere este algoritmo para ordenar n
elementos nun a es mayor que n log n. Esta antidad tiene tambien el orden
de magnitud orre to para ser un lmite inferior de el numero de pasos re-
querido, al menos uando la pregunta anterior se reformula ade uadamente.

Si la palabra \ordenarla" se restringe a signi ar que la omputadora


solo ompara dos elementos de la lista de n elementos en un momento dado,
enton es este lmite inferior no es dif il de demostrar. Sea la lista a ser
ordenada representada omo:

L = x1 ; x2 ; :::; x n

15
Considerese que la omputadora omienza omparando una x on unai

x , y ha e una de dos osas omo resultado de la ompara ion ( gura 2.1).


j

xi< xj xi> xj

L0 L1

Figura 2.1: De ision ini ial de un algoritmo de ordenamiento

Lo que se onsidera ha e la omputadora es alterar la lista L para on-


vertirla en L0 o L1 , dependiendo de la ompara ion. Por ejemplo, a partir
de L la omputadora puede inter ambiar x y x para rear L0 , o dejar x y
i j i

x en su posi ion original para rear L1 . De modo similar, la omputadora


j

puede ontinuar trabajando sobre L0 o L1 , apli ando pre isamente la mis-


ma observa ion. Continuando on este pro eso, resulta un arbol uyos nodos
mas bajos orresponden todos a una version ordenada de la lista ini ial.
Por ejemplo si L tiene solo tres elementos, la gura 2.2 muestra omo el
\arbol de de ision" podra ser.
Para entender la signi an ia de los nodos terminales, es util imaginarse
que ha e el algoritmo de ordenamiento on todas las n! posibles versiones de
listas de un onjunto de n elementos. Dadas dos de tales listas, supongase
que el algoritmo toma la misma rama para ambas listas en ada nivel del
arbol, de tal modo que se llega al mismo nodo terminal en ada aso. Cada
vez que el algoritmo de ordenamiento toma una de ision omo resultado
de una ompara ion, se realiza una permuta ion  de la version a tual de
la lista de entrada L. Mas aun, se realiza esta permuta ion en ualquier
lista que se tenga a tualmente. Por lo tanto, si dos versiones distintas de la
lista de un mismo onjunto terminan en el mismo nodo terminal, enton es
ambas listas han permutado de forma identi a. Pero esto signi a que a lo
mas, una de esta listas ha sido ordenada orre tamente. La uni a on lusion
que surge de todo esto es que si el algoritmo de ordenamiento se realiza
orre tamente, el arbol de de ision orrespondiente debe tener al menos n!
nodos terminales.

16
L

xi< xj xi> xj

L0 L1

L 00 L 01 L 10 L 11

L 000 L 001 L 010 L 011

Figura 2.2: Un arbol de de ision para una lista de tres elementos

Ahora bien, un arbol binario on m nodos terminales debe tener una


profundidad de al menos dlog me, y la profundidad (D) del arbol de de ision
debe satisfa er que:

D = dlog me
= log n(n 1)(n 2):::(n=2)
n
> log( ) 2 n=

2
n n
= log
2 2
= O(n log n)

Esto es tan solo otra forma de de ir que ualquier ompara ion para or-
denamiento que tome una lista de n elementos omo entrada debe realizar
al menos O(n log n) ompara iones en el peor de los asos. Cualquier algo-
ritmo que se reali e substan ialmente mejor que esto, en total, debe ha er
su de ision para ordenamiento en base a otro riterio, o debe ser apaz de
ha er las ompara iones en paralelo.

17
18
Cap
tulo 3

Alma enamiento por


Hashing
La Clave esta en la Dire ion
Hay prin ipalmente tres te ni as de alma enar y re obrar registros en
ar hivos grandes. La mas simple involu ra una busqueda se uen ial a traves
de los n registros, y requiere O(n) pasos para re obrar un registro parti ular.
Si los n registros estan espe ialmente ordenados o alma enados en un arbol,
enton es un registro puede re obrarse en O(log n) pasos (vesae el aptulo
1). Finalmente, si ierta informa ion de ada registro se utiliza para generar
una dire ion de memoria, enton es un registro puede re obrarse promedio
en O(1) pasos. Esta ultima te ni a, que es el tema de este aptulo, se le
ono e omo hashing.
Considerese un registro \tpi o" en un ar hivo, onsistente de una llave
y un dato, omo se muestra en el siguiente ejemplo:

3782-A:670-15 DURALL RADIAL, 87.50, STOCK 24

Aqu, la llave es 3782-A, y el dato onsiste de un tama~no y mar a de


llanta seguido por su pre io por unidad y numero de elementos en alma e-
namiento. Respe to a alma enar, bus ar y re obrar registros de ar hivos, es
su iente espe i ar omo manipular la llave; el dato se \a~nade" dada la
programa ion apropiada.
Transformar una llave (o hashing), en un sentido, es ortarla y usar solo
parte de ella. La parte usada dire tamente genera una dire ion de memoria,

19
Llave ASCII Direccion
TO 124117 17 05 BE
IT 111124 24 06 IF, OF
IS 111123 23 07
AS 101123 23 10
AT 101124 24 11
IF 111106 06
OF 117106 06
AM 101115 15 14
BE 102105 05 15 AM
DO 104117 17 16 AN
AN 101116 16 17 TO, DO, GO
GO 107117 17
SO 123117 17
23 AS, IS
24 IT, AT
25

Figura 3.1: Transforma ion de llaves en dgitos

omo se muestra en la gura 3.1, la ual usa palabras de dos letras en ingles
omo llaves.
Los dos ultimos dgitos del odigo ASCII para ada llave k se utilizan o-
mo dire ion h(k), en la ual ada palabra puede ser alma enada. De a uer-
do on esto, en la parte dere ha de la gura 3.1 se muestra una por ion
de memoria en forma esquemati a. Ademas de ada lo alidad de memo-
ria, se muestra la llave que ha sido transformada a tal dire ion. Algunas
lo alidades de memoria no tienen llaves, y otras tienen mas de una.
Esto ultimo se ono e omo olision, y para ha er que el hashing tra-
baje orre tamente, las olisiones deben resolverse. Uno podra pensar que
las olisiones son relativamente raras. Ciertamente, el gran numero de ol-
isiones en el ejemplo previo se debe al he ho de que varias de las palabras
de dos letras usadas omo llaves terminan en la misma letra. De he ho,
omo lo apunta Knuth, las olisiones son asi la regla, aun on llaves dis-
tribuidas aleatoriamente, mu ho antes de que el espa io de memoria reser-
vado para el alma enamiento sea totalmente utilizado. Knuth ilustra este
punto on la famosa paradoja del umplea~nos: >Cual es la probabilidad de
que al menos dos personas en una habita ion on 23 personas tengan el
mismo umplea~nos?

20
La respuesta es mas que 0.5. Si se onsidera a los 365 posibles umplea~nos
omo lo alidades de memoria, a los nombres de las 23 personas omo datos,
y sus umplea~nos omo llaves, enton es este simple ejemplo muestra que tan
posibles son las olisiones: la probabilidad de que al menos su eda una ol-
ision es mayor que 0.5 aun antes de que el 10 por iento de las lo alidades
de memoria sean utilizadas.
Existen prin ipalmente dos metodos para resolver las olisiones, llama-
dos en adenamiento ( haining) y area de desbordamiento (open addresing).
Sin embargo, antes de des ribirlos, se observa que puede lograrse mediante
mantener las olisones a un mnimo.
El medio de alma enamiento se onsidera omo un onjunto de dire -
iones enteras de 0 a M ; estas pueden ser ndi es de un arreglo o dire iones
verdaderas de memoria, dependiendo del nivel del lenguaje usado. Una llave
k es generalmente una adena alfanumeri a, pero siempre podemos onvertir
k en su equivalente entero ASCII. Suponiendo que k es ya un entero, > omo
generar una dire ion de memoria en un rango de 0 a M a n de minimizar
la probabilidad de olisiones? Una forma es utilizar la opera ion modulo de
M:

h(k) = k mod M
La uni a forma en que se puede ontrolar la fun ion h es sele ionando
M ; no es una uestion de que tan grande o peque~na ha er M . Es solo
ne esario que M sea el tipo orre to de numero. Se ha observado que si
M es un numero primo, enton es h genera dire iones de memoria bien
distribuidas, siempre y uando M no tenga la forma r + a, donde r es la
k

raz del onjunto de ara teres (r = 128 para los ara teres ASCII), y a es
un entero peque~no. Si se toma este onsejo para el ejemplo anterior, enton es
es notorio que M = 23 esta iertamente muy lejos de la forma 128 . k

Con este mismo valor de M se obtienen muy diferentes resultados para


las mismas 13 palabras de dos letras. Las dire iones de memoria en la gura
3.2 se expresan en nota ion de imal. Con la primera fun ion hash se sufran
uatro olisiones ( ontando TO, DO y GO omo dos olisiones), pero on la
nueva fun ion hash este numero baja a tan solo dos.

21
h = dos ultimos digitos h = modulo 23

0 0
1 1
2 2 IF
3 3 SO
4 4 DO
5 5 BE
6 6
7 BE 7 AM
8 IF, OF 8 TO
9 9 AN
10 10
11 11
12 12
13 13 AS
14 14 AT
15 AM 15 IS, OF
16 AN 16 IT
17 TO, DO, GO 17
18 18
19 19
20 20
21 AS, IS 21
22 22 GO

Figura 3.2: Utilizando la fun ion modulo on primos genera una mejora

Ademas del metodo de la division, hay otro metodo util el ual usa la
multipli a ion. Se basa en la observa ion general de que si uno toma un
numero irra ional x, y forma n de sus multiplos:

x; 2x; 3x; :::; nx


y tomando sus partes fra ionales hasta n:

x1 ; x2 ; x3 ; :::; x n

los numero resultantes son todos diferentes y dividen al intervalo unitario


en n + 1 subintervalos. Cada uno de estos subintervalos tiene al menos uno
de tres posibles longitudes, y si se a~nade un nuevo punto x +1 , este ae n

en un subintervalo del tipo mas grande. Su ede que si x se es oge a ser la


\media aurea" ( on el valor aproximadamente de 0.61803399), enton es las
tres longitudes sufren la menor varia ion, y todas estan mas er anas que
las produ idas por ualquier otro numero irra ional. Estas observa iones
sugieren una fun ion hash h produ ida de a uerdo al siguiente algoritmo.

22
Sea g la razon aurea, tan er ana omo el tama~no de una palabra pueda
aproximarla.
1. h kg
2. h parte fra ional de h
3. h hM
4. h parte entera de h
Este al ulo forma el produ to k  g, toma su parte fra ionaria, lo es ala
a M y toma el entero mas er ano (menor que) el resultado.
Apli ando este metodo al ejemplo de las llaves para palabras de dos
letras, solo se obtiene una olision, lo ual es el mejor desempe~no que se
pudiera esperar bajo las ir unstan ias a tuales.
Ahora bien, habiendo dis utido algunos tipos de fun iones hash, se re-
toman las te ni as para manejo de olisiones. La primera involu ra la on-
stru ion de una adena de apuntadores desde ada dire ion en la ual
o urra una olision, y la segunda se re ere a ambiarse a una nueva dire -
ion de memoria dentro de la tabla hash en la por ion de memoria dedi ada
al alma enamiento de llaves.
El en adenamiento se ilustra en la gura 3.3 para la fun ion hash del
ejemplo.

15 AM
16 AN
17 TO DO GO

23 AS IS

Figura 3.3: En adenamiento ( haining)


Las llaves TO, DO y GO se aso ian todas on la dire ion 17, en ese
orden. Las llaves AS e IS se aso ian on la dire ion 23. Si una por ion

23
de ada lo alidad de memoria en la tabla se reserva para un apuntador,
enton es uando una llave omo DO se aso ia on la misma dire ion que
TO, una nueva lo alidad se a~nade de un espa io de memoria auxiliar. La
llave DO se olo a en esta lo alidad, y su dire ion se inserta en el espa io
para apuntador aso iado on la primera palabra TO. Similarmente, uando
despues llega GO a la misma dire ion, se le a~nade a la adena tras DO
mediante un segundo apuntador.
La otra te ni a para resolver olisiones, llamada area de desbordamiento,
onsiste en insertar una llave k, y des ubrir que h(k) se en uentra ya o upada
por otra llave; enton es, se \prueba" la tabla hash, examinando dire iones a
una distan ia ja p(k) adelante de la dire ion que se onsidera a tualmente.
Si h(k) esta o upada, se examina h(k) p(k), y si esta se en uentra o upada,
se examina h(k) 2p(k), y as su esivamente.
Si p(k) = 1, la te ni a lineal resulta en un largos \ra imos" ( lusters)
onforme se llena la tabla. Al ha er p(k) = , donde es un entero \relati-
vamente primo" (i.e. on po os divisores) respe to a M , hay una tenden ia
menor a formarse ra imos.
Quiza la mejor te ni a de todas es ombinar esta prueba se uen ial on
una tabla hash ordenada: si las llaves k se han insertado en la tabla en orden
de re iente de k, enton es el siguiente algoritmo inserta una nueva llave en
la tabla, siempre y uando haya espa io para ella.
1. i h(k)
2. if ontenido(i) = 0 then ontenido(i) k; exit

3. if ontenido(i) < k then inter ambia valores de ontenido(i) y k


4. i i p mod M
5. goto 2
Es interesante notar que si esta polti a de inser ion se sigue desde el
ini io de la onstru ion de la tabla, produ ira la misma tabla que se ha
supuesto. Es de ir, este algoritmo tanto introdu e omo mantiene la misma
tabla que se obtuvo al insertar primero la llave mas grande, despues la
siguiente mas grande, y as su esivamente.
Claramente, se ha e mas on una tabla hash que meramente ha er in-
ser iones. Mas fre uentemente, se bus a en la tabla para ver si una llave se
en uentra ah. O asionalmente, tambien se borran elementos de la tabla.

24
En la mayora de los asos, bus ar en una tabla hash es muy similar
a insertar una nueva llave: se al ula el valor hash h(k), y se veri a la
dire ion para ver si k se en uentra en la tabla. Dependiendo si se trata
de en adenamiento o de area de desbordamiento, se sigue una adena de
apuntadores o se prueba una se uen ia dentro de la tabla.
Si m dire iones de las M dire iones en una tabla ontienen llaves , y las
adenas de tal tabla ontienen ademas n llaves, enton es el numero de pasos
requeridos para bus ar en una tabla on en adenamiento es n=m. Si la fun-
ion hash lleva a una distribu ion relativamente uniforme de llaves, enton es
m es mayor que n, y el tiempo de busqueda es esen ialmente onstante (y
peque~no).
La razon m=M se ono e omo \fa tor de arga" (load fa tor) de una
tabla hash. Bajo la te ni a de area de desbordamiento, una se uen ia de
pruebas requiere de
 M

O
M m
pasos para lo alizar una llave dentro de la tabla. Aun uando este resultado
puede ser derivado teori amente, hasta ahora solo hay eviden ia empri a
que el orden de una tabla hash requiere de
 
M M
O log
m M m
pasos para una busqueda exitosa. Este lmite de omplejidad promedio es,
sin embargo, una onjetura. Notese que la omplejidad de una prueba lin-
eal re e mu ho mas rapidamente que el orden supuesto de la omplejidad
onforme m se aproxima a M .
Resulta util omparar varias te ni as de alma enamiento y re upera ion
para de idir ual es la mejor para una apli a ion dada. Por ejemplo, es
posible omparar las tablas hash on los metodos de arboles binarios (vease
el aptulo 1), y on luir que aun uando el tiempo de a eso es mu ho menor
en las tablas hash, esto se debe a que generalmente se utiliza una tabla de
tama~no jo M . Esta in exibilidad puede ser una desventaja si el ar hivo
que se mantiene no tiene un lmite espe  o de re imiento. Sin embargo,
las tablas hash son mas fa iles de programar que algunos esquemas basados
en arboles.

25
26
Cap
tulo 4

Compresi
on de Texto
Codi a ion Hu man
Las dos apli a iones mas importantes de las te ni as de odi a ion son
la prote ion y ompresion. Cuando un mensaje es odi ado omo una a-
dena de eros y unos, existen te ni as que, mediante la inser ion de algunos
bits extra en la adena a trasmitir, permiten al re eptor del mensaje des-
ubrir uales eros o unos (si los hay) son erroneos. Ademas, hay metodos
de a ortamiento de la adena, de tal modo que no se requieren transmitir
mu hos bits.
Las dos grandes areas de apli a ion de la teora de odi a ion son tiempo
y espa io. Las apli a iones de tiempo son aquellas de omuni a ion tradi-
ional en que un mensaje se transmite ele troni amente a traves del tiempo,
y la mayor preo upa ion es proteger el mensaje de errores. Las apli a iones
de espa io involu ran la prote ion o ompresion de datos durante el alma e-
namiento en algun medio ele troni o, omo la memoria de una omputadora
o los dis os magneti os.
Si una gran antidad de texto debe alma enarse, o si el espa io de al-
ma enamiento es importante, onviene omprimir el texto de alguna forma
antes de alma enarlo. La odi a ion Hu man ha e esto mediante explotar
la redundan ia en el texto fuente.
En esen ia, la idea es muy simple. Supongase que se tiene una adena de
texto que usa un alfabeto on smbolos s1 , s2 , ..., s , y que la probabilidad de
n

que el i-esimo smbolo que apare e en un punto aleatoriamente sele ionado


de la adena es p . Cada smbolo s se substituye por una adena binaria de
i i

27
longitud l , de tal modo que la longitud promedio que representa un smbolo
i

esta dado por


X n

L= pl i i

=1 i

Suponiendo que p1 > p2 > ::: > p , se nota que L se minimiza solo si l1 <
n

l2 ::: < l . Esta observa ion forma la base para una te ni a que sele iona
n

las adenas binarias reales que odi an los varios smbolos. Supongase, por
ejemplo, que los smbolos A, B , C , D, E , F y G apare en on las probabil-
idades 0.25, 0.21, 0.18, 0.14, 0.09, 0.07 y 0.06 respe tivamente. Notese que
la suma de todas las probabilidades suma 1.0.
Un arbol de Hu man para estos smbolos y sus probabilidades es una rep-
resenta ion visual onveniente de la sele ion, en la ual las adenas binarias
representan los smbolos ( gura 4.1). Cada nodo del arbol esta etiquetado
on la suma de las probabilidades asignadas a los nodos que tiene debajo.

1.0
0 1

0.57 0.43
0 1
0 1

0.25 0.32 0.21 0.22


0 1 0 1
B
A

0.18 0.14 0.13 0.09


0 1
C D E

0.07 0.06

F G

Figura 4.1: Un arbol de Hu man

Antes de des ribir omo se onstruye este arbol, notese que ada smbolo
en el alfabeto fuente se en uentra en un nodo terminal del arbol, y que la
adena binaria que lo odi a esta en la se uen ia de eros y unos que se

28
en uentran al re orrer el arbol desde la raz a un nodo en parti ular. La
odi a ion Hu man para el sistema que se ha des rito es por lo tanto:
A 00
B 10
C 010
D 011
E 111
F 1100
G 1101
La longitud promedio del odigo L es 2.67 bits, y este es un mnimo.
El algoritmo que asigna estos odigos onstruye un arbol de Hu man
expl ito de abajo ha ia arriba. Un arreglo llamado \subarboles" ontiene
los ndi es de las ra es de todos los subarboles de los que se onstruye el
arbol de Hu man. Ini ialmente, subarboles no ontiene mas que subarboles
de un solo nodo, uno por ada uno de los n smbolos s del alfabeto que
i

se odi a. Hay, por lo tanto, un arreglo orrespondiente de probabilidades


\prob", que por ada nodo raz en ada subarbol en onstru ion, ontiene
la probabilidad aso iada on ese nodo. Dos arreglos de apuntadores \lig-
aizquierda" y \ligadere ha" ontienen la estru tura del arbol de Hu man, y
uando el algoritmo se termina, debe haber 2n 1 nodos, de los uales n
son nodos y el resto apuntadores.
A la i-esima itera ion del algoritmo, los primeros n i+1 subarboles se re-
ordenan, de tal modo que sus probabilidades aso iadas formen una se uen ia
de re iente. Los dgitos binarios apropiados se a~naden a los nodos terminales
de los ultimos dos subarboles en se uen ia reordenada, y estos se mez lan
para formar un nuevo subarbol que se olo a en el arreglo subarboles.
for i 1 to n 1
1. reordena subarboles desde 1 a n i+1
2. a~nade 0 a la terminal del subarbol n i
3. a~nade 1 a la terminal del subarbol n i+1
4. prob(n + i) prob(subarboles(n i)) + prob(subarboles(n i + 1))
5. ligadere ha(n + i) n i+1
6. ligaizquierda(n + i) n i

29
7. subarboles(n i) n+i
El pro eso que se indi a por el paso \a~nade 0 a la terminal del subarbol
n i" simplemente quiere de ir re orrer el (n i)-esimo subarbol y a~nadir
un 0 a ada palabra alma enada omo sus nodos terminales. No se ha e
referen ia expl ita de estas palabras en el algoritmo, pero son fa ilmente
manejadas uando el algoritmo se onvierte en un programa. El paso \ a~nade
1 a la terminal del subarbol n i + 1" tiene un signi ado similar.
Despues de que los apuntadores se modi an para aso iarse on el nuevo
nodo n + i (siendo los nodos anteriores 1; 2; :::; n; n + 1; :::; n + i 1), el algo-
ritmo nalmente reemplaza las dos ultimas entradas en el arreglo subarboles
por la raz del nuevo subarbol onstruido. Cuando i llega a ser n 1, hay
un solo subarbol en todo el arreglo, y este es el arbol de Hu man.
Los primeros pasos de la opera ion del algoritmo pueden ilustrarse por
el ejemplo ya presentado. Ini ialmente hay n i + 1 = 7 subarboles que
onsisten de un nodo ada uno. Esto se rearreglan en orden de re iente
respe to a su probabilidad ( gura 4.2).

1 2 3 4 5 6 7

0.25 0.21 0.18 0.14 0.09 0.07 0.06

A B C D E F G

Figura 4.2: Siete subarboles de un solo nodo


Despues de que un 0 y un 1 se a~naden a las terminales de los subarboles
6 y 7, se rea un nuevo subarbol on ndi e n + i = 8. Este  se liga a la
dere ha on el subarbol 7 y a la izquierda on el subarbol 6. A la siguiente
itera ion del algoritmo, los subarboles se rearreglan en orden de re iente de
probabilidad ( gura 4.3).
A la siguiente itera ion, un nuevo subarbol se forma de los dos anteriores,
y el numero de subarboles se redu e a 5 ( gura 4.4).
Despues de n = 7 itera iones, solo queda un subarbol, el ual es el arbol
de Hu man. A ada paso, se asignan 0 o 1 omo dgitos del odigo a la
liga izquierda y dere ha respe tivamente, en forma su esiva a los subarboles
on probabilidades menores. Esto asegura que las palabras mas largas de la
odi a ion tiendan a ser menos fre uentemente utilizadas.

30
1 2 3 4 8 5

0.25 0.21 0.18 0.14 0.13 0.09

A B C D E
6 7

0.07 0.06

F G

Figura 4.3: Subarboles despues de la primera itera ion

1 9 2 3 4

0.25 0.22 0.21 0.18 0.14

A B C D
8 5

0.13 0.09

E
6 7

0.07 0.06

F G

Figura 4.4: Subarboles despues de la segunda itera ion

31
Para alma enar una pieza dada de texto utilizando la odi a ion Hu -
man, se rea una tabla en la ual se uenta el numero de ve es n que el
i

i-esimo smbolo o urre. La probabilidad p de la pieza de texto es simple-


i

mente n =l, donde l es la longitud de la pieza de texto. Apli ar el algoritmo


i

resulta en la asigna ion de un odigo a ada smbolo, as omo en la on-


stru ion del arbol de Hu man. El texto se re orre, y en una sola pasada, se
onvierte en una larga adena binaria de odigos on atenados. En seguida,
esta adena se divide en bloques de longitud m, que se re ere al tama~no de
palabra de la omputadora parti ular para la que el algoritmo se implemen-
ta. Cada bloque, enton es, se onvierte en un solo entero, y se alma ena en
la memoria de esta forma. El arbol de Hu man, por su parte, se alma ena
en otro sitio de la memoria.
Para re uperar el texto que ha sido as alma enado, se invo a el pro-
edimiento inverso, y el arbol de Hu man se utiliza en el ultimo paso del
pro esamiento para los smbolos de la adena binaria. Cada smbolo orre-
sponde a una sola sub- adena, determinada por una sola busqueda desde la
raz hasta el nodo terminal pertinente del arbol.
Para evitar onstruir un arbol ada vez que algun texto se alma ena,
es posible onstruir un arbol mas general de una vez por todas, que re eje
las probabilidades de ada smbolo en forma mas generi a. Por ejemplo, la
ora ion promedio en Ingles (ignorando la puntua ion) ontiene los smbolos
de A a Z y un espa io en blan o ( ) en una lo alidad aleatoria on las
siguientes probabilidades

A 0.065 B 0.013 C 0.022


D 0.032 E 0.104 F 0.021
G 0.015 H 0.047 I 0.058
J 0.001 K 0.005 L 0.032
M 0.032 N 0.058 O 0.064
P 0.015 Q 0.001 R 0.049
S 0.056 T 0.081 U 0.023
V 0.008 W 0.018 X 0.001
Y 0.017 Z 0.001 0.172

32
Cap
tulo 5

B
usqueda de Cadenas
El Algoritmo Boyer-Moore
Existen algunas sutilezas en lo que pare e ser el asunto sen illo de bus ar
un patron parti ular dentro de una adena de ara teres, espe ialmente si
desea ha erse rapidamente. Por lo tanto, la pregunta >Que tan rapido se
puede bus ar un patron dado dentro de una adena de n ara teres? tiene
una ierta di ultad pra ti a.
Por ejemplo, omo todo minero sabe, hay mu has formas de bus ar ORO
en LAS MINAS. Una antidad razonable de metodos di tan que se busque la
adena en un orden de nido, por ejemplo, de izquierda a dere ha. Se intenta
ha er oin idir el patron on la parte mas a la izquierda de la adena, y si la
oin iden ia falla, se ontinua re orriendo la adena ha ia la dere ha hasta
que se en uentra una oin iden ia o se a aba la adena. Realmente, pare e
razonable omparar los primeros ara teres en el patron y la adena en tal
orden:

LAS MINAS
ORO

Ya que O y L no oin iden, no es ne esario en ontinuar las ompara-


iones, por lo que se re orre el patron en una unidad a la dere ha, y se
intenta de nuevo:

33
LAS MINAS
ORO

De nuevo, los ara teres omparados, A y O, no oin iden. Re orriendo


de esta forma, eventualmente la adena se a aba, y se on luye que no hay
ORO en LAS MINAS. Varios editores de texto ha en busquedas de adenas
de esta forma.
Un algoritmo des ubierto por R.S. Boyer y J.S. Moore en 1977 mejoran
este metodo mediante veri ar la oin iden ia de los ara teres de dere ha
a izquierda en lugar de izquierda a dere ha. Si la se ion de la adena no
oin ide on el patron, se puede re orrer el patron por toda su longitud. De
este modo, se puede ir de:

LAS MINAS
ORO
inmediatamente a:
LAS MINAS
ORO

A primera vista, pare e ser un dramati o in remento en la e ien ia, es-


pe ialmente si en el siguiente paso el patron puede saltar otros tres ara teres
por la misma razon. Desafortunadamente, este in remento en la e ien ia
es meramente ilusorio, ya que para veri ar si A no esta en ORO requiere
tantas ompara iones omo el re orrer ORO ha ia adelante un espa io ada
vez despues de una ompara ion de la primera O on ada uno de los tres
ara teres en la adena.
Sin embargo, si se onstruye una tabla (llamada tabla 1) la ual por ada
letra del alfabeto ontiene su posi ion mas a la dere ha en el patron ORO,
enton es solo es ne esario bus ar A en la tabla (lo que se puede ha er muy
rapidamente) y notar que su entrada orrespondiente es nula (no existe A
en ORO, lo que se simboliza por ;). Uno puede enton es re orrer el patron
a la dere ha por tantos ara teres omo los haya en el.

34
Ademas de la te ni a de re orrer basado en tabla 1, el algoritmo Boyer-
Moore usa otra buena idea: supongase que en el pro eso de ha er oin idir
los ara teres del patron on los ara teres de la adena, los primeros m
ara teres (de dere ha a izquierda) se en uentra que oin iden:

TRESTRISTESTIGRESTRAGABANTRIGO
TRASTRA

En tal aso, la por ion que on ide hasta ahora al nal del patron podra
bien o urrir en ualquier otro lado del patron. Sera enton es inteligente
re orrer el patron a la dere ha solo la distan ia entre las dos por iones:

TRESTRISTESTIGRESTRAGABANTRIGO
TRASTRA

En el ejemplo anterior, el algoritmo Boyer-Moore podra des ubrir rapi-


damente que B no esta en TRASTRA, y omo resultado, re orrere el patron
por otros siete ara teres.
El algoritmo Boyer-Moore es orto y dire to. Ademas de tabla 1, utiliza
otra tabla, tabla 2, que por ada por ion terminal del patron indi a su re ur-
ren ia mas a la dere ha y no terminal. Esta tabla puede a ederse tambien
rapidamente.
ST RING
1. i largo
2. while haya adena
a ) j an ho
b ) if j = 0 then imprime `Coin iden ia en' i + 1
) if string(i) = pattern(j ) then j j 1, i i 1, goto 2.b

35
d) i i + max(table1(string(i)); table2(j ))
donde an ho es la longitud del patron, largo es la longitud de la adena,
i es la posi ion a tual en la adena de ara teres, j es la posi ion a tual
en el patron, string(i) es el i-esimo ara ter en la adena, y pattern(j) es el
j -esimo ara ter en el patron.
Como ejemplo del algoritmo anterior en opera ion, supongase que el
patron TRASTRA se ha olo ado en seguida de ...GRESTRA... en la adena.
Comenzando en el paso 2. , se nota que i = 20 y j = 7. Ya que string(26) =
pattern(7), ambos i y j se de rementan. Retornando al paso 2.b on i = 19 y
j = 6 se en uentra otra oin iden ia, volviendo i = 18 y j = 5. Finalmente,
una nueva on iden ia su ede, lo que deja i = 17 y j = 4. Sin embargo, los
ara teres en las siguientes posi iones no oin iden, y la eje u ion pro ede
on string(17) = E. Por otro lado, la entrada en tabla 1 apare e omo sigue:

C 2
D 2
E 5

F 6
G 6
Por tanto, tabla1(E) = 5 signi a que el apuntador i debe re orrerse al
menos 5 ara teres a la dere ha antes de que un nuevo intento de oin iden ia
tenga ualquier esperanza de exito. Esto es equivalente a re orrer el patron
uatro ara teres a la dere ha, en donde las T oin iden de nuevo.
Sin embargo, tabla 2 se podra ver omo sigue:

1 11
2 10
3 9
4 5
5 4
5 1
De nuevo, el apuntador i debe re orrerse al menos 5 ara teres a la
dere ha antes de que sea razonable re omenzar el pro eso de oin iden ia.
Como su ede en este ejemplo, tabla1(E) = tabla2(4), lo que impli a que
el apuntador i debe re orrerse 5 ara teres en ualquier aso. Sin embargo,

36
tratando otros patrones es posible notar mas laramente la utilidad que
provee la independen ia de las dos tablas.
El algoritmo Boyer-Moore ha sido exhaustivamente probado y rigurosa-
mente analizado. El resultado de las pruebas muestra que en promedio, este
algoritmo es \sublineal". Esto es, para en ontrar un patron en la i-esima
posi ion de una adena requiere de menos de i + an ho pasos uando el
algoritmo esta ade uadamente odi ado. En terminos del omportamiento
en el peor aso, el algoritmo aun se eje uta en el orden de i + an ho.
En uanto a la utilidad de tabla 1 y tabla 2, es interesante que on
alfabetos grandes y patrones peque~nos, tabla 1 resulta mas util. Sin embargo,
esta situa ion se ha e inversa para peque~nos alfabetos y grandes patrones.

37
38
Cap
tulo 6

Bases de Datos Rela ionales


Consultas \Hagalo Usted Mismo"
En mu has apli a iones que involu ran el alma enamiento de informa-
ion en ar hivos de omputadora, normalmente se dan algunas onsultas que
un usuario del ar hivo desea ha er. Por ejemplo, el ar hivo podra ser un di-
re torio telefoni o. Para en ontrar el numero telefoni o de alguien, el usuario
del sistema meramente es ribe el nombre de la persona en el te lado, y mo-
mentos mas tarde el orrespondiente numero telefoni o apare e en pantalla.
La omputadora, usando el nombre omo lave o llave, ha bus ado a traves
del ar hivo por el nombre, re obrado el numero telefoni o alma enado, y lo
despliega en pantalla.
Sin embargo, algunas formas de alma enar datos son mas omplejas que
otras. Involu ran mu has lases de informa ion on rela iones espe iales en-
tre ellas. Considerese, por ejemplo, los datos aso iados on una liga de fut-
bol. Existen varias rela iones entre jugadores y equipos, entre jugadores y
numeros telefoni os, entre equipos y entrenadores, et . (Figura 6.1).
Para asos omo la liga de futbol, se utilizan bases de datos rela ionales,
mediante las uales es posible produ ir informa ion que no esta alma enada
en forma inmediatamente a esible. Puede haber, por ejemplo, una lista de
jugadores, sus equipos, y hasta de sus numeros telefoni os, pero no haber
una lista de numeros telefoni os de todos los jugadores de un equipo en
parti ular 1 .

1
Lo ual sera de mu ha utilidad para avisarles si uno de sus juegos resulta an elado

39
Jugador Edad

Entrenador Numero
telefonico

Equipo

Figura 6.1: Rela iones de datos en una liga de futbol

En una base de datos rela ional, es posible rear una \ onsulta" (query)
que produz a tal lista (y mu ha mas informa ion). Para espe i ar los rangos
de onsultas posibles en una base de datos rela ional, supongase que la
informa ion de la liga de futbol se alama ena en tres tablas separadas:

Tabla de Entrenadores
Equipo Entrenador Tel
efono

Leones M. Cervantes 5535 6798


Demonios G. Gonzalez 5671 2033
... ... ...
Tabla de Jugadores

Jugador Edad Tel


efono Equipo
A. Johns 22 5432 6592 Leones
L. E heverra 33 5574 6378 
Angeles
K. Or 25 5522 1362 Leones
... ... ... ...
Tabla de En uentros
Lo al Visitante D
a Hora Lugar

Demonios 
Angeles 22 O tubre 12:00 hrs. Estadio \Julian Gar a"
Leones Tornados 12 Noviembre 16:00 hrs. Estadio Na ional
... ... ... ... ...

40
Cada tabla representa una rela ion que sera usada por la base de datos.
Mas aun, ada rela ion es realmente un onjunto de tuplas; por ejemplo, la
primera rela ion onsiste en tros de datos on la forma:

Entrenadores:(equipo,entrenador,telefono)

Las otras rela iones onsisten en tuplas de 4 y 5 elementos, respe tiva-


mente:

Jugadores:(jugador,edad,telefono,equipo)
Juegos:(lo al,visitante,da,hora,lugar)

Cada olumna en una tabla (rela ion) representa un atributo. Algunos


atributos fun ionan omo llaves uando se bus a en las tablas. En las tres
tablas anteriores, algunos atributos llave podran ser equipo, jugador, lo al y
visitante.
Hablando matemati amente, una rela ion es un onjunto de n-tuplas
(x1 ; x2 ; :::; x ) donde ada elemento x se obtiene de un onjunto X , y ningu-
n i i

na tupla se repite. Las tablas en una base de datos rela ional satisfa en esta
de ni ion. Como resultado, la teora matemati a se puede apli ar; en par-
ti ular, una teora llamada algebra rela ional de ne opera iones sobre las
tablas.
Dos opera iones del algebra rela ional son sele ion y proye ion. La
opera ion de sele ion espe i a un sub onjunto de renglones en una tabla
mediante una expresion booleana que involu ra atributos. La opera ion de
proye ion espe i a un onjunto de olumnas en una tabla, mediante listar
los atributos involu rados. Tambien elimina las dupli a iones que se tengan
de los renglones resultantes.
Para obtener una lista de telefonos de los Leones, estas dos opera iones
son su ientes. La sele ion se denota por , y la proye ion por :

 jugadorytelef ono ( equipo = Leones (Jugadores))

Analizando de adentro ha ia afuera, la opera ion de sele ion  espe i a


todos los renglones de la tabla de jugadores en el ual el nombre del equipo
es Leones. En seguida, de entre estos, la proye ion  espe i a los atributos

41
\jugador" y \telefono", des artando todos los otros atributos de la tupla no
espe i ados por . Por tanto, la siguiente lista apare e:

A. Johns 5432 6592


K. Or 5522 1362
... ...

Otra rela ion importante es llamada la \union natural" (natural join),


y se denota on el smbolo ./. Opera sobre dos tablas que tienen uno o mas
atributos omunes. Para ada par de tuplas (una de la primera tabla y una
de la segunda), produ e una nueva tupla si los atributos omunes tienen
valores identi os para tal par. Supongase por ejemplo que se le pide a la
base de datos rela ional la union de las tablas Entrenadores y Jugadores:

Entrenadores ./ Jugadores
Las dos tablas tienen a equipo omo un atributo omun. Un registro
dentro de la nueva tabla (es de ir, una rela ion) que resulta de la opera ion
de union podra ser:

Leones, M. Cervantes, 5535 6798, A. Johns, 22, 5432 65 92

El atributo equipo, que tiene un valor omun de Leones para un renglon


de Entrenadores y un renglon de Jugadores, resulta en un renglon nuevo en
una nueva tabla.
La opera ion union fun iona de forma ombinada on otras opera iones
para produ ir onsultas de datos mas versatiles. Supongase que un usuario
de la base de datos quisiera una lista telefoni a del equipo entrenado por M.
Cervantes. La siguiente se uen ia de opera iones produ ira esa lista:

jugadorytelef ono ( entrenador =


M:C ervantes (Entrenadores ./ Jugadores))
Dada la tabla Entrenadorer ./ Jugadores, la sele ion de M. Cervantes
omo entrenador produ ira tuplas de 6 elementos onteniendo el atributo
entrenador on valor de M. Cervantes. Es laro, el valor de Leones sera
redundante en este aso. Ya que se requieren solo los nombres y numeros
telefoni os de los jugadores entrenados por M. Cervantes, la proye ion se
realiza onsiderando solo estos datos.

42
Notese que la misma informa ion es re uperable en mu has formas dife-
rentes de una base de datos rela ional. Ademas, no siempre se obtienen los
datos a la misma velo idad. Por ejemplo, la opera ion union que se invo a
en la onsulta anterior es inherentemente ine iente, ya que se apli a a dos
tablas relativamente grandes. Una forma equivalente, pero mas e iente,
sera la siguiente:

jugadorytelef ono (Jugadores ./ ( entrenador =


M:C ervantes (Entrenadores)))
La sele ion on entrenador = M. Cervantes, uando se apli a a Entre-
nadores, produ e una sola tupla de tres elementos:

Leones, M. Cervantes, 5535 6798

La union on Jugadores de esta tupla, enton es, espe i a todos los ju-
gadores del equipo de Leones. Una proye ion nal elimina todos los valores
de los atributos ex epto nombre y telefono de las tuplas resultantes.
Este ejemplo ilustra una ara tersti a importante de la lase de lengua-
jes de onsulta de alto nivel que se usan en bases de datos rela ionales, y
se basa en el algebra rela ional. Tales lenguajes, uando son ompletamente
implementados, ha en posible a los usuarios optimizar sus onsultas. Y da-
do que hay mas de una manera de produ ir onsultas, tambien es posible
sele ionar aquella que lo ha e mas rapidamente.
>Como se implementan las bases de datos rela ionales? Ya que solo se
mantienen tablas en la memoria de la omputadora, todas las opera iones
rela ionales deben redu irse a opera iones sobre las tablas. El operador se-
le ion es fa ilmente implementado: simplemente revisa la tabla renglon por
renglon, probando una expresion booleana que de ne los renglones a ser se-
le ionados a partir de los valores de los atributos de los propios renglones.
La proye ion tambien es bastante simple de programar, mediante ordenar
los renglones resultantes y eliminar los dupli ados.
La opera ion union se puede eje utar mas rapidamente en tablas relati-
vamente grandes si las tablas primero se ordenan a partir de los valores del
atributo omun. Cuando las tablas se ordenan, pueden mez larse mediante
el atributo omun, valor por valor.
Hay mu has varia iones para el operador union. En lugar de igualdad,
puede pedirse que los atributos omunes satisfagan otras formas de om-

43
para ion, omo por ejemplo, desigualdades. Por otro lado, existen otros op-
eradores ademas de la sele ion, proye ion y union, disponibles para las
onsultas. En la mayora de los sistemas de bases de datos rela ionales, las
onsultas pueden formarse a partir de opera iones artesianas de produ to,
union, interse ion, y substra ion de onjuntos.
Hasta la de ada de los 1970s, se introdujeron tres formas de sistemas de
bases de datos: jerarqui a, distribuida y rela ional. Ahora se re ono e que
las bases de datos rela ionales son las que tienen la mas amplia variedad de
apli a iones y utilidad. Conse uentemente, solo se men ionan aqu tal tipo
de bases de datos.
Los lenguajes en que las onsultas para bases de datos rela ionales se
expresan se han desarrollado durante varias genera iones de lenguajes, que
han ido so sti andose y re nandose. Las onsultas que se han ilustrado hasta
ahora tienen una forma algebrai a y pro edural. Un lenguaje desarrollado
para expresar parti ularmente onsultas, llamado SQL, ha sido dise~nado
para ser usado en forma natural por el humano, y es no-pro edural.
La onsulta basi a en SQL tiene la siguiente forma general:
SELECT A1 ; A2 ; :::; An

FROM R1 ; R2 ; :::R m

WHERE Expresion Booleana


Tal onsulta impli a no solo la opera ion sele ion, sino tambien la
proye ion, produ to artesiano, y union natural. Los argumentos A es- i

pe i an uales atributos son parte de la onsulta, y los argumentos R son


j

rela iones. Los usuarios espe i an uales rela iones son requeridas para pro-
du ir una respuesta a una onsulta. Ciertamente, la lista R1 ; :::; R de ne
m

un produ to artesiano de todas las rela iones (tablas) existentes. La expre-


sion booleana que apare e en la por ion \WHERE" de la onsulta in luye
una variedad de operadores, omo por ejemplo, sele iones y uniones.
Ahora es posible mostrar omo algunas de las onsultas anteriores, ex-
presadas usando algebra rela ional, pueden re-expresarse usando SQL. Para
produ ir la lista de los jugadores de los Leones y sus numeros de telefono,
es posible es ribir:
SELECT jugador; telefono
FROM Jugadores
WHERE equipo = Leones

44
Para el ejemplo donde se involu ran una lista de jugadores y sus numeros
telefoni os on el equipo entrenado por M. Cervantes, se podra obtener la
onsulta de la siguiente forma:
SELECT jugador; telefono
FROM Jugadores; Entrenadores
WHERE Entrenadores:entrenador = M:Cervantes and
Entrenadores:equipo = Jugadores:equipo
Para aquellos programadores que onsideran a SQL (o el algebra rela-
ional) redu ido a estru turas relativamente simples, se ofre e el siguiente
ejemplo on una onsulta anidada:
SELECT jugador; telefono
FROM Jugadores
WHERE equipo In
(SELECT equipo
FROM Entrenadores
WHERE entrenador = M:Cervantes )
A tualmente, SQL se ha onvertido en el lenguaje de onsultas estandar
para los sistemas de bases de datos rela ionales de grandes omputadoras.

45
46
Bibliograf
a

[1℄ A.V. Aho, J.E. Hop roft, and J.D. Ullman. The Design and Analysis
of Computer Algorithms. Addison-Wesley, 1974.
[2℄ A.V. Aho, J.E. Hop roft, and J.D. Ullman. Data Stru tures and Algo-
rithms. Addison-Wesley, 1983.
[3℄ C.J. Date. An Introdu tion to Database Systems. Addison-Wesley, 1980.
[4℄ D.E. Knuth. The Art of Computer Programming, vol. 1. Addison-
Wesley, 1967.
[5℄ D.E. Knuth. The Art of Computer Programming, vol. 3. Addison-
Wesley, 1967.
[6℄ R.W. Hamming. Coding and Information Theory. Prenti e-Hall, 1980.
[7℄ T.A. Standish. Data Stru tures and Te hniques. Addison-Wesley, 1980.
[8℄ J.D. Ullman. Prin iples of Database Systems. Computer S ien e Press,
1980.
[9℄ N. Wirth. Algoritmos y Estru turas de Datos. Prenti e-Hall, 1987.

47

También podría gustarte