Académique Documents
Professionnel Documents
Culture Documents
Objetivos de aprendizaje
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:
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
Ejemplo 2:
Problema de la mochila
Oi i= 1..n
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
Para elegir el mejor objeto restante, se pueden utilizar tres criterios descritos mediante
las siguientes funciones
Funcin de seleccin 1, 2, 3
1
Objeto 03 , 05 ,2 04 total
Objeto 01 , 02 , 03 , 04 total
Valor 20 30 66 40 156
Peso 10 20 30 40 100
Objeto 03 , 01 , 02 , 05 total
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.
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
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
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
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:
CAB
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
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
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.
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.
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.
ARCHIVOS ORDENADOS
En un archivo ordenado, los registros se encuentran ordenados fsicamente segn una
llave(valor de uno o varios campos)
Si se quiere leer el archivo ordenadamente, la operacin ser muy eficiente si el orden escogido
es la llave
Base de 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:
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
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)
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 .
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
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
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.
Si 1 L 8
Llave
Dispersin(llave,N)
Fin
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
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
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
Ejemplo 7
Dada la clave de un producto 170863519
El factor de conversin es 0.7
863
915
071
849
La suma se multiplica por el factor de conversin
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
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
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 abierta
Resolucin mediante rea de desborde
Insercin de un elemento
Resolucin de colisiones mediante examen lineal
A,N,K Ai
Ejemplo 11
Supongamos la funcin de dispersin modulo 10
Dispersin (llave) = llave modulo 10
Aunque N =10 no es primo
Insercin de un elemento
Resolucin de colisiones mediante examen cuadrtico
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
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
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
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.
b) Union (A, B)
c) Interseccion(A,B)
d) Diferencia(A,B)
e Complemento(A,B)
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.