Está en la página 1de 6

TAREA ALGORITMOS

VORACES
Metodologa de la programacin

Francisco Javier Moraleda Jimnez


ngel Domingo Varea Fuentes
Marina Belmonte Candeleda

ndice
1.

Algoritmos voraces ................................................................................................................ 2


1.1

Resolver un algoritmo voraz ......................................................................................... 2

1.2

Elementos caractersticos ............................................................................................. 3

1.3

Coste computacional ..................................................................................................... 3

2.

Planteamiento del problema ................................................................................................ 3

3.

Algoritmo en Pseudocdigo .................................................................................................. 4

1. Algoritmos voraces
Los algoritmos voraces son aquellos que para poder resolver un problema siguen un
procedimiento consistente en buscar la opcin ms ptima en cada momento para llegar a
resolver el problema general. Es a su vez el algoritmo ms sencillo de disear y fcil de
comprobar si realmente ha sido bien diseado. Normalmente se aplica a los problemas de
optimizacin. En alguna ocasin no se logra encontrar ninguna solucin que sea ptima, pero
en estos casos se permite encontrar una solucin aproximada con un coste computacional
bajo.

1.1 Resolver un algoritmo voraz


Dado un conjunto finito de entradas C (un vector, elementos de una mochila,) un
algoritmo voraz se encarga de devolver un subconjunto de C tal que este subconjunto cumple
con las restricciones dadas por el enunciado (elementos ptimos de la mochila, elementos del
vector que cumplen una condicin,), pueden aparecer varios subconjuntos de C tales que
cumplan las restricciones dadas, pero si uno de ellos consigue maximizar o minimizar el
resultado, se escoge ste como solucin y se le denomina solucin ptima.
Los algoritmos voraces se aplican normalmente a problemas de optimizacin, en la
bsqueda del valor ptimo de una funcin. Estos algoritmos son fciles de disear e
implementar y suelen ser muy eficientes. Las soluciones se pueden representar como una
secuencia de decisiones, que sern irreversibles. Respecto al alcance, una aproximacin voraz
consiste en que cada elemento se evala una nica vez, pudiendo ser:
- Seleccionado, por lo que forma parte de la solucin.
- Descartado, no forma parte de la solucin.

Por tanto, el funcionamiento del mismo es escoger en cada caso el mejor


elemento de los Candidatos para resolver el enunciado. Se elimina ste elemento de
los posibles candidatos, se actualizan los candidatos y se comprueba si el elemento es
factible o no, si lo es se escoge y se aade a Solucin, si no se descarta y se repite el
bucle hasta que se llega a algn caso en que la factibilidad indica que se termine la
ejecucin o se acabe el vector candidatos. El trmino voraz deriva de la forma en la que se
tratan los datos: se ordenan la lista de candidatos, y se seleccionan o descartan los elementos
una sola vez.

1.2 Elementos caractersticos


Los elementos en los que se divide un algoritmo voraz, son:
-Candidatos: Conjunto de elementos de entrada.
-Ordenacin: Indica cmo se van a ordenar los candidatos para comprobar si
cumplen las condiciones de la solucin.
-Factibilidad: Informar de si alguno de los casos incumple la condicin de
solucin.
-Seleccin: Solo necesaria si la ordenacin esttica es insuficiente.
-Solucin: Es aquel subconjunto que resuelve el enunciado de la forma ms
ptima posible o se encarga de avisar de que no hay solucin.

1.3 Coste computacional


El coste computacional de estos algoritmos depende de dos factores:
Del nmero de iteraciones, que depende del tamao de la solucin y del tamao del conjunto
de candidatos.
Del coste de la funcin de solucin, seleccin y factibilidad:

La funcin de solucin y factibilidad suelen ser operaciones de tiempo constante o


dependientes de la longitud de la solucin.
La funcin de seleccin depende de la longitud del conjunto de candidatos.
Normalmente se prepara el conjunto de candidatos antes de entrar en el bucle para
rebajar el coste de la funcin de seleccin y conseguir que ste sea lo ms cercano
posible a constante (bajo coste).

2. Planteamiento del problema


En primer lugar tenemos a los candidatos de nuestra solucin que son los pares de
letras pertenecientes a dos cadenas distintas.
En segundo lugar tenemos la ordenacin, que consiste en que los caracteres de cada palabra
estarn ordenados por orden alfabtico desde la a hasta la z.
En tercer lugar planteamos nuestro esquema de resolucin, que va a ser las siguientes:
- Contador: Inicialmente a 0 y que es el encargado de decirnos la similitud entre dos
palabras.
- ndices: Que tendremos dos (a y b) que inicialmente valdrn 0 y que se utilizarn para
recorrer las dos palabras a comparar.

- Palabras o Cadenas de caracteres: Tendremos a una "palabra1" y a otra "palabra2"


con sus respectivos "tamao1" y "tamao2".
- Factibilidad: Tendremos en cuenta que si la palabra1[a] es igual a palabra2[b]
entonces aumentar el contador y aumentar contadores.
- Seleccin: (-), no se selecciona el candidato ms ptimo, sino el primero que cumpla
con la factibilidad.
- Solucin: Cuando se haya recorrido una de las dos palabras, entonces mostrar
contador, es decir si ((a==tamao1-1) or (b==tam2-1) {MOSTRAR contador}.

3. Algoritmo en Pseudocdigo
En primer lugar el mtodo ordenar:
Entorno: contadores i,j,aux son nmeros enteros
Parmetros: palabra[], tam (n entero).
Para "i" hasta longitud_palabra con Incremento 1
Para " j" hasta longitud_palabra con Incremento 1
Si palabra[j] > palabra[j+1]
Entonces aux = palabra[j]
palabra[j]=palabra[j+1]
palabra[j+1] = aux
fin si

El tamao del problema en el mtodo ordenar sera la longitud del vector, que la podemos
llamar n.
Como vemos, hay un for dentro de otro por lo que el coste de cada bucle se multiplica y a lo
sumo tendremos n2. El orden asinttico superior sera el n2 porque en el peor de los casos
tendremos que recorrer los dos vectores probando todas las posibles combinaciones. Pero
tambin el orden asinttico inferior aunque tuviera la palabra o el vector totalmente ordenado
su orden sera n2 ya que tiene que hacer las comprobaciones igualmente porque no lo sabe el
programa si lo est o no ordenado en un primer momento.
En la funcin ordenar, el tamao del problema sera la longitud del vector, a la que llamaremos
n.

A continuacin el algoritmo de similitud(incluido en el main)

Entorno: contadores x,y,z,cont son nmeros enteros (inicialmente 0).


Mientras x < longitud1
Entonces y=z;
Mientras y < longitud2
Entonces si palabra1[x]==palabra2[y]
Entonces x++,z++,cont++;
finsi
y++
x++
Escribe: El grado de similitud entre las dos palabras es de "cont".

Nota: las variables longitud1 y longitud2 es el tamao de las palabras1y2 respectivamente.


En este mtodo de similitud el tamao del problema es palabra1 y palabra2. Como vemos hay
un while dentro de otro por tanto se multiplica el orden de cada uno y obtenemos que el
orden asinttico superior es de palabra1*palabra2. Por contra y a diferencia del mtodo
anterior, en el caso del orden asinttico inferior, si fuera el caso de que una palabra fuera
subconjunto de la otra , el orden sera el mximo de palabra1 y palabra2, que es menor que
palabra1*palabra2.