Ciclos en el software de árbol genealógico
Soy el desarrollador de algún software de árbol genealógico (escrito en C++ y Qt). No tuve problemas hasta que uno de mis clientes me envió por correo un informe de error. El problema es que el cliente tiene dos hijos con su propia hija y, como resultado, no puede utilizar mi software debido a errores.
Esos errores son el resultado de mis diversas afirmaciones e invariantes sobre el gráfico familiar que se está procesando (por ejemplo, después de caminar una bicicleta, el programa indica que X no puede ser al mismo tiempo padre y abuelo de Y).
¿Cómo puedo resolver esos errores sin eliminar todas las afirmaciones de datos?
Parece que usted (y/o su empresa) tienen un malentendido fundamental sobre lo que se supone que es un árbol genealógico.
Permítanme aclarar, también trabajo para una empresa que tiene (como uno de sus productos) un árbol genealógico en su cartera y hemos estado luchando con problemas similares.
El problema, en nuestro caso, y supongo que en el tuyo también, viene del formato GEDCOM que es extremadamente obstinado sobre lo que debería ser una familia. Sin embargo, este formato contiene algunos conceptos erróneos graves sobre cómo es realmente un árbol genealógico.
GEDCOM tiene muchos problemas, como incompatibilidad con relaciones del mismo sexo, incesto, etc... Lo cual en la vida real sucede con más frecuencia de lo que imaginas (especialmente si nos remontamos al 1700-1800).
Hemos modelado nuestro árbol genealógico según lo que sucede en el mundo real: Eventos (por ejemplo, nacimientos, bodas, compromisos, uniones, muertes, adopciones, etc.). No ponemos ninguna restricción a estos, excepto aquellas lógicamente imposibles (por ejemplo, uno no puede ser el propio padre, las relaciones necesitan dos personas, etc...)
La falta de validaciones nos brinda una solución más "real", más simple y más flexible.
En cuanto a este caso específico, sugeriría eliminar las afirmaciones ya que no son válidas universalmente.
Para mostrar problemas (que surgirán), sugeriría dibujar el mismo nodo tantas veces como sea necesario, insinuando la duplicación iluminando todas las copias al seleccionar una de ellas.
Relaja tus afirmaciones.
No cambiando las reglas, que probablemente sean muy útiles para el 99,9% de sus clientes a la hora de detectar errores al introducir sus datos.
En su lugar, cámbielo de un error "no se puede agregar la relación" a una advertencia con un "agregar de todos modos".
He aquí el problema de los árboles genealógicos: no son árboles. Son gráficos acíclicos dirigidos o DAG. Si entiendo correctamente los principios de la biología de la reproducción humana, no habrá ciclos.
Hasta donde yo sé, incluso los cristianos aceptan matrimonios (y por tanto hijos) entre primos, lo que convertirá el árbol genealógico en un DAG familiar.
La moraleja de la historia es: elija las estructuras de datos adecuadas.