Vous êtes sur la page 1sur 22

Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

GUIA 4 Algoritmos voraces, Conjuntos y


dispersin
Valor.. a pesar de todas las debilidades del cuerpo, el espritu debe
triunfar
Beethoven

Avram Noam Chomsky (nacido el 7 de diciembre de 1928 en


Filadelfia, EEUU) es profesor emrito de Lingstica en el MIT y
una de las figuras ms destacadas de la lingista del siglo XX.
Cre la gramtica generativa, disciplina que situ la sintaxis en el
centro de la investigacin lingstica y con la que cambi por
completo la perspectiva y los programas y mtodos de
investigacin en el estudio del lenguaje, actividad que elev
definitivamente a la categora de ciencia moderna. Desde el ao
1959 en que Chomsky dio su clasificacin de las gramticas, se
han publicado muchos trabajos sobre lenguajes y gramticas en el
aspecto formal. La perspectiva lgico-matemtica del
distribucionalismo harrisiano, es reconocida y adoptada por
Chomsky, como explcitamente se manifiesta en su libro The
logical structure of linguistic theory, redactado entre 1951 y 1955,
pero sin publicarse ntegramente.
Chomsky es quien introduce estructuras sintcticas en el estudio de la lengua. Dada la enorme
complejidad del sistema lingstico, Chomsky considera adecuada la descripcin estructural en
trminos de niveles de representacin de las oraciones. Adicionalmente, lo novedoso de Chomsky
frente a los estudiosos anteriores es la capacidad de conjugar orgnicamente un pensamiento
tradicional con saberes de naturaleza lgico-matemtica para tratar de manera clara, formal y
explicita los procesos recursivos del lenguaje humano. Como lingista Chomsky ha sacudido de
manera despiadada al estructuralismo lingstico en sus manifestaciones estadounidenses y
europeas, lo que suscito grandes discusiones y controversias en torno a su modelo generativo
transformacional. Pero sus reflexiones no son solo de naturaleza lingstica, sino que tiene
perfiles filosficos, pues despierta controversias entre el empirismo y el racionalismo.

Objetivos de aprendizaje

1. Conocer la tcnica de algoritmos voraces


2. Conocer el TAD conjuntos y sus principales algoritmos
3. Conocer la tcnica de dispersin

Introduccin
Los algoritmos voraces suelen ser sencillos. Se emplean sobre todo para resolver problemas de
optimizacin, como por ejemplo, encontrar la secuencia ptima para procesar un conjunto de
tareas por un computador, hallar el camino mnimo de un grafo, etc. Habitualmente, los
elementos que intervienen son:

un conjunto o lista de candidatos (tareas a procesar, vrtices del grafo, etc);


un conjunto de decisiones ya tomadas (candidatos ya escogidos);
una funcin que determina si un conjunto de candidatos es una solucin al problema
(aunque no tiene por qu ser la ptima);
una funcin que determina si un conjunto es completable, es decir, si aadiendo a este
conjunto nuevos candidatos es posible alcanzar una solucin al problema, suponiendo
que esta exista;

Augusto Cortez Vsquez Pg. 1/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

una funcin de seleccin que escoge el candidato an no seleccionado que es ms


prometedor;
una funcin objetivo que da el valor/coste de una solucin (tiempo total del proceso, la
longitud del camino, etc) y que es la que se pretende maximizar o minimizar;

Para resolver el problema de optimizacin hay que encontrar un conjunto de candidatos que
optimiza la funcin objetivo. Los algoritmos voraces proceden por pasos. Inicialmente el
conjunto de candidatos es vaco. A continuacin, en cada paso, se intenta aadir al conjunto el
mejor candidato de los an no escogidos, utilizando la funcin de seleccin. Si el conjunto
resultante no es completable, se rechaza el candidato y no se le vuelve a considerar en el futuro.
En caso contrario, se incorpora al conjunto de candidatos escogidos y permanece siempre en l.
Tras cada incorporacin se comprueba si el conjunto resultante es una solucin del problema.
Un algoritmo voraz es correcto si la solucin as encontrada es siempre ptima. El esquema
genrico del algoritmo voraz es:

El nombre voraz proviene de que, en cada paso, el algoritmo escoge el mejor "pedazo" que es

funcion voraz(C:conjunto):conjunto
{ C es el conjunto de todos los candidatos }
S <= vacio { S es el conjunto en el que se construye la solucion}
mientras solucion(S) y C <> vacio hacer
x <= el elemento de C que maximiza seleccionar(x)
C <= C \ {x}
si completable(S U {x}) entonces S <= S U {x}
si solucion(S)
entonces devolver S
si no devolver no hay solucion
Fin Mientras
Fin

capaz de "comer" sin preocuparse del futuro. Nunca deshace una decisin ya tomada

Ejemplo 1: Se quiere cambiar una cantidad N haciendo uso del menor numero de
monedas
Funcin DevolverCambio(N) : nmero de monedas.
Inicio N : cantidad a cambiar
C = { 100, 25, 10, 5, 1} S : conjunto de monedas
S = { }, SUM =0 SUM: cantidad acumulada
Mientras ( SUM < N )
X = mayor elemento de C tal que
SUM + X <= N
Si no existe ese elemento
Retornar No existe solucion
Sino
S = S U{ una moneda de valor X}
SUM = SUM + X
FinSi
FinMientras

