Se dice que Smith es “la anomalía”: el resultado inevitable de un sistema que, tarde o temprano, empieza a copiarse a sí mismo sin pedir permiso. Zion lo sabe, y por eso antes de actuar necesita entender la red en la que se mueve. Qué tan lejos puede llegar una amenaza, si hay caminos de vuelta, si conviene revisar cada rincón una sola vez o si un reinicio puede completarse sin trabarse en sí mismo. Este sendero recorre cuatro problemas distintos sobre la misma pregunta de fondo: ¿qué se puede saber de una red, sin recorrerla entera a ciegas, antes de decidir qué hacer con ella?

Vas a seguir la propagación de Smith apenas consigue su primer host, vas a acompañar a un equipo que busca una salida por los túneles de mantenimiento de Zion, vas a caminar con Seraph una ronda que no admite un solo paso de más, y vas a terminar reiniciando el núcleo de Zion pieza por pieza, con la certeza de que un solo error de dependencia puede dejarlo todo trabado para siempre.


La Multiplicación del Agente

Dificultad: ★☆☆☆☆

Smith consiguió instalarse en un host cualquiera de la red del Matrix (le dicen “Terminal Cero”) y desde ahí empezó a replicarse, salto a salto, hacia cualquier host directamente conectado. Zion no puede desconectar toda la red a la vez, así que necesita algo más preciso: saber, ronda por ronda, qué hosts van a caer y, sobre todo, cuántas rondas le quedan antes de que Smith llegue a un punto que no se pueden dar el lujo de perder.

Enunciado

Se modela la red como un grafo no dirigido , donde cada host es un vértice y cada conexión directa entre dos hosts es una arista. Smith se replica de a un salto por ronda: en la ronda 0 solo controla el host inicial; en cada ronda siguiente, controla además todo host conectado directamente a alguno que ya controlaba.

  1. Justificar qué estructura de datos conviene usar para representar esta red, sabiendo que el Matrix tiene muchísimos hosts pero cada uno con relativamente pocas conexiones directas (un grafo disperso). Comparar explícitamente lista de adyacencia contra matriz de adyacencia para este caso.
  2. Diseñar el algoritmo que, a partir del host inicial, determine en qué ronda cae cada host de la red.
  3. Trazar el algoritmo a mano sobre la siguiente red, empezando en “Terminal Cero”:
Extremo 1Extremo 2
Terminal CeroBackdoor de Woo
Terminal CeroRelé de Sati
Backdoor de WooConsola del Oráculo
Backdoor de WooNodo del Merovingio
Relé de SatiNodo del Merovingio
Relé de SatiEnlace del Trainman
Nodo del MerovingioServidor del Arquitecto
Enlace del TrainmanServidor del Arquitecto
Servidor del ArquitectoLa Puerta de Sion

Además de esta lista, existe un host llamado “Búnker Aislado” que no tiene ninguna conexión con el resto de la red. Indicar en qué ronda cae cada host, cuántas rondas tarda Smith en llegar a “La Puerta de Sion”, y qué ocurre con el “Búnker Aislado”.

  1. Determinar la complejidad del algoritmo en función de y , y explicar cómo cambiaría si se hubiese elegido, en el punto 1, la representación menos conveniente para este tipo de red.
Abrir artículo


Los Túneles de Zion

Dificultad: ★★☆☆☆

Con Smith avanzando, un equipo necesita evacuar por los túneles de mantenimiento de Zion, una red de pasadizos angostos, mal iluminados, algunos de los cuales vuelven sobre sí mismos sin llevar a ninguna parte. Antes de arriesgarse a entrar, el equipo quiere dos cosas: un mapa de por dónde se puede salir sin dar vueltas en círculo, y la certeza de que no hay ningún sector del refugio completamente incomunicado del resto.

Enunciado

La red de túneles es un grafo no dirigido , donde cada vértice es un cruce o punto de interés y cada arista es un pasadizo transitable en ambos sentidos.

  1. Explicar qué información, obtenida durante un DFS, permite determinar si el grafo tiene algún ciclo (relacionarlo con el concepto de arista de retroceso visto en clase) y qué determina si dos nodos pertenecen a la misma componente conexa.
  2. Diseñar el algoritmo que recorra la red completa y devuelva: el árbol de recorrido, si existe al menos un ciclo, y la cantidad total de componentes conexas.
  3. Trazar el DFS a mano empezando en “Entrada”, mostrando el estado de la pila (o de las llamadas recursivas) y el array de visitados en cada paso, sobre la siguiente red:
