请求参考 - 这个树算法叫什么?

时间:2016-06-12 21:40:45

标签: algorithm graph tree binary-tree graph-algorithm

我在开发一些代码的过程中设计了一种算法。我想知道它是否有一个名称,或者它是一个更一般类别的实例。

该算法概述如下:

简而言之,该算法采用可以合并的任意元素。

  1. 从一个抽象列表开始。列表的元素将是树中的叶子。为简单起见,假设列表中有2 ^ n个元素。
  2. 配对抽象列表中的元素,以便获得2 ^(n-1)对。配对很简单:第(2n-1)个元素与第(2n)个元素匹配。您从合并这些对的结果中获取新的抽象列表。现在,您可以构造一个与每个合并元素相对应的节点,该节点具有从中派生合并元素的元素作为子节点。
  3. 迭代第2步,直到只剩下1个元素。
  4. 你现在有了一个二叉树,可以跟踪"祖先"每个元素。
  5. 现在,我最好的猜测是,这是某种树形折叠(见https://en.wikipedia.org/wiki/Catamorphism#List_fold)。但它跟踪折叠过程创建的数据结构,并允许折叠过程并行进行。

    实际上,元素是对象列表,其中只有一些是兼容的。因此,并非每个合并步骤都是成功的,因此有时需要遍历子节点并找到要输入的新对象列表。

1 个答案:

答案 0 :(得分:0)

这个算法很可能被一些其他名称所知,但有一点是mergesort算法,只是在线性时间内合并2个排序列表以生成第3个排序列表"向左走"打开"作为占位符。