Devolver S
Fin

Augusto Cortez Vsquez Pg. 2/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

Supongamos que se disponen monedas de 1, 4 y 6 unidades cambiar 8 implicara


1x 6x 2x 1 = 8 Sin embargo sabemos que la mejor solucin es 2 x 4

Ejemplo 2:

Problema de la mochila

Sea N objetos y una mochila M

Oi i= 1..n

Oi tiene un peso Wi , un valor Vi

M puede llevar un peso que no sobre pase W


Por cada objeto Oi se puede llevar una fraccin Xi de el
Se quiere llenar la mochila de tal forma que se maximice el valor de los objetos
Formalmente
Max { Xi Vi tq. Xi Wi W
i=1 i= 1

Precondicion. Vi 0 Wi 0 0 Xi 1, 1 i n

Algoritmos voraz
Utilizaremos un vector X: (X1, X2,.......... Xn) en donde guardaremos la fraccion Xi del
objeto Oi hay que incluir.
N= 5 W = 100
1 2 3 4 5
W 10 20 30 40 50
V 20 30 66 40 60
V/W 2.0 1.5 2.2 1.0 1.2

Funcin mochila (W1...n, V1....n, W ) : matriz 1....n


Inicio
Para i de 1 a n
Xi =0
FinPara
Peso = 0
Mientras (Peso W)
i = elegir el mejor objeto restante
Si ( Peso + W i W
Xi = 1
Peso = Peso + W i
Sino
Xi = (W - Peso) / W i
Peso = W
FinSi.
FinMientras
Retornar X
Fin

Augusto Cortez Vsquez Pg. 3/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

Para elegir el mejor objeto restante, se pueden utilizar tres criterios descritos mediante
las siguientes funciones

Funcin de seleccin 1, 2, 3

1 Seleccionar el objeto mas valioso


incrementa el valor de la carga del modo ms rpido posible.
2 Seleccionar el objeto ms pequeo restante. La capacidad se agota de la forma
ms lenta posible.
3 Seleccionar el objeto cuyo valor porcentual de peso sea el mayor posible.

Si seleccionamos los objetos por orden decreciente de valores seleccionamos.

1
Objeto 03 , 05 ,2 04 total

Valor 66 60 40/2 146


Peso 30 50 40/2 100

Si seleccionamos los objetos en orden de peso creciente

Objeto 01 , 02 , 03 , 04 total

Valor 20 30 66 40 156
Peso 10 20 30 40 100

Si seleccionamos los objetos por orden decreciente de V/W

Objeto 03 , 01 , 02 , 05 total

Valor 20 30 66 4/5 (60) 164


Peso 10 20 30 4/5 (50) 100

Conjuntos
Los conjuntos son una de las estructuras bsicas de las matemticas, y por tanto de la
informtica. No se va a entrar en la definicin de conjuntos ni en sus propiedades. Se
supondr que el lector conoce algo de teora de conjuntos. Con lo ms bsico es
suficiente.

En realidad las estructuras de datos que se han implementado hasta ahora no son ms
que elementos diferentes entre s (en general) en los que se ha definido una relacin. Por
ejemplo, en las listas ordenadas o los rboles binarios de bsqueda se tiene una serie de
elementos que estn ordenados entre s. Obviando las propiedades de las estructuras, se
ve que forman un conjunto, y su cardinal es el nmero de elementos que contenga la
estructura. En los conjuntos no existen elementos repetidos, y esto se respeta en las
implementaciones que se ofrecen a continuacin.

Augusto Cortez Vsquez Pg. 4/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

Definiremos unas implementaciones que permitan aplicar el lgebra de conjuntos, ya


sea unin, interseccin, pertenencia, etc.

Definicin
Un conjunto es una estructura bsica fundamental de las matemticas. Se utiliza como
base de una gran cantidad de TDA. Se han desarrollado muchas tcnicas para la
implantacin de TDA basada en conjuntos.

Caractersticas

Sea C un conjunto
- Los elementos de C no necesariamente estn ordenados
- C no tiene elementos repetidos

Representacin de listas enlazadas


Mediante Arreglos
Mediante apuntadores

OPERACIONES
Unin(A, B) toma los argumentos A y B cuyos valores son conjuntos y asigna
el resultado AUB a la variable C que es tambin un conjunto

Interseccin(A, B) toma los argumentos A y B cuyos valores son conjuntos y


asigna el resultado AB a la variable C que es tambin un conjunto

Diferencia(A, B) toma los argumentos A y B cuyos valores son conjuntos y


asigna el resultado A- B a la variable C que es tambin un conjunto

Combinacion(A, B) toma los argumentos A y B cuyos valores son conjuntos


disjuntos y asigna el resultado AUB a la variable C que es tambin un
conjunto (parecido a la unin, la diferencia es que se requiere que los
conjuntos A y B sean disjuntos)

Asigna(A, B) hace que el valor de la variable A de conjuntos, sea igual al


valor de la variable B tambin de conjuntos

Miembro(x, A) toma el conjunto A y x del tipo de los elementos de A y


devuelve un valor booleano: verdad si x esta en A, y falso si no lo esta

Mnimo(A) toma como argumento A y devuelve su menor elemento

Mximo(A) toma como argumento A y devuelve su mayor elemento

Igual(A, B) toma como argumentos los conjuntos A y B y devuelve un valor


booleano: si A y B tienen los mismos elementos, y falso en otro caso

Augusto Cortez Vsquez Pg. 5/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

La implementacin es directa, si todos los bits de A y B se corresponden entonces


son iguales:

int iguales(tconjunto A, tconjunto B)


{ return (A == B); }

Inserta(x, A) toma el conjunto A y x del tipo de los elementos de A y lo hace


elementos de A. Es decir A = A U {x }

Representacin de conjuntos mediante arreglos de bits


Un bit solo permite representar dos estados diferentes. Por supuesto, pueden representar atributos muy
variados, por ejemplo, ser hombre o mujer, adulto o nio, Windows o Linux, etc. Tambin sirve para
indicar si un elemento est o no dentro de un conjunto.

El array se utiliza para representar un conjunto de nmeros naturales (u otro tipo de datos cuyos elementos se
identifiquen por un nmero natural nico mediante una correspondencia) entre 0 y N, siendo N la capacidad
del array unidimensional (es decir, un vector); almacenar valores booleanos, esto es, 1 0.

Por ejemplo, suponer el conjunto universal formado por los enteros entre 0 y 4: U = {0, 1, 2, 3, 4}, y el
conjunto C = {1, 2}. Se representar de esta manera:

0 1 2 3 4
0 1 1 0 0

1 : indica que el elemento pertenece al conjunto.


0 : indica que el elemento no pertenece al conjunto.

Ahora bien, se ha dicho que se va a emplear un array de bits. Qu se quiere decir con esto?
Que no se va a emplear un array o vector como tal, sino un tipo de datos definido por el
lenguaje de programacin, que suele ocupar entre 8 y 64 bits, y por tanto podr incluir hasta
64 elementos en el conjunto. Por ejemplo, en C o Pascal se define un tipo que ocupa 8 bits:

Representacin de conjuntos mediante vectores


Un conjunto puede representarse como una secuencia de elementos en un vector, en
donde cada casillero contiene un elemento del conjunto. Los elementos pueden
disponerse en el vector de izquierda a derecha o viceversa en el orden que llegan.

Representacin de conjuntos mediante listas enlazadas


Un conjunto puede representarse como una lista enlazada, en donde cada nodo
contiene unos elementos del conjunto
Para las dems adiciones, CAB apunta al primer elemento y U apunta al ltimo elemento. U es
utilizado para que cuando se adicione nuevos elementos sean enlazados al ltimo nodo U.

Augusto Cortez Vsquez Pg. 6/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

CAB

Accin Vaco ( cab )


Inicio
Si cab = NULL
Retornar verdad
Sino
Retornar falso
Fin-si U
Fin

La accin vaco se utiliza para verificar si la lista esta vaca o no. La lista estara
vaca cuando la cabecera es nulo, en este caso retorna el valor verdad, en otro
caso retorna el valor falso

Accin Adiciona ( cab, Val ,u)


Inicio
n nuevo nodo
n-> valor Val
n-> sig Null
Si ( Vaco(cab ) )
cab n
Sino
u->sig = n
Fin_Si
u=n
Fin

Combinacion(A, B) toma los argumentos A y B cuyos valores son conjuntos y asigna


el resultado AUB a la variable C que es tambin un conjunto

Sea C1 y C2 conjunto representados mediante listas con cabecera Cab1,


Ult1 y Cab2, Ult2 que apuntan al primer y ultimo nodo de cada lista
respectivamente. Inicialmente Cab3 y Ult3 son nulos

Augusto Cortez Vsquez Pg. 7/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

// Recorre la lista 1 y copia sus elementos en la lista 3, luego


hace lo mismo con la lista 2

Accin Combinacion (Cab1, Cab2, Cab3 )


Inicio
p=cab1
Si Vaco(cab1 )
Cab3 = Cab2
Sino
Mientras (p Null )
Adiciona(Cab3, p->val , Ult3)
p p->sig
FinMientras
p=cab2
Mientras (p Null )
Adiciona(Cab3, p->val , Ult3)
p p->sig
FinMientras
FinSi
Fin
Interseccin(A, B) toma los argumentos A y B cuyos valores son
conjuntos y asigna el resultado AB a la variable C que es tambin un
conjunto

Sea C1 y C2 conjunto representados mediante listas con cabecera Cab1, Ult1 y


Cab2, Ult2 que apuntan al primer y ultimo nodo de cada lista respectivamente.
Se crea una lista L3 con Cab3 y Ult3 inicialmente son nulos

Se presentan aqu dos casos


Si L1 y L2 estan ordenados, se avanza en ambas listas simultneamente,
copiando los que estn en ambas listas en la lista 3, esto se repite hasta que se
llegue al final de una de las listas. Lo que queda de la otra lista, se desecha.
Esto nos da un algoritmo lineal O(N)

Si L1 y L2 no estn estan ordenados, se avanza en la primera lista. Por cada


nodo de la lista 1 se recorere toda la lista 2. Esto nos da un algoritmo lineal
O(N2)

Augusto Cortez Vsquez Pg. 8/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

Caso 1
// Recorre la lista 1 y la lista 2 simultaneamente, compara uno a uno sus
elementos copiando los que estn en ambas listas en la lista L3
inicialmente vacia

Accin Interseccion (Cab1, Cab2, Cab3 )


Inicio
p1=cab1
p2=cab2
Mientras (p1 Null y p2 Null )
Si(p1->val = p1->val)
Adiciona(Cab3, p1->val , Ult3)
Sino
Si(p1->val < p2->val)
p1 p1->sig
Sino
p2 p2->sig
FinSi
FinSi
FinMientras
Fin

Caso 2
// Si L1 y L2 no estn estan ordenados, se avanza en la primera lista. Por cada
nodo de la lista 1 se recorre toda la lista 2.

Accin Interseccion (Cab1, Cab2, Cab3 )


Inicio
p1=cab1
encontr = falso
Mientras (p1 Null )
P2=cab2
Mientras (p2 Null y no encontro )
Si(p1->val = p2->val)
Adiciona(Cab3, p1->val , Ult3)
Encontro = verdad
Sino
p2 p2->sig
FinSi
FinMientras
p1 p1->sig
FinMientras
Fin

Dispersin
ARCHIVOS

La ejecucin de un programa de software requiere que tanto ste como los datos que
necesite estn cargados en memoria principal del computador.

Esto presenta dos inconvenientes:

Augusto Cortez Vsquez Pg. 9/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

1 La memoria principal del computador es limitada, lo cual provoca que los


programas no puedan utilizar una cantidad de datos my grande.
2 La existencia de los datos en la memoria principal est limitada por la
ejecucin del programa, es decir, los datos desaparecen de la memoria
principal cuando el programa concluye su ejecucin, lo cual impide su
reutilizacin por l mismo o por otros programas

Para superar estos inconvenientes los datos se almacenan en dispositivos de


almacenamiento secundario, en recipientes denominados archivos (cintas, discos etc.), los
cuales a diferencia de la memoria principal, no es voltil, sino permanente.

Ventajas de utilizar archivos

1 Independencia de los datos respecto de los programas


2 Facilidad de acceso por distintos programas en diferentes momentos
3 La informacin almacenada es permanente
4 Posee una gran capacidad de almacenamiento

Definicin
Un archivo es una secuencia de datos que contienen informacin relacionada. Los datos
de un archivo se encuentran estructurados en registros.

Definicin
Un registro es una estructura de datos formada por uno o mas elementos denominados
campos que pueden ser tratados como una unidad desde el punto de vista conceptual.

Definicin
Un campo es una unidad bsica de un registro. Puede ser simple(entero, real o carcter) ,
o compuesto (consta de subcampos que a su vez pueden ser simples o compuestos.

Definicin
Una Clave es un conjunto de campos que identifica a un registro de los dems registros
del archivo. La clave debe ser diferente para cada registro del archivo. Pueden existir
varias claves dentro de un archivo. Una de ellas es denominada clave principal. Las
dems se denominan claves secundarias.

Ejemplo 1 Registro Alumno Registro Direccion


Carcter
Codigo calle
Nombre Entero
Facultad numero
FinReg Carcter
distrito[30]
FinReg
Registro Fecha
Entero
dia
Entero
mes
Entero
anio
FinReg
Augusto Cortez Vsquez Pg. 10/22
Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

registro con tres campos simples


Empleado
Carcter Codigo[6]
Carcter Nombre[39]
Fecha Fec_Nac
Direc Domicilio
FinReg

registro con dos campos simples y tres campos compuestos

ARCHIVOS ORDENADOS
En un archivo ordenado, los registros se encuentran ordenados fsicamente segn una
llave(valor de uno o varios campos)

La bsqueda en un archivo binario, puede hacerse

Bsqueda binaria.- Cuando se busca por la llave. Si la bsqueda se realiza a travs de

Bsqueda lineal.- Cuando se busca por cualquier otro campo.

Si se quiere leer el archivo ordenadamente, la operacin ser muy eficiente si el orden escogido
es la llave

Base de datos

Una base de datos o banco de datos es un conjunto de datos pertenecientes a un


mismo contexto y almacenados sistemticamente para su posterior uso. En la
actualidad, y debido al desarrollo tecnolgico de campos como la informtica y la
electrnica, la mayora de las bases de datos estn en formato digital (electrnico), que
ofrece un amplio rango de soluciones al problema de almacenar datos.

Diseo de base de datos

El proceso de normalizacin de base de datos consiste en aplicar una serie de reglas a


las relaciones obtenidas tras el paso del modelo entidad-relacion al modelo relacional.

Las bases de datos relacionales se normalizan para:

Evitar la redundancia de los datos.


Evitar problemas de actualizacin de los datos en las tablas.
Proteger la integridad de los datos.

En el modelo relacional es frecuente llamar tabla a una relacin, aunque para que una
tabla sea considerada como una relacin tiene que cumplir con algunas restricciones:

Cada columna debe tener su nombre nico.


No puede haber dos filas iguales. No se permiten los duplicados.

Augusto Cortez Vsquez Pg. 11/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

Todos los datos en una columna deben ser del mismo tipo.

En general, las primeras tres formas normales son suficientes para cubrir las
necesidades de la mayora de las bases de datos. El creador de estas 3 primeras formas
normales (o reglas) fue Edgar F.Codd

Primera Forma Normal (1FN)]

Una tabla est en Primera Forma Normal slo si

Todos los atributos son atmicos. Un atributo es atmico si los elementos del
dominio son indivisibles, mnimos.
La tabla contiene una clave primaria.
La tabla no contiene atributos nulos.
Si no posee ciclos repetitivos.

Una columna no puede tener mltiples valores. Los datos son atmicos. (Si a cada valor
de X le pertenece un valor de Y, entonces a cada valor de Y le pertenece un valor de X)

Esta forma normal elimina los valores repetidos dentro de una BD

Segunda Forma Normal (2FN)

Dependencia Funcional. Una relacin est en 2FN si est en 1FN y si los atributos que
no forman parte de ninguna clave dependen de forma completa de la clave principal. Es
decir que no existen dependencias parciales.

En otras palabras podramos decir que la segunda forma normal est basada en el
concepto de dependencia completamente funcional. Una dependencia funcional
es completamente funcional si al eliminar los atributos A de X significa que la
dependencia no es mantenida, esto es que A X, (X {A}) -x-> Y. Una dependencia
funcional es una dependencia parcial si hay algunos atributos que
pueden ser removidos de X y la dependencia todava se mantiene, esto es A X, (X
{A}) -> Y .

Tercera Forma Normal (3FN)

La tabla se encuentra en 3FN si es 2FN y cada atributo que no forma parte de ninguna
clave, depende directamente y no transitivamente, de la clave primaria.

Un ejemplo de este concepto sera que, una dependencia funcional X->Y en un esquema
de relacin R es una dependencia transitiva si hay un conjunto de atributos Z que no es
un subconjunto de alguna clave de R, donde se mantiene X->Z y Z->Y.

ARCHIVOS DISPERSOS
La dispersin es una tcnica empleada para realizar inserciones, eliminaciones y
bsquedas en un tiempo promedio constante. Aqu no son eficientes las operaciones
sobre arboles que requieren cualquier informacin de ordenamiento de datos. No se

Augusto Cortez Vsquez Pg. 12/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

cuenta con operaciones como en arboles como Buscar_Max, Buscar_Min, ni la


visualizacin de la tabla completa en orden.

Una estructura hash se construye con tres elementos bsicos :


Un vector direccionable mediante nmero de posicin ( un array ) capaz de almacenar N
elementos.

Una funcin de dispersin que nos permita a partir de la clave obtener el ndice donde
estar el dato asociado a esa clave. Es frecuente que existan dos claves distintas para las
que la funcin de dispersin produzca el mismo ndice. Esto se denomina colisin, y las
dos claves distintas que dieron lugar al mismo ndice, se dicen sinnimas respecto a la
funcin de dispersin utilizada.
Una funcin de resolucin de colisiones

Los problemas que se presentan al aplicar la tcnica de dispersin son

Elegir el tamao de la tabla

Elegir una funcin de dispersin apropiada

En los archivos dispersos, la direccin de cada registro se calcula aplicando una funcin
de dispersin Fd sobre uno o varios de sus campos, denominados campos de dispersin.
Los registros de un archivo disperso se encuentran distribuidos en forma aleatoria, es por
eso que tambin se les llama archivos aleatorios o archivos de acceso directo. El acceso a
los datos es muy rpido slo si se busca con la condicin de igualdad sobre el campo de
dispersin.

La funcin de dispersin se debe escoger de modo que los registros queden distribuidos
uniformemente en todo el archivo.

Ejemplo 2
Generalmente las llaves son cadenas de caracteres, cuando esto ocurre debe
escogerse una la funcin de dispersin apropiada.

Una opcin es sumar los valores ASCII de los caracteres de la cadena.

Supongamos que N = 10007 (numero primo)

Definimos L longitud de la llave

Si 1 L 8

La funcin ASC(X) devuelve un valor entero que nunca sobrepasa a 127.

La funcin Dispersin, adopta valores entre 0 y 1016, que es 127*8

Augusto Cortez Vsquez Pg. 13/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

Llave

Dispersin(llave,N)

Funcin Dispersin (llave, L)


Inicio
Vhalo dispersin = ASC(llave[1])
Para i desde 2 hasta N
Valor_ dispersin = Valor_Dispersion + ASC(llave[i])
FinPara
Dispersion = Valor_Dispersion Modulo N
Retorna Dispersion

Fin

ALGUNAS FUNCIONES DE DISPERSIN

Ejemplo 4
Consideremos La Facultad de Ingeniera de Sistemas numero de alumnos es 800 se
escoge como clave para identificacin su cdigo de alumno (CODALU) de 8 dgitos. El
intervalo de variacin del nmero de este documento es de millones. Por lo que no es
prctico tratar de manejar un archivo de acceso directo en el que se reserve espacio para
cada cdigo de 8 dgitos. Para solucionar el problema es necesario, a partir del cdigo,
generar un nmero seudoaleatorio de 1 a 800 tal que permita encontrar la informacin
del alumno.

I = ALEATORIO(CODALU)

Esto indica que a partir de CODALU se genera un numero seudoaleatorio I tal que 1 I
800

Mtodo de residuo
Se toma la clave y se divide por el tamao de la tabla o del archivo, y el residuo
determina la posicin relativa en la tabla o el archivo. Normalmente para
disminuir el numero de colisiones es conveniente usar un numero primo igual o
ligeramente menor que el tamao de la tabla.

M Tamao de la tabla
I= RESIDUO(CLAVE/M) + 1
Genera valores entre 0 y M-1
I Permite determinar la
posicin en la tabla

Augusto Cortez Vsquez Pg. 14/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

Mtodo de cuadrados
Se eleva la clave al cuadrado, se toman los nmeros centrales y se multiplican por
el factor de conversin, con el objeto de ajustarla el tamao de la tabla

Ejemplo 5
Dada la clave de un producto 8254

El factor de conversin es 0.4

8254 * 8254 =68128516


128*0.4=51.2
luego Aleatorio(8254) es 51

Mtodo de desfasamiento
Se Suman los nmeros de ambos extremos de la clave sobre los nmeros
centrales. Se suman y se multiplican por un factor de conversin. Esta tcnica se
puede emplear cuando la clave es bastante grande con respecto a tamao de la
tabla.

Ejemplo 6
Dada la clave de un producto 483259782
El factor de conversin es 0.4

259
483
782
524
la suma se multiplica por el factor de conversion

524* 0.4 = 209.6


luego Aleatorio(483259782) es 209

Mtodo del doblaje(folding)


Cuando la clave es muy grande, se divide en tres partes; los extremos se giran
sobre la tercera parte central, se suman y se multiplican por el factor de
conversin

Ejemplo 7
Dada la clave de un producto 170863519
El factor de conversin es 0.7

863
915
071

Augusto Cortez Vsquez Pg. 15/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

849
La suma se multiplica por el factor de conversin

849* 0.9 = 764.1


luego Aleatorio(17086335519) es 764

Mtodo de cambio de base de los nmeros


Es posible utilizar el cambio de base de los nmeros para generar un numero
seudoaleatorio. Uno de los cambios de base mas empleados debido a la facilidad
de conversin es expresar la clave en base 11.

Ejemplo 8
Dada la clave de un producto 59582

5 x 11 4 + 9 x 11 3+ 5 x 11 2+ 8 x 11 + 2
Este nmero se reduce mediante cualquiera de los mtodos anteriores
Mtodo de divisin de polinomios
A partir de la clave numrica se genera un polinomio P(x), este polinomio se divide por
otro polinomio Q(x) previamente establecido, el cual genera un polinomio R(x) ; los
coeficientes de R(x) se multiplican por el factor de conversin para generar la posicin

Ejemplo 9
Dada la clave de un producto 359849 se quiere generar una posicin en un archivo de
700 registros

P(x) = 3x 5 + 5 x 4+ 9 x3+ 8x2 + 4x + 9


Se divide entre un polinomio Q(x) que siempre va a ser el mismo. Si consideramos
Q(x)= 3x3+ 2x2+ x + 2, entonces R(x) = x2 + 5x
Con base al factor de conversin 0.7 la posicin de almacenamiento es 73

Manejo de claves alfanumricas


Cuando la clave es alfanumrica, es preciso primero convertirla a numrica, para ello
existen varios procedimientos. Por ejemplo asignar a cada smbolo un digito que lo
identifique

Ejemplo 10
Dada la clave ABANO en un valor numrico mediante el empleo del cdigo ASCII, cdigo
EBCDIC o posicin en el alfabeto

A = 065
B = 066
A = 065
N = 078
O = 079

La clave numrica equivalente es 065066065078079


Si utilizamos el cdigo EBCDIC, en hexadecimal tendremos C1C2C1D5D6

Augusto Cortez Vsquez Pg. 16/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

Este cdigo puede transformarse a su equivalente en base 10, o tambin se pueden considerar
solo los dgitos 12156

Colisin
En este caso hay que resolver las colisiones
La resolucin depender de la tcnica de dispersin

Dispersin cerrada: Resolucin por examen lineal


Resolucin por examen cuadrtico
Resolucin por redispersion

Dispersin abierta
Resolucin mediante rea de desborde

Hay varias tcnicas para gestionar las colisiones:

Direccionamiento abierto. Cuando se produce una colisin, el sistema hace


una bsqueda lineal a partir del bloque al que iba destinado el registro para
encontrar un agujero donde insertarlo. Si se llega al final del archivo sin
encontrar un agujero, se contina la bsqueda desde el principio.
Encadenamiento. En lugar de buscar un agujero libre, lo que se hace es
disponer de una serie de bloques como rea de desborde. Cuando se produce
una colisin, el registro se sita en el rea de desborde y mediante un puntero
en el bloque colisionado, se apunta a la direccin del bloque de desborde y la
posicin relativa del registro dentro del bloque. Adems, todos los registros
que han colisionado en un mismo bloque se van encadenando mediante
punteros.
Dispersin mltiple. Esta tcnica de resolucin de colisiones consiste en
utilizar una segunda funcin de dispersin cuando la primera ha producido
una colisin. El objetivo es producir una nueva direccin que no provoque
colisin. Normalmente, la segunda funcin da una direccin de bloque situada
en un rea de desborde.

DISPERSION CERRADA (ENCADENAMIENTO EN LA MISMA


AREA DE DIRECCIONAMIENTO)
Cuando ocurre una colisin se busca una celda en la misma rea de direccionamiento
(vector) y para ello se utiliza cualquiera de las tcnicas de examen: lineal, cuadrtico o
redispersion.

Insercin de un elemento
Resolucin de colisiones mediante examen lineal

Augusto Cortez Vsquez Pg. 17/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

Accion InsertarClaveLineal( A[ ] : TABLA_DISP, K:clave, N : entero)


Inicio
i = (K )
Si (A[i] = K )
Escribir la clave esta en la posicion , i
Sino
Si (A[i] esta vacio )
A[i] = K
Sino
di= i+1
Mientras (A[di ] K A[di] di i )
di = di +1
Si (di = N+1 )
di = 1
FinSi
FinMientras
Si (A[di] = K )
Escribir la clave esta en la posicion , di
Sino
Si (di = i )
escribir el arreglo no tiene casillas vacias
Sino
A[di] = K
FinSi
FinSi
Finsi
FinSi
Fin

Entrada : A: vector de dispersin de orden N


K: clave a insertar

Salida : Ai : vector de dispersin de orden N

A,N,K Ai

DISPERSION ABIERTA (ENCADENAMIENTO SEPARADO)


Consiste en tener una lista de todos los elementos que se dispersan en el mismo valor

Ejemplo 11
Supongamos la funcin de dispersin modulo 10
Dispersin (llave) = llave modulo 10
Aunque N =10 no es primo

Augusto Cortez Vsquez Pg. 18/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

Insercin de un elemento
Resolucin de colisiones mediante examen cuadrtico

Entrada : A : vector de dispersin de orden N


K : clave a insertar

Salida : Ai: vector de dispersin de orden N

A,N,K Ai


D es un vector de nodos
Registro Nodo
Clave
Nodo * Cab
Fin Nodo

A
0 20 0

1 41 1 91

4 64 4 54 84

7 67 37 97

9 79 9 19 89

La bsqueda de una llave se realiza secuencialmente en la lista asociada a la llave.

Augusto Cortez Vsquez Pg. 19/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

As la entrada K contiene un puntero que es cabecera de la lista de claves con la misma


funcin de dispersin

Si K = 57 y (K) = 7
como A[7] = 67 esta ocupada, entonces la clave 57 se adiciona a la lista de
Si K = 88 y (K) = 8
Como D[8] = esta vaca, entonces la clave 88 se coloca en D[8]

Registro Nodo
Tipo Valor Valor
Nodo *Sig
FinRegistro

PtroNodo puntero a Nodo

TABLA_DISP : ARREGLO[ indice ] de PtroNodo

Funcion BuscarClave( A[ ] : TABLA_DISP, K:clave) :puntero a nodo


Inicio
i = (K )
Si A[i] =K
retornar i
sino
n = A[i] Sig
encontro = falso
Mientras (n nulo encontro)
Si( n valor = K )
Encontro = verdad
Sino
n = n Sig
FinSi
FinMientras
Retornar n
FinSi
Fin

Desventajas de la dispersin
Aunque la dispersin es el mtodo de acceso directo ms rpido a travs del campo de
dispersin, no es muy til cuando tambin se quiere acceder al archivo a travs de otro
campo. Ya que la mayora de las funciones de dispersin que se utilizan no mantienen
el orden entre los registros, tampoco es til cuando se quiere leer los registros
ordenadamente.

Cuando se quiere hacer una bsqueda por un campo que no es de dispersin, resulta tan
costoso como realizar la bsqueda en un archivo desordenado. En este caso se prefiere

Augusto Cortez Vsquez Pg. 20/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

realizar una bsqueda secuencial. Asimismo cuando se quiere eliminar un registro, se


presentan dos casos: El registro esta en el bloque, o se encuentra en una lista de
desborde. Si esta en el bloque, se elimina el registro del bloque y se remplaza por un
registro de la lista de desborde. Si el registro a borrar est en la lista de desborde, slo
hay que eliminarlo de ella. En este caso, ser necesario mantener una lista enlazada de
posiciones de desborde no utilizadas. Si al actualizar un registro se modifica el campo
de dispersin, es muy probable que el registro tenga que cambiar de posicin, por lo
que habr que borrarlo e insertarlo de nuevo.

Ejercicios propuestos
1 Una aplicacin de los algoritmos voraces lo constituye el algoritmo de Kruskal
y algoritmo de Prim. Investigue que trata cada uno de los algoritmos. De una
especificacin e implementacin da cada uno. Proporcione un ejemplo de su
funcionalidad.

2 Considere una competicin mundial en la cual hay dos equipos A y B, que


juegan un mximo de 2n -1 partidas, y en donde el ganador es el primer
equipo que consiga n victorias. Suponemos que no hay posibilidad de empate y
que los resultados de todos los partidos son independientes y que para
cualquier partida dada hay una probabilidad constante P de que A gane, y por
tanto una probabilidad constante Q = 1-P de que gane B. Sea P(i,j) la
probabilidad de que el equipo A gane el campeonato, cuando todava le falta i
victorias mas para conseguirlo, mientras que el equipo B necesita j victorias
para ganar. Por ejemplo, antes del primer partido del campeonato, la
probabilidad de que gane el equipo A es P( n , n): ambos equipos necesitan
todava n victorias para ganar el campeonato. Si A necesita cero victorias mas,
entonces lo cierto es que ya ha ganado el campeonato y por tanto P(0, i ) = 1
con 1 <= i <=n. De manera similar, si el equipo B necesita cero victorias mas,
entonces ya ha ganado el campeonato y por tanto P(i,0) = 0, con 1 <= i <=n .

Como no se puede dar una situacin en la que A y B ganen todas las


partidas que necesitan P(0,0) = 0. Carece de significado dado que A gana
cualquier partida con una probabilidad P y pierde con una probabilidad Q

P(i,j) = P P(i-1,j) + Q P(i,j-1) para i >=1 y j >=1

Construya un algoritmo voraz para hallar P(n,n)

3 Construya los algoritmos para manejar TADs conjuntos, con


representacin de arreglos :
a) Miembro(A,a)
b) Union(A,B)
c) Interseccion(A,B)
d) Diferencia(A,B)
e Complemento(A,B)