Extremo 1Extremo 2
EntradaCruce 1
EntradaCruce 2
Cruce 1Cruce 3
Cruce 2Cruce 3
Cruce 3Cruce 4
Cruce 4Cruce 5
Cruce 5Refugio
Cruce 2Cruce 5
Pasadizo Olvidado 1Pasadizo Olvidado 2
Pasadizo Olvidado 2Pasadizo Olvidado 3
  1. A partir de la traza: indicar cuántas componentes conexas tiene la red, si existe algún ciclo (y cuál es, en caso de que lo haya), y la complejidad del algoritmo en función de y .
Abrir artículo


La Ronda de Seraph

Dificultad: ★★★☆☆

Seraph custodia el acceso a la mansión del Merovingio, y antes de que Zion se anime a pedirle un favor necesita confirmar algo: que puede recorrer cada pasillo de la mansión exactamente una vez, sin dejar ninguno sin revisar y sin pasar dos veces por el mismo. Volver a cruzar un pasillo ya recorrido es, para cualquiera que esté mirando, la señal más clara de que alguien está buscando algo.

Enunciado

El plano de la mansión es un grafo no dirigido , donde cada vértice es una habitación y cada arista es un pasillo que la conecta con otra.

  1. Explicar el criterio (teorema de Euler) que determina, a partir del grado de los vértices, si un grafo tiene un circuito euleriano, un camino euleriano, o ninguno de los dos. Justificar por qué la cantidad de vértices de grado impar tiene que ser exactamente o exactamente para que exista alguna de las dos rutas, y no otro número.
  2. Aplicar el criterio al siguiente plano y determinar si la ronda de Seraph es posible. En caso de que lo sea, indicar si se trata de un circuito o de un camino euleriano, y en qué habitación conviene empezar (y, si corresponde, en cuál termina necesariamente):
Extremo 1Extremo 2
EntradaVestíbulo
VestíbuloSalón
SalónBiblioteca
BibliotecaComedor
ComedorBodega
BodegaOficina del Merovingio
Oficina del MerovingioEntrada
VestíbuloComedor
  1. Construir a mano una ronda válida: la secuencia completa de habitaciones que recorre cada pasillo exactamente una vez.
  2. Determinar la complejidad de verificar la condición de Euler (contar los grados de todos los vértices) en función de y . Explicar además por qué saber que la ronda existe no alcanza por sí solo para construirla: ¿qué información adicional hubo que usar en el punto 3 que no se necesitó en el punto 2?

Ver solución

1. El criterio de Euler

Un circuito o camino euleriano recorre cada arista exactamente una vez. La clave para saber si existe está en contar, para cada vértice, cuántas veces se lo “usa de paso”:

  • Cada vez que la ronda pasa por un vértice (sin quedarse), entra por una arista y sale por otra: consume las aristas de ese vértice de a pares.
  • Solo el vértice donde empieza la ronda puede tener una arista de salida sin una de entrada que la empareje, y solo el vértice donde termina puede tener una arista de entrada sin salida.

De ahí sale el criterio:

  • Si es par en todos los vértices existe un circuito euleriano (se puede empezar y terminar en el mismo lugar).
  • Si exactamente dos vértices tienen grado impar existe un camino euleriano, y esos dos vértices son, necesariamente, el inicio y el fin.
  • Si hay más de dos vértices de grado impar no existe ninguna de las dos rutas: no puede haber más de un vértice con una salida “sin pareja” y más de un vértice con una entrada “sin pareja” en una única ronda.

Importante: También hace falta que el grafo sea conexo, o al menos que todas las aristas estén en una sola componente, porque si no ninguna ronda que arranca de un solo lugar puede llegar a recorrerlas todas.

2. Aplicación al plano de la mansión

HabitaciónAristas incidentes
EntradaVestíbulo, Oficina del Merovingio2
VestíbuloEntrada, Salón, Comedor3
SalónVestíbulo, Biblioteca2
BibliotecaSalón, Comedor2
ComedorBiblioteca, Bodega, Vestíbulo3
BodegaComedor, Oficina del Merovingio2
Oficina del MerovingioBodega, Entrada2

