1
7
您首先需要计算 Lowest Common Ancestor 两者兼而有之 一 和 乙 . 称之为最低共同祖先 C . 然后以步为单位计算距离 C 到 一 (CA)和 C 到 乙 (断路器)。这些值应该索引到另一个表中,该表根据这两个值确定关系。例如:
您可以将基本关系保留在这个表中,并为某些关系添加“great-”,如祖父,例如:(0,3)=great祖父。 希望这能为你指明正确的方向。祝你好运! 更新: (我不能在你的代码下面发表评论,因为我还没有声誉。) 我想,你扩大人际关系的功能有点不正常。如果偏移量为1或更大,可以通过在“grand”前加前缀来简化它,然后在“great-”(偏移量-1)前加前缀。你的版本可能包括前缀“伟大的伟大伟大伟大”为非常遥远的亲戚。(不确定我是否有正确的参数在这个解释,但希望你得到它的要点。另外,不知道你的家谱是否会走那么远,但这一点仍然有效。) 更新: 抱歉,上述内容不正确。我误解了默认情况,认为它再次递归地调用了函数。在我看来,我不熟悉“第二位曾祖父”的标记法,我自己也一直使用“曾祖父”。代码前进!! |
2
6
下面是我的算法的PHP实现来计算关系。这是基于我在原始问题中概述的数据模式。这只会发现两个人之间的“最近”关系,即最短路径关系,它不会解决半个兄弟姐妹或双表兄弟姐妹等复合关系。
请注意,数据访问功能如
正如我之前提到的,确定LCA的算法远不如最优算法。我计划发布一个单独的问题来优化这个问题,另一个问题是解决计算复合关系的问题,比如双表兄妹。 非常感谢所有帮助我朝正确方向前进的人!有了你的提示,这比我原来想象的要容易得多。 |
3
2
这可能有助于树关系计算器是一个对象,它接受树的XML表示,并将计算其中任意两个成员的关系。本文描述了如何计算关系,以及像“二表亲”或“一表亲”这样的术语一旦被删除意味着什么。此代码包括一个用JavaScript编写的用于计算关系的对象,以及一个用于呈现和与树交互的Web UI。示例项目设置为经典的ASP页。 http://www.codeproject.com/Articles/30315/Tree-Relationship-Calculator |
4
2
我用Java中的邻接表概念解决了这个问题。 一个人可以为每个人都有一个节点,并且在它的节点上关联它的子关系。 下面是仅查找兄弟姐妹和堂兄弟姐妹的代码。但是,您可以根据您的需求进行增强。我编写这个代码只是为了演示。
下面是添加家庭成员和查找他们之间关系的主要代码。
} |
5
0
这可能有助于您,生成和查询树结构需要大量的SQL查询理论和实现。 http://www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html 特别是,看看 adjacency list model 以家族树为例。 |
6
0
听起来很奇怪,Prolog似乎就是你要找的东西。 提供以下特别计划( http://www.pastey.net/117134 更好的着色)
您可以向Prolog解释器询问类似的问题:
答案如下:
如果你知道如何以及何时使用它,它是一个强大的工具。这似乎正是一个普罗罗格的地方。我知道它不太流行,也不容易嵌入,但是其中一条注释中显示的Wolphram Alpha令人印象深刻的特性只能用上面使用的构造进行编码,这是Prolog 101。 |
quantummidget · 正在查找BFS父关系数组 6 年前 |
I'm not human · Prolog查找不相关的图形节点 6 年前 |
WIZARD_ · 无向非加权图的最大顶点对数 6 年前 |
user9137770 · 邻接列表与邻接矩阵的区别 7 年前 |
Sook Yee Lim · 在给定邻接矩阵的情况下求两个图的交并? 7 年前 |
DK100 · 在广度优先搜索中处理重复节点 7 年前 |
Keith Pham · 最大化给定预算的子图“价值” 7 年前 |
Mathochist · 在配对列表中查找最大配对数 7 年前 |