Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 家谱上两个人之间的关系_Php_Algorithm_Tree_Traversal - Fatal编程技术网

Php 家谱上两个人之间的关系

Php 家谱上两个人之间的关系,php,algorithm,tree,traversal,Php,Algorithm,Tree,Traversal,我正在为我的父母做一个小的家谱项目(php+mysql)。因为整棵树都很宽,而且很长一段时间都不能放在任何屏幕上,所以我想做一个“关系查找器”,它可以显示两个任意的,可能是非常远亲的人之间的关系 每个祖先都使用自己的个人ID存储在数据库中。每个人($祖先[$ID])都有0-2个父母(int-ID)和0-11个子女(具有int-ID的数组): 我现在需要找到$ANCENTOR[$some_id]和$ANCENTOR[$other_id]之间的最短连接,作为$some_id和$other_id之间的

我正在为我的父母做一个小的家谱项目(php+mysql)。因为整棵树都很宽,而且很长一段时间都不能放在任何屏幕上,所以我想做一个“关系查找器”,它可以显示两个任意的,可能是非常远亲的人之间的关系

每个祖先都使用自己的个人ID存储在数据库中。每个人($祖先[$ID])都有0-2个父母(int-ID)和0-11个子女(具有int-ID的数组):

我现在需要找到$ANCENTOR[$some_id]和$ANCENTOR[$other_id]之间的最短连接,作为$some_id和$other_id之间的id列表

有没有一种优雅的方法/算法可以做到这一点,在我找到2个(或没有)匹配ID之前,除了遍历每一个可能的行(子行)和行(祖先行)之外?如果您能就这个主题给我任何建议,我将不胜感激,因为我以前从未以这种方式处理过树/图


干杯

您是否使用过广度优先搜索?这就是你想要的。您希望从孩子开始,对所有祖先进行广度优先搜索,直到找到目标祖先。$some_id和$other_id很可能没有直接关系,这意味着一个可能不是另一个的孩子或祖先。但他们很可能在几代人以前有一个祖先,或者在几代人以后有一个孩子。我认为第一件事是发现共同的祖先/孩子。在这种情况下,您的广度搜索仍然适用吗?这种搜索的具体名称是“二元搜索树中的最低共同祖先”。很容易找到它的许多算法和实现。非常感谢,这正是我要搜索的!好吧,假设每个人都有2^n个不同的父母。关于这一点,有一个著名的堆栈溢出问题。
int $ancestor[$id]["father"]
int $ancestor[$id]["mother"]
array $ancestor[$id]["children"]