Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
Graph 如何在给定最大度的情况下构造一棵树?_Graph - Fatal编程技术网

Graph 如何在给定最大度的情况下构造一棵树?

Graph 如何在给定最大度的情况下构造一棵树?,graph,Graph,我有一个图顶点的“最大”度序列。现在我想构造一棵树,其中每个节点都有“最多”对应的最大度 例如,如果我的最大度数序列是A=[3,4,2,1,4,3],那么我想创建一个由6个顶点组成的树,每个顶点都有对应于其在A中的值的“最大度数” 到目前为止,我尝试了顶点着色,但无法得到一棵树,有时我会得到一个有一个循环的图。首先,让我们回顾一个关于具有n顶点的树的度的重要事实:度的总和总是2*(n-1)。反之亦然,如果图的度和是2*(n-1),则图是树。实际上,任何给出2*(n-1)的自然数序列都可以表示树的

我有一个图顶点的“最大”度序列。现在我想构造一棵树,其中每个节点都有“最多”对应的最大度

例如,如果我的最大度数序列是A=[3,4,2,1,4,3],那么我想创建一个由6个顶点组成的树,每个顶点都有对应于其在A中的值的“最大度数”


到目前为止,我尝试了顶点着色,但无法得到一棵树,有时我会得到一个有一个循环的图。

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

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

  • 将“最大度数”列表减少为实际的“度数列表”

  • 从度数列表中,使用任何图形构造算法。由于度数之和,生成的图形将是一棵树

  • 注意:可能有几种可能性,但最后,总边缘成本将是相同的,
    (n-1)*一个边缘的成本,无论结果树是什么


    例如:

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

    让我们把每一个大于一的度减少一

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

    让我们将第一次下降的2度减少1,我们发现:

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

    我们来画吧

    从阶数为1的顶点开始(必须至少有2个顶点),然后通过增加阶数进行附加:

    1--
    1--
    1--
    
    1--2--
    1--2--
    1--
    
    1--2--\
    1--2---3
    1-----/
    
    对不起,我的艺术技能不是最好的

    更具体地说:我们可以尝试将图右侧的n-1个顶点“贪婪地”链接到阶数为n的任何左顶点。最后一个例外,它应该链接剩余的内容

    [3,3,3,1,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-----/
    

    顶点具有某种精确的给定阶数(与其连接的边数),但没有“最大阶数”。或者你的意思是你可以把“4”解释成2度的顶点?列表中的顺序对你这一代人有影响吗?我的意思是,如果给出序列[4,4,3,3,2,1],而不是示例[3,4,2,1,4,3],它会给你相同的树吗?@Pac0我知道节点的度是定义的,不能有最大值或最小值。我的意思是,在构建树时,任何特定节点的度数都不应“超过”其最大允许度数。例如,节点0的度数不能超过[0],节点3的度数不能超过[3]。顺序很重要,因为它们定义了每个节点各自允许的最大次数。但如果我将其理解为“必须有两个节点的最大次数为4,两个节点的最大次数为3,一个节点的最大次数为2,一个节点的最大次数为1”“-->无论给定序列的顺序如何,这种解释都是正确的,对吗?@Pac0存在顺序约束。这就是为什么我感觉被卡住了。