4 Construya los algoritmos para manejar TADs conjuntos, con


representacin de listas :
a) Miembro(A,a)

Augusto Cortez Vsquez Pg. 21/22


Algoritmos voraces - TAD Conjuntos y dispersin Algortmica III 2017 -I

b) Union (A, B)
c) Interseccion(A,B)
d) Diferencia(A,B)
e Complemento(A,B)

5 Una aplicacin de algoritmos voraces lo constituye el codigo


de Huffman. Investigue de que se trata.
6 Cuales son los elementos bsicos para construir una estructura HASH
7 Cuales son las tcnicas para resolver colisiones
8 Cuales son las desventajas de utilizar dispersin
9 Defina primera forma normal, segunda forma normal y tercera forma
normal
10 Proponga un ejemplo en el que ilustre la primera forma normal, la
segunda tercera forma normal
11 Cuales son las ventajas y desventajas de utilizar archivos
12 Que funciones de dispersin conoce. Proporciones un ejemplo de cada
una de ellas
13 Construya una aplicacin para pasar los elementos de un rbol Binario
ordenado a una tabla de dispersin cerrada.
14 Implemente una aplicacin que administre mediante un men las
operaciones de bsqueda, insercin y eliminacin y modificacin en una
tabla de dispersin abierta

REFERENCIAS BIBLIOGRAFICAS
1. [HERNANDEZ 2001] Hernandez, R.; Lzaro, J.C.; Dormido, R.; Ros, S. Estructura de Datos y
Algoritmos; Prentice Hall 2001, Madrid Espaa.
2. [BRASSARD 1998] Brassard,G. Bratley,P. Fundamentos de Algoritmia, Prentice Hall 1998
Madrid
3. [CORTEZ 1999] Cortez Vasquez,Augusto. Matematica Discreta, UNMSM FISI Lima 1999.
4 [CORTEZ 2002] Cortez Vsquez,Augusto. Algoritmica y Programacin, UCSS Lima 2002.
5 [CORTEZ 2002] Cortez Vasquez,Augusto. Estructura de datos y algoritmos, estructuras no lineales,
URP Lima 2002.
6 [GRASSMANN 1996] Grasssmann W. ,Tremblay J. Matematica Discreta y Logica; Prentice Hall
1996.
7 [GRIMALDI 1994] Grimaldi Ralph Matemticas Discreta y Combinatoria; Addison-Wesley 1994
8 [GUTIERREZ 1993] Gutirrez Xavier Franch Estructuras de datos, Especificacin, diseo e
implementacin; Edicin UPC Barcelona Espaa 19934
9 [JAIME 2002] Jaime, Alberto. Estructuras de datos y Algoritmos; Prentice Hall 2002 Bogota D.C.
10 [JOHNSONBAUGH 1999] Johnsonbaugh Richard Mateamticas Discretas; Prentice Hall 1999,
Pags.
11 [LIPSCHUTZ 1987] Lipschutz Seymour Estructura de datos, Mc Graw-Hill,1987

12 [CARMONA 1999] Carmona, Poyato Angel y Otros Estructuta de Datos, Caja Sur Universidad
de Cordova Espaa 1999
13 [SEDGEWICK 1993] Stroustrup Bjarne El C++ Lenguaje de programacion; Addison-Wesley
1993 , Wilmington-Delaware EUA.
14 [TENEMBNAUM 1993] Tenembaum,A.Langsam Y.Augenstein M. Estructuras de datos en C,
Prentice Hall 1993.

15 [WEISS 2000] Weiss, Mark Allen. Estructuras de datos en JAVA; Addison-Wesley, 2000.

Augusto Cortez Vsquez Pg. 22/22

Vous aimerez peut-être aussi