Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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
C# 试图从子控件列表中高效地查找公共父控件_C#_Algorithm - Fatal编程技术网

C# 试图从子控件列表中高效地查找公共父控件

C# 试图从子控件列表中高效地查找公共父控件,c#,algorithm,C#,Algorithm,我有一个控件,它可能包含相同类型的子控件。这些控件已链接在一起,以形成树结构 现在,给定此树中存在的X个控件的列表,我希望找到列表中所有控件中最接近的公共父控件。我不知道我的子控件在树中的位置 我非常愿意对这个问题做一些思考,但我只能假设它已经得到了最佳解决。有人知道我在哪里可以找到这个算法吗?如果没有,建议的方法或阅读 维基百科有几篇关于这个问题的文章: 一般理论: 一些实现:由于Tarjan的离线最不常见祖先处于离线状态,您可能希望通过另一种途径解决问题。使用bredth-first或dep

我有一个控件,它可能包含相同类型的子控件。这些控件已链接在一起,以形成树结构

现在,给定此树中存在的X个控件的列表,我希望找到列表中所有控件中最接近的公共父控件。我不知道我的子控件在树中的位置

我非常愿意对这个问题做一些思考,但我只能假设它已经得到了最佳解决。有人知道我在哪里可以找到这个算法吗?如果没有,建议的方法或阅读


维基百科有几篇关于这个问题的文章:

一般理论:


一些实现:

由于Tarjan的离线最不常见祖先处于离线状态,您可能希望通过另一种途径解决问题。使用bredth-first或depth-first搜索,在搜索列表中查找每个项目的路径。然后,您可以使用这些路径来确定最低的公共祖先

psuedo代码类似于:

  • 遍历树中的所有节点
  • 如果节点位于搜索列表中,则记录路径(来自节点ID)
  • 搜索完所有节点后,从每个搜索列表节点的第一个路径id开始
  • 如果所有节点的第一个id相同,则移动到下一个id
  • 重复步骤4,直到至少有一个id不同。前一个id是最不常见的祖先
  • 例如,使用的搜索列表示例,您将构建以下路径索引

    H->ABDH 我->阿贝 J->ABEJ E->ABE

    现在,您可以看到所有节点在位置1处都有一个a。以及位置2的a B。但是,在位置3,H有一个与其他节点不匹配的D。因此,节点B是最不常见的祖先


    很明显,有一些极端情况。如果搜索列表只有一项,则它是最不常见的祖先。同样,如果比较路径并到达节点本身,则它是共同的祖先。

    听起来像是面板中的面板,然后旁边的列表框显示每个面板的名称。类似的事情?是的,差不多我已经上传了一个IMG到最初的帖子中,把我的问题形象化。希望我能+10。这是一个很棒的小拼图游戏。好像以前有人问过:)嘿,谢谢!我没看到它被贴了。我应该把这个标记为重复的吗