Exactamente dos vértices de grado impar: Vestíbulo y Comedor. Por el criterio del punto 1, la ronda de Seraph es posible, pero como camino euleriano (no como circuito): tiene que empezar en una de esas dos habitaciones y terminar necesariamente en la otra.

3. Una ronda válida

Empezando en Vestíbulo y terminando en Comedor:

PasoPasillo usado
1Vestíbulo–Entrada
2Entrada–Oficina del Merovingio
3Oficina del Merovingio–Bodega
4Bodega–Comedor
5Comedor–Biblioteca
6Biblioteca–Salón
7Salón–Vestíbulo
8Vestíbulo–Comedor

Las 8 aristas aparecen una sola vez cada una, así que la ronda es válida. No es la única ronda posible: cualquier otro orden que respete “cada arista una sola vez” y arranque en Vestíbulo o Comedor también sirve.

Notar que Seraph pasa dos veces por el Vestíbulo. Eso está permitido, lo único que no se puede repetir es el pasillo, no la habitación.

4. Complejidad, y qué falta para poder construirla

Contar el grado de cada vértice recorriendo una vez la lista de adyacencia cuesta : se visita cada vértice una vez y cada arista aporta a dos grados, así que el trabajo total es proporcional a .

Pero ese chequeo solo mira información local (el grado de cada vértice, uno por uno). Alcanza para saber que la ronda existe, aunque no dice en qué orden recorrerla. Para construirla (punto 3) hubo que tener en cuenta algo más global: qué aristas ya se usaron y si, al elegir una arista para avanzar, no se deja “aislado” del resto un tramo todavía sin recorrer. Formalizar esa idea es exactamente lo que hacen los algoritmos de construcción de rutas eulerianas (Fleury, o el más eficiente, el de Hierholzer), fuera del alcance de este ejercicio, pero un buen próximo paso si querés ir más allá de trazarla a mano.

Abrir artículo


El Reinicio del Núcleo

Dificultad: ★★★★★

Con la amenaza contenida, Zion necesita reiniciar los sistemas de su propio núcleo (energía, refrigeración, soporte vital, sensores, comunicaciones, defensa) y ninguno puede encenderse antes que aquellos de los que depende. El operador a cargo tiene el mapa de dependencias entre subsistemas, pero sabe que un solo error de configuración, una sola dependencia mal puesta, puede dejar el reinicio completo esperando a sí mismo para siempre.

Enunciado

El mapa de dependencias es un grafo dirigido , donde cada vértice es un subsistema y una arista significa que tiene que estar activo antes de que pueda iniciarse.

  1. Explicar por qué el orden topológico solo está definido cuando el grafo es un DAG (grafo dirigido acíclico), y qué relación tiene esto con la detección de ciclos mediante DFS.
  2. Diseñar el algoritmo (a partir del DFS recursivo y su postorden) que determine un orden válido de inicialización de los subsistemas.
  3. Dado el siguiente mapa de dependencias, obtener un orden topológico válido para el reinicio (puede existir más de uno; alcanza con dar uno):
AntesDespués
EnergíaRefrigeración
EnergíaSoporte Vital
RefrigeraciónNúcleo Central
Soporte VitalComunicaciones
Núcleo CentralSensores
Núcleo CentralDefensa
SensoresEnlace con el Oráculo
DefensaEnlace con el Oráculo
  1. Un técnico agregó, por error, una dependencia adicional: “Comunicaciones” debe confirmar el estado de “Energía” antes de que este último pueda reiniciarse. Determinar si el reinicio sigue siendo posible con esta nueva dependencia y, si no lo es, identificar exactamente el ciclo que lo impide.
Abrir artículo


Si este sendero te dejó pensando en cuánto se puede llegar a saber de una red sin perderse en ella: DFS y BFS son apenas la puerta de entrada. La misma idea de “explorar sistemáticamente” es la base de Dijkstra (BFS, pero con pasillos que no cuestan todos lo mismo) y de Kruskal y Prim (para conectar toda una red gastando lo menos posible). En todos los casos el desafío nunca es mirar el grafo entero de una sola vez: es encontrar la forma correcta de recorrerlo, un paso genuino por vez.