请看下面的图。作为我项目的一部分,我需要将森林边缘的列表转换为唯一最长路径的列表。最长路径实际上是将任何根节点连接到叶节点或将叶节点连接到叶节点的路径。这里的问题是,我只有边的列表作为输入,我应该从中导出这些路径。在
我试图通过使用字典(使用边列表创建)来递归地解决这个问题,但是看起来这不是处理问题的正确方法,而且我发现很难可视化。请建议是否有任何已知的有效算法/方法来解决此问题。在
注意事项:请忽略重量(它们只是标签)。“最长”表示覆盖最多节点的路径。在
输入:
元组(边)列表
edges = [('point', 'floating'), ('754', 'floating'),
('clock', 'IEEE'), ('ARM', 'barrel'),
('barrel', 'shifter clock'), ('shifter', 'barrel'),
('representation', 'representation'), ('cycles', '754'),
('point representation', 'point'), ('barrel shifter', 'point')]
预期输出:
^{pr2}$我的失败代码:
edges = [('point', 'floating'), ('754', 'floating'), ('clock', 'IEEE'), ('ARM', 'barrel'), ('barrel', 'shifter clock'), ('shifter', 'barrel'), ('representation', 'representation'), ('cycles', '754'), ('point representation', 'point'), ('barrel shifter', 'point')]
neighbors = {}
inference_paths = []
for edge in edges:
neighbors[edge[0]] = edge[1]
for edge in edges:
neighbor = neighbors.get(edge[1])
if neighbor:
if not edge[1] == edge[0] == neighbor:
inference_paths.append([edge[0], edge[1], neighbor])
else:
inference_paths.append([edge[0]])
else:
inference_paths.append([edge[0], edge[1]])
for path in inference_paths:
print path
<我的输出:
[['point', 'floating'],
['754', 'floating'],
['clock', 'IEEE'],
['ARM', 'barrel', 'shifter clock'],
['barrel', 'shifter clock'],
['shifter', 'barrel', 'shifter clock'],
['representation'],
['cycles', '754', 'floating'],
['point representation', 'point', 'floating'],
['barrel shifter', 'point', 'floating']]
森林:
我相信你的问题是,你说你在使用递归,但你没有。反复尝试这样做是痛苦的。首先让我们看一个基本的递归树遍历函数。在
上面的函数将访问树中的所有节点,现在我们只需要弄清楚需要计算什么逻辑来计算路径等。注意:您的回答似乎表明,给定节点在一条路径中只能使用一次,并且不能再次交叉,我们使用了这个假设。在
^{pr2}$相关问题 更多 >
编程相关推荐