Professional Documents
Culture Documents
Tal como hemos prometido, aquí les proveemos una solución para el problema del
Número Bacon. Desafortunadamente, no podemos grabar la solución en un buen
video, por eso dejamos la explicación escrita.
Kevin Bacon es un actor y ha actuado en muchas películas. Este problema del
Número Kevin Bacon resuelve la pregunta de qué tan cerca se encuentra un actor a
Kevin Bacon. Un actor cualquiera ha actuado en conjunto con Kevin Bacon? O
acaso él actuó con alguien que lo hizo con Kevin Bacon? Así que existe un actor en
el medio, o tal vez existen dos actores en el medio o tres. En Hollywood existen
actores que tienen 11 actores entre Kevin Bacon y ellos mismos.
Por definición definimos que Kevin Bacon tiene un Número Bacon equivalente a 1.
Todos los que han actuado directamente con Kevin Bacon tienen el Número 2.
Aquellos que han actuado con un actor Número 2 tienen el Número 3, etc. Es
importante dar cuenta de que cada actor tiene sólo un Número Bacon, a saber el
más alto posicionado (el Número más bajo, numéricamente). Así que si alguna vez
actuaste con un Número 2, entonces tu Número es 3, incluso si luego actuaste con
actores Número 4 y 5. Esto también aplica en forma viceversa. Si otros con un
número Bacon mayor actuaron contigo, sus Números transforman el tuyo en
Número +1; en este caso 4. Y eso significa que todas estas co-estrellas
posiblemente también disminuyan su Número Bacon. Entonces existe un loop con
feedback - El Número Bacon nunca se arregla, pero está constantemente
cambiando.
En segundo lugar, también por definición, el Número Kevin Bacon es solo calculado
basándose en actores que han actuado juntos en películas. Entonces si alguien
tiene un Número Bacon 6, pero tiene un amigo personal, cuyo amigo personal de
Kevin Bacon (entonces segunda línea), o son miembros del mismo club, o
comparten intereses, ninguna de estas cosas es tomada en consideración para este
problema. Entonces solamente a través de películas y co-estrellas puede cambiar
un Número Bacon.
En primer lugar, nos sumergimos en un ejemplo muy simple; una vez que lo hemos
entendido, podemos escalar hacia uno más complicado. En el libro de trabajo
“Número Bacon - Archivo Original.xslx” tenemos 3 hojas: una hoja con actores
(Tabla 1), una hoja con películas (Tabla 2) y una hoja listando los actores que
actuaron en qué película (Tabla 3), cada uno está demostrado debajo:
Tabla 1 - Actores dentro de la hoja de Actores
Tabla 2 - Películas dentro de la hoja de Películas
Tabla 3 - Hoja de Película_Actor, combinando actores y películas en las que
actuaron.
Hasta aquí todo bien entonces. Esto es lo que ya han visto múltiples veces en los
videos. Podemos hacer relaciones en tal pequeño set de datos hecho a mano como
sigue:
Kevin Bacon es Número 1 por definición. Luego Julianne Moore, Emma Stone,
Denise Richards y Bill Murray son Número 2 ya que actuaron todos juntos con Kevin
Bacon. Scarlett Johansson está relacionada a Kevin Bacon a través de Bill Murray y
Julianne Moore. El número Bacon es la conexión más corta a Kevin Bacon,
entonces necesitamos chequear si la ruta a través de Bill es más corta, teniendo un
Número Bacon mejor ranqueado que Julianne. Entonces buscamos el mínimo
Número Bacon entre Bill y Julianne. Ya que ambos tienen un Número 2, no existe
diferencia. Y el Número de Scarlett será 2 + 1 = 3. Finalmente Joseph Gordon-Levitt
es el único conectado a Kevin a través de Julianne entonces obtiene un Número
Bacon de 3.
Como podemos ver, para Scarlett Johansson existen dos posibles rutas hacia Kevin
Bacon, via Bill y via Julianne. Cuantos más actores y películas involucradas, más
posibles rutas encontrarán. De todas maneras, estamos buscando el camino más
corto que nos da como resultado el Número Bacon mayor ranqueado. Esto es
exactamente el desafío donde las soluciones anteriores fallaron. Entonces, ¿cómo
podemos resolver esto?
Primero podemos indicar a Kevin Bacon en la Tabla 1. Luego agregar en la celda B2
la fórmula =SI(A2=”Kevin Bacon”,1,999) y arrastrarla hacia abajo hasta B8 usando el
mango de relleno. El resultado está demostrado abajo en la Tabla 4:
Ahora vemos, por ejemplo, que “Crazy Stupid Love” tiene un Número Bacon 1 y un
Número Bacon 999. Solamente estamos interesados en el número más bajo
posible, ya que indica el camino más corto hacia Kevin Bacon.
Entonces lo que necesitamos es una función que busca el valor mínimo
perteneciente a una determinada película. Noten que no podemos hacer esto con
una función BUSCARV, ya que asume que cada película ocurre una única vez en la
lista. No se toma en cuenta el hecho de que existen múltiples hitos, entonces solo
devuelve el primero y nunca sabremos si se trata del valor mínimo. Lo que en
verdad necesitamos es una función que tome en cuenta todos los posibles hitos y
evalúe el valor mínimo. Entonces una especie de función condicional Mínima, un
Mínimo si, un MINSI. De todas maneras, Excel tiene un SUMAR.SI, no tiene una
función MINSI. Afortunadamente, podemos programar esta función nosotros mismos
a través de fórmulas matriciales.
Entonces lo que queremos es que Excel evalúe todas las películas en la columna B,
seleccione todos los Números Bacon de la Columna C que pertenezcan a una
determinada película y luego defina el Número Bacon mínimo. Para ello, vamos a la
página “Película” y agregamos en la celda B2 la fórmula
=MIN(SI(A2=Movie_Actor!$B$2:$B$12,Movie_Actor!$C$2:$C$12,999)) y
arrastramos esta fórmula hacia B5 (vean la Tabla 6). No olviden presionar
ctrl+shift+enter para ingresar esta fórmula, que adicionará los paréntesis exteriores
automáticamente.
Ahora estamos muy cerca. Indicamos a Kevin bacon en la hoja de Actor, asignamos
los Números Bacon de cada actor a las películas en la hoja de Película_Actor, luego
buscamos para cada película el mínimo Número Bacon y sumamos este número al
de la hoja de Películas.
Entonces ahora sabemos que Crazy Stupid Love y Wild Things tienen como Número
Bacon 1. Entonces la siguiente tarea es alimentar este conocimiento devuelta a los
Números Bacon de actores. Sabemos que Julianne Moore, Bill Murray, Emma Stone
y Denise Richards actuaron juntas con Kevin Bacon en estas películas y entonces
deberían tener como Número Bacon 2.
Entonces vamos nuevamente a la hoja Película_Actor y agregamos una fórmula
extra en el rango D2:D12. Aquí buscamos el Número Bacon de la película de la
columna B de la hoja de Películas. La fórmula en D2 es
=BUSCARV(B2,Movie!$A$1:$B$5,2,FALSO)+1 y arrastramos esto hacia abajo
usando el mango de relleno. Noten que agregamos 1 al resultado del BUSCARV
que incrementa el Número Bacon en 1 reflejando el paso entre Kevin Bacon y cada
actor. Como pueden ver en la Tabla 7, todos los actores que actuaron en recibieron
el Número 2, incluyendo a Kevin Bacon (en el que vamos a reparar más tarde).
Tabla 7 - Hoja de Película_Actor
En la hoja de Actor ahora buscamos el Número Bacon del actor de la columna D en
la hoja de Película_Actor. Noten que no podemos usar una función BUSCARV,
porque cada actor puede tener múltiples y distintos Números Bacon; comparen
Julianne Moore en las celdas D3 y D11 donde tiene Números Bacon 2 por la
película Crazy Stupid Love y un Número 1000 por la película Don Jon. Entonces
desde que requerimos el valor mínimo, debemos aplicar una fórmula similar como
hemos hecho antes en la hoja de Película. Nuevamente queremos tener una función
si mínima, para devolver el mínimo Número Bacon perteneciente a un actor
específico.
A continuación nos movemos hacia la página de Película y determinamos el menor
Número Bacon para cada película. Entonces la celda C2 obtiene la fórmula
=MIN(SI(A2=Película_Actor!$B$2:$B$12,Película_Actor!$E$2:$E$12,999))
(recuerden usar ctrl+shift+enter). El resultado es mostrado abajo en la Tabla 10:
Tabla 10 - Hoja de Película
Nuevamente asignamos el Número Bacon de la película a la hoja Película_Actor
ingresando una fórmula en la celda F2 y arrastrandola hacia abajo a F12 usando el
mango de relleno. En la celda F2 la formula lee:
=BUSCARV(B2,Movie!$A$1:$C$5,3,FALSO)+1 y terminamos con los resultados
mostrados abajo en la Tabla 11:
Finalmente, vamos a la hoja de Actor y en la celda D2 aplicamos la fórmula
=MIN(C2,MIN(IF(A2=Película_Actor!$A$2:$A$12,Película_Actor!$F$2:$F$12,999)))
y la arrastramos hasta D5. Finalmente, hemos encontrado satisfactoriamente todos
los
Números Bacon de los actores en este ejemplo pequeño, como demuestra la Tabla
12 debajo:
Tabla 12 - Resultado final mostrando los Números Bacon en la Hoja de Actor.
Conclusión
Este método es muy incómodo. La solución no es directa, pero necesita iteraciones.
El Número Bacon puede cambiar en cada paso porque se encuentran nuevas
conexiones más cortas. Además, hacemos un loop sobre las 3 tablas en cada paso
y conectamos esos con funciones BUSCARV y “MINSI”. Finalmente, para cada
Paso Bacon, necesitamos columnas extras para evaluarlas. Entonces la solución
hasta aquí es lejos de la óptima, ya que tenemos que saber en anticipación cuál es
el Número Bacon máximo y luego agregar esa cantidad de columnas para
realmente encontrarlo.
Otros alcances son más eficientes, por ejemplo bases de datos como NEo4j que
son realmente diseñadas para encontrar relaciones como estas, o guiones en
lenguajes de programación como Python para evaluarlos en forma diferente. (Noten
que nuestra solución Python es todavía demasiado Excel y podría ser mucho más
eficiente si lo hicieran completamente fuera de Excel).
Un alcance Excel más eficiente para la solución descripta arriba?
Es posible crear una solución más eficiente completamente dentro de Excel y
resolver los Números Bacon para los actores en una tabla simple, llamada
Película_Actor, y con solo dos columnas, relacionadas entre sí. Los desafiamos a
hacerlo ustedes mismos. Lo que podrían hacer es definir dos columnas: Columna C
es el Número Bacon para el actor y la Columna D es el Número Bacon para la
película. Luego en la Columna C ingresamos una formula que dice que si el actor en
la Columna A es Kevin Bacon, el Número Bacon debería ser 1 por definición. Si no,
entonces debería ser el Número Bacon más bajo de las películas (más uno) en las
que este actor haya actuado. En la Columna D ingresamos una formula que dice
que el Número Bacon de la película iguala el Número Bacon más bajo de los
actores que actuaron en ella, en otras palabras, el valor mínimo en la Columna C
para las filas relacionadas a esa película. Si ingresamos estas fórmulas,
obtendremos un error de referencia circular, ya que la solución de la Columna C
está basada en la solución de la Columna D y la solución de la Columna D está
basada en la solución de la Columna C. Esto es solo posible si permiten que el MS
Excel calcule la solución en una manera iterativa. Esto se realiza en Opciones →
Archivo → Fórmulas. Permitan Calculación Iterativa, como muestra la Figura 1,
debajo. Asegúrense que solo permiten Excel calcular todo cuando decidan a través
de permitir cálculos manuales (también demostrado en la Figura 1). Ahora pueden
decirle a Excel que corra un cálculo oprimiendo la tecla F9.
Figura 1- Permite los cálculos iterativos y asegurense que elijan solamente calcular
la hoja de cálculos manualmente (oprimiendo la tecla F9).
No se preocupen si no pueden resolver la solución, como la hemos provisto en el
libro de trabajo “Número Bacon - Solución Alternativa en la Lista extendida.xslx” así
pueden sumergirse ustedes mismos en ella. Asegúrense de haber cambiado los
ajustes como demostrado en la Figura 1 arriba, ya que estas opciones no estan
guardadas en el libro de trabajo. Tengan cuidado, si hay actores que no están
conectados a través de ningún numero de pasos a Kevin Bacon, el Número bacon
aumentara indefinidamente por cada iteracion. No hemos resuelto este problema en
la hoja de cálculos, ya que las fórmulas se transformarían ilegibles e
incomprensibles ¡Si están aptos para un verdadero desafío, intenten resolverlo
ustedes mismos!
¡Buena suerte!