给出每度最大度数的树如何构造?

时间:2017-10-14 06:47:08

标签: graph

我有一个图形顶点的“最大”度序列。现在我想构建一个树,其中每个节点都具有“最多”相应的最大程度。

例如,如果我的最大度序列是A = [3,4,2,1,4,3],那么我想制作一个包含6个顶点的树,每个顶点具有与其值相对应的“最大度”甲

到目前为止,我尝试使用顶点着色,但无法获得树,而有时我会得到一个包含周期的图。

1 个答案:

答案 0 :(得分:0)

首先让我们回想一下有n个顶点的树的度数的一个重要事实:总的度数总是2*(n-1)。反过来也是如此,如果图的度和为2*(n-1),则图是树。实际上,给出2*(n-1)的任何自然数序列都可以表示树的度数。

因此,您问题的一般算法应如下所示:

  1. 降低"最大度数"列出一个实际的"度列表"。

  2. 从度数列表中,使用任何图构建算法。由于度数之和,结果图为树。

  3. 请注意:可能存在多种可能性,但最后,总边缘成本将相同(n-1) * cost of one edge,无论结果树是什么!

    示例:

    取序列A = [3,4,2,1,4,3]。总数是17.我们应该有10棵树。

    让每个度数大于1减少一个。

    它给出:B = [2,3,1,1,3,2]。总计是12。

    让我们发现,将第一个2减一,减1;

    它给出:C = [1,2,1,1,3,2]。总数为10.这是树的度数列表。

    让我们画画吧。

    从一度顶点开始(必须至少有两个顶点),然后通过递增度数顺序追加:

    1--
    1--
    1--
    
    1--2--
    1--2--
    1--
    
    1--2--\
    1--2---3
    1-----/
    

    抱歉,我的ASCII ART技能不是最好的。

    更具体一点:我们试图贪婪地联系#34;图右侧的n-1个顶点,任意左边的顶点为n。对于最后一个应该链接剩余的内容的例外情况。

    [3,3,3,1,1,1,1,1]

    的例子
    1--
    1--
    1--
    1--
    1--
    
    1---3
    1--/
    1---3
    1--/
    1--
    
    1---3-\
    1--/   \
    1---3---3
    1--/   /
    1-----/