Вы находитесь на странице: 1из 2

Anexo: Respuestas a las preguntas planteadas

Gonzalez Bascoy, Pedro


pedro.gonzalez.bascoy@rai.usc.es
Universidad de Santiago de Compostela, Galicia
Martes, 9 de Diciembre de 2014

Qu
e representan las componentes del vector s

Las componentes del vector s representa la tarea asignada por la persona que ocupa la
posicion i-esima del vector. Por ejemplo:
Si tenemos un vector s = {3, 2, 1}, podemos concluir que a la persona n
umero 1 se le ha
asignado la tarea 3, a la persona 2 se le ha asignado la tarea 2 y por u
ltimo a la persona 3
se le ha asignado la tarea 1. Generalizando a la persona i-esima se le asigna la tarea si .

Qu
e funci
on realiza la asignaci
on de una tarea a una persona

La funcion que va asignando las tareas a las personas es la funcion Generar. Cada vez
que se llama a esta funci
on, se le suma una unidad al elemento que indique la variable con
nombre nivel. Adem
as tambien calcula la ganancia actual y actualiza el vector usados

Qu
e comprueba la funci
on MasHermanos

La funcion MasHermanos lo que hace es comprobar si quedan asignaciones sin probar, las
cuales ser
an pesquisadas m
as adelante con la vuelta atras. Se explica mejor con un ejemplo
con un algoritmo de permutaciones (que en realidad, es lo que hace este programa). Imaginemos que tenemos un vector p = {a, b, c} al que le queremos hacer todas las permutaciones.
MasHermanos nada mas comenzar nos devolvera verdadero, ya que tenemos tres posibles
asignaciones para la primera vez: a, b, c. Si el primer elemento es a, en la segunda vuelta
la funcion nos seguira devolviendo verdadero, ya que quedaran por probar b y c. En la
u
ltima iteraci
on ya nos devolvera falso, puesto que solo podemos asignar c. Desde este
punto volveramos hacia atr
as.

Cu
al es el objetivo de la funci
on Retroceder

Retroceder sirve para recorrer todas las posibles soluciones al problema. En el caso de
el programa, la primera soluci
on encontrada sera s = {1, 2, 3}. Una vez llegados a este
punto, el algoritmo de BackTracking llamara a la funcion Retroceder que lo que hara
sera deshacer la u
ltima asignaci
on y explorar la posible solucion sustituyendo esa tarea por
la de un hermano. En nuestro caso, la siguiente solucion parcial es s = {1, 3, 2}.

Las conclusiones en cuanto a la complejidad de la tarea,


cuando se emplea el vector usada, y cuando no se emplea.

Este algoritmo es altamente ineficiente, de hecho su complejidad es superior a la complejidad


del orden de O( n! ) ya que lo que hace es hacer recorrer todas las posibilidades (permutaciones) de asignaci
on de tareas, pero de una forma mas ineficiene, ya que va comprobando
si la asignaci
on que hace de una tarea a la persona i-esima ya esta asignada a otra. Por si
fuese poco, la funci
on Criterio recorre en el peor de los casos los n elementos de s para la
comprobaci
on, es decir que la funci
on es O( n). Cuando se implementa con la solucion del
vector usadas, esta funci
on pasa a ser de orden constante, O( 1 ).