【发布时间】:2011-12-28 20:13:04
【问题描述】:
在 Python 中,我想创建一个具有任意数量分支的 n 叉树,其中每个分支都有一个权重。这是示例:
节点 A 有三个孩子 B、C、D,权重分别为 100、-200、250;
B是叶节点;
C 有两个孩子 E、F,权重分别为 150、200;
E 和 F 是叶节点;
D 有两个孩子 G 和 H,权重分别为 -50、100;
G 和 H 是叶节点;
你能告诉我如何用例子来构造它吗?
> 谢谢机器向往。 谢谢你。看了你的例子后,我认为它迫使我重新思考这个问题。我不会分配权重,而是分配概率
每个子路径。如果每个子节点走这条路,它就会增加权重。 所以从形象上看,它看起来像这样,每个节点都有概率和权重。
一个 0 乙 100 C 250 D 150 乙 F 200 克 -50 H 100
A B C D E F G H
A 0 .25 .35 .4 0 0 0 0
B 0 0 0 0 0 0 0 0
C 0 0 0 0 .6 .4 0 0
D 0 0 0 0 0 0 .5 .5
E 0 0 0 0 0 0 0 0
F 0 0 0 0 0 0 0 0
我会从这样的事情开始。 类邻接: def init(自我,重量): 自我重量 = 重量 self.adj = []
那我想这样做:
对于根,没有重量。 然后当我递归地添加一个孩子时,我想添加它所走路径的概率,基本上是向后看它的父母。然后将权重添加到添加的孩子。所以当孩子成为下一个父母时,我不增加重量,因为我已经在上一步中增加了重量。但是对于叶节点,我必须添加权重。 另外我不确定多条路径是否会通向一个节点,但我想按照您的建议保留该选项。
我不明白下面的代码,请您解释一下它将如何工作以适应我解释的场景。我是 Python 新手。
def add_node(self):
for row in self.adj:
row.append(inf)
self.adj.append([inf] * (len(self.adj) + 1))
def set_weight(self, i, j, w):
if i >= j:
raise ValueError("Don't make a cycle")
self.adj[i][j] = w
对不起,格式搞砸了,希望你能理解我的帖子。
【问题讨论】:
-
给每个节点一个权重怎么样?