Hola a todos,
Hoy venimos con una “noticia”: hubo un error en nuestra interpretación de un detalle del algoritmo de Tarjan que hace que, dependiendo de algunos factores, nos topemos con falsos negativos (lease, vértices que deberían pertenecer a una CFC no están perteneciendo).
Esto surgió de un error con el que se topaba un compañero al entregar el TP3. En su caso particular, no guardaba los resultados, por lo que en alguno de los pedidos aparecía el bug que estoy por explicar. Con esto quiero decir que aquellos que recibieron un todo ok no tienen que preocuparse, porque habiendo guardado los resultados justo sucede que recorriendo desde Viena (que creo que es el primer caso) no se reproduce, así que no es que tienen que hacer algo (en realidad, podría ser, pero considerando que el error fue nuestro asumimos nosotros el problema y ya).
Supongamos que tenemos el siguiente grafo:
Espero que les sea más o menos evidente que todos los vértices pertenecen a una gran CFC.
Voy a hacer un seguimiento comenzando desde el vértice A, que cómo verán va a estar bastante forzado a toparnos con el error (cualquier bifurcación diferente haría que no se reproduzca, de ahí que surgió en un caso muy particular en un grafo muy grande, y que nunca lo habíamos pensado)
Luego de leer varias veces el pseudocódigo de varias fuentes, encontramos cuál fue el error: considerar el orden como el orden en profundidad. Esto fue una mala interpretación de nuestra parte. Puede verse en el pseudo código que aparece hasta en Wikipedia (bastante válido para el contexto de nuestro TP, je). Ese índice que aparece allí es “global”, en el sentido que siempre aumenta. No debería suceder que F tenga orden 1, sino que debería tener orden 5 (que no sea orden[w] = orden[v] + 1
, sino indice + 1
, que siempre se actualiza, como si hiciéramos orden[w] = ++indice
).
Este error se produce únicamente en un caso así, bastante forzado (cualquier elección diferente que hubiéramos tomado no lo habría reproducido), pero el error existe. Y, debo admitir, por un momento dudé que el Algoritmo estaba mal, pero es indudable que Tarjan sabe más que yo sobre grafos como para andar concluyendo eso tan levemente.
Espero que se haya entendido cuál es el problema y cuál es la solución. Nos aseguraremos que para el próximo cuatrimestre quede esto actualizado tanto en la clase como en el video que tenemos grabado (cuando tenga tiempo lo actualizaré). Como decía Tusam, puede fallar.
Las pruebas siguen estando bien, pero sí tuve que actualizar el ejemplo para Boca del enunciado.
Saludos
Martín