家庭树软件中的循环
我是一些家族树软件(用C ++和Qt编写)的开发人员。 直到我的一位客户邮寄给我一份错误报告,我才有了问题。 问题在于客户有两个孩子和他们自己的女儿,结果,他因为错误而无法使用我的软件。
这些错误是我关于正在处理的家庭图的各种断言和不变量的结果(例如,在步行一个循环后,程序指出X不能既是父亲也是Y的祖父)。
如何在不删除所有数据断言的情况下解决这些错误?
看来你(和/或你的公司)对家庭树应该是什么有一个基本的误解。
让我澄清一下,我也为一家拥有(作为其产品之一)家族树的公司工作,我们一直在努力解决类似的问题。
在我们的案例中,问题以及我假设你的情况也来自于GEDCOM格式,该格式对于一个家庭应该是什么都非常有见地。 然而,这种格式包含一些关于家谱的真实外观的严重误解。
GEDCOM有许多问题,比如与同性关系不相容,乱伦等等......现实生活中发生的事情比您想象的要多(特别是在回到1700-1800时)。
我们将家庭树建模为现实世界中发生的事件:事件(例如,出生,婚礼,参与,工会,死亡,收养等)。 除了逻辑上不可能的东西(例如,不能成为自己的父母,关系需要两个人等等),我们不会对这些做任何限制。
缺乏验证为我们提供了更“现实世界”,更简单,更灵活的解决方案。
至于这个具体情况,我建议删除这些断言,因为它们并不普遍。
为了显示问题(会出现),我建议根据需要多次绘制相同的节点,并在选择其中一个时点亮所有副本以提示重复。
放松你的断言。
不要通过修改规则,这对99.9%的客户在输入数据时发现错误非常有帮助。
相反,将其从“无法添加关系”错误更改为带有“添加”的警告。
这是家庭树问题:他们不是树木。 它们是非循环图或DAG。 如果我正确理解人类生殖生物学的原理,就不会有任何循环。
据我所知,甚至基督徒都接受表兄弟之间的婚姻(也就是孩子),这将把家族树变成家庭DAG。
故事的寓意是:选择正确的数据结构。
链接地址: http://www.djcxy.com/p/40119.html上一篇: Cycles in family tree software
下一篇: How to reverse a suffix tree of a string (findind the string it represents)