Este es sólo un pequeño e interesante problema que se me ha ocurrido hoy y que no tengo ni idea de cómo resolverlo, así que por eso lo estoy publicando aquí.
Dejemos que $G$ sea un grafo finito, no dirigido y conectado. Damos a cada nodo un identificador único, digamos un número entero positivo. Se coloca una hormiga en un nodo aleatorio. La hormiga sólo puede "ver" el identificador del nodo en el que está y los identificadores de los vecinos del nodo en el que está. Ahora, cada segundo, la hormiga se desplaza a un vecino del nodo en el que se encuentra. El objetivo de la hormiga es detectar si $G$ es de hecho un árbol.
La cuestión es que la hormiga sólo tiene una cantidad finita de memoria (reescribible); sólo puede recordar una cierta cantidad de los nodos que ha visitado. Dejemos que $\alpha(G)$ es la cantidad mínima de memoria que necesita la hormiga para poder determinar con éxito si $G$ es de hecho un árbol.
Pregunta 1: ¿Cómo determinamos $\alpha(G)$ ?
Pregunta 2: Dado $n\in\mathbb{N}$ ¿podemos especificar todos los gráficos $G$ con $\alpha(G)=n$ ?
Pregunta extra: ¿Existe un algoritmo que la hormiga pueda utilizar siempre?
Lo que he encontrado hasta ahora:
Lo que he encontrado hasta ahora es que si $G$ es un ciclo, tenemos $\alpha(G)\le 3$ . Cuando la hormiga se pone en marcha, guarda en la memoria los identificadores del nodo en el que se encuentra y de sus dos vecinos. A continuación, se desplaza aleatoriamente a uno de sus vecinos. Después, simplemente sustituye el identificador del vecino que tiene en la memoria por el identificador del otro vecino y se desplaza al nodo con el identificador guardado. En cuanto todos los identificadores de los vecinos están en la memoria, la hormiga sabe que debe haber viajado en un ciclo y, por lo tanto $G$ no podía ser un árbol.
Además, si $G$ es un "ocho" (dos ciclos con algunos nodos comunes consecutivos), tenemos $\alpha(G)\le 4$ . Usamos el mismo algoritmo que con los ciclos, pero si llegamos a un punto en el que el nodo en el que está la hormiga tiene tres vecinos, dos de los cuales con su idenitfier no en la memoria, optamos por ignorar uno y seguir con nuestro algoritmo. Lo único que hacemos, es guardar el identificador de ese tercer vecino en memoria, la primera vez y la segunda (cuando toda la memoria está utilizada), no hacemos nada. Viajando a lo largo de uno de los ciclos, inevitablemente terminaremos junto a uno de estos nodos "permanentemente marcados" y por lo tanto, podremos decidir que no es un árbol.
Si $G$ es un gráfico completo con más de dos vértices, podemos tomar $\alpha(G)\le 2$ . Cuando la hormiga parte, pone en memoria el identificador del nodo en el que se encuentra y el identificador de uno de sus vecinos, tras lo cual se desplaza a uno de los vecinos cuyo identificador no está almacenado en memoria. Si ahora tiene dos vecinos con sus identificadores en memoria (los tiene), el grafo debe contener un triángulo y, por tanto, no puede ser un árbol.
0 votos
No estoy seguro de si preguntar $\alpha(G)$ para un gráfico específico $G$ tiene sentido: $G$ es un árbol o no, por lo que uno de los algoritmos de memoria cero "dice $G$ es un árbol" o "decir $G$ no es un árbol" es válido. Tiene sentido tomar una clase $\mathcal G$ de grafos, que contienen tanto árboles como no árboles, y calcular $\alpha(\mathcal G)$ : la memoria necesaria para que una hormiga colocada en un gráfico de esta clase sepa si el gráfico es un árbol o no.