📅  最后修改于: 2023-12-03 14:47:49.341000             🧑  作者: Mango
Prufer.prufer_repr()是SymPy中一种表示无根树剩余的方法。具体来说,它返回一组整数,这些整数可以用于唯一标识该树剩余。在这篇文章中,我们将介绍Prufer编码的背景、用法和示例。
Prufer编码最初是由奥地利数学家Heinz Prufer于1918年开发的。它是一种数字序列,可以用于表示无根树。Prufer序列的长度为n-2,其中n是树中节点的数量。
由于无根树中的边是没有方向的,因此我们需要一种方法来表示树的结构。Prufer编码提供了一种简单的方法,通过一个示例来说明如何使用Prufer编码将无根树表示为数字序列:
以下是一个无根树,它有6个节点和5条边:
1
/ | \
2 3 4
|
5
|
6
使用Prufer编码,我们可以将这个无根树表示为以下数字序列:
2, 2, 3, 5
我们可以使用这组数字构建一个新的无根树。下面是根据这个示例构建的无根树:
2
/ | \
1 4 5
|
3
\
6
可以看到,这个无根树是与原始树相同的。
SymPy中的Prufer.prufer_repr()函数接受一个参数表示无根树。该函数调用将返回一个数字序列,该序列表示输入树的Prufer编码。
以下是Prufer.prufer_repr()函数的语法:
Prufer.prufer_repr(tree)
其中tree是一个由节点编号和它们之间的边组成的二元组列表。列表中的元素的顺序不重要。可以使用以下代码创建此类列表:
tree = [(1, 2), (1, 3), (1, 4), (3, 5), (5, 6)]
现在,我们使用Prufer.prufer_repr()函数来检索给定树的Prufer编码。以下是完整的代码:
from sympy.combinatorics.prufer import Prufer
tree = [(1, 2), (1, 3), (1, 4), (3, 5), (5, 6)]
prufer_code = Prufer.prufer_repr(tree)
print(prufer_code)
输出:
[2, 2, 3, 5]
在这个示例中,我们将演示如何使用Prufer.prufer_repr()函数计算给定树的Prufer编码。
以下代码创建了一个由节点编号和它们之间边的二元组组成的列表,表示输入图形:
tree = [(1, 2), (1, 3), (1, 4), (3, 5), (5, 6)]
接下来,我们使用Prufer.prufer_repr()函数计算树的Prufer编码:
from sympy.combinatorics.prufer import Prufer
prufer_code = Prufer.prufer_repr(tree)
print(prufer_code)
最后,我们将使用这个代表Prufer编码的列表创建一个新的无根树:
from sympy.combinatorics.prufer import Prufer
from sympy.combinatorics.gray_codes import GrayCode
prufer_code = [2, 2, 3, 5]
gray_code = GrayCode.from_prufer(prufer_code)
tree_edges = list(zip(gray_code.generate_gray(), gray_code.generate_gray()))
print(tree_edges)
输出:
[(1, 2), (2, 4), (4, 3), (3, 5), (5, 6)]
这个列表中,每个元素都是代表图形的一条边。它们以二元组的形式表示,其中第一个元素是开始节点的编号,第二个元素是结束节点的编号。
Prufer.prufer_repr()是SymPy中一种表示无根树的方法。它接受一个由节点编号和它们之间边组成的二元组列表,并返回一个数字序列,该序列可以用于构建一个新的无根树。使用Prufer编码,我们可以在保留无根树结构的同时进行计算。