Data structures 有向图中具有共享子路径的路径的高效计算

Data structures 有向图中具有共享子路径的路径的高效计算,data-structures,graph,path,tree,Data Structures,Graph,Path,Tree,我需要一个高效数据结构的建议,该结构适合我在约束条件下计算有向图中的路径成本的问题,即许多路径有时共享同一个子路径,我不想对其进行两次计算 这些列表中的每个数字都指向有向图中的一个节点。每行描述一条路径: [121, 85, 135, 99, 141, 134, 4, 33, 65, 131, 18, 127], [121, 85, 135, 99, 141, 134, 65, 33, 4, 127], [121, 85, 135, 99, 141, 134, 65, 33, 4, 131, 1

我需要一个高效数据结构的建议,该结构适合我在约束条件下计算有向图中的路径成本的问题,即许多路径有时共享同一个子路径,我不想对其进行两次计算

这些列表中的每个数字都指向有向图中的一个节点。每行描述一条路径:

[121, 85, 135, 99, 141, 134, 4, 33, 65, 131, 18, 127],
[121, 85, 135, 99, 141, 134, 65, 33, 4, 127],
[121, 85, 135, 99, 141, 134, 65, 33, 4, 131, 18, 127],
[121, 85, 135, 99, 141, 134, 65, 33, 4, 107, 127],
[121, 85, 135, 99, 141, 134, 65, 23, 18, 127],
[121, 85, 135, 99, 141, 134, 65, 23, 18, 131, 4, 127],
[121, 85, 135, 99, 141, 134, 65, 23, 18, 131, 4, 107, 127],
[121, 85, 135, 99, 141, 134, 65, 107, 4, 127],
[121, 85, 135, 99, 141, 134, 65, 107, 4, 131, 18, 127],
[121, 85, 135, 99, 141, 134, 65, 107, 127],
[121, 85, 135, 99, 141, 134, 65, 131, 18, 127],
[121, 85, 135, 99, 141, 134, 65, 131, 4, 127],
[121, 85, 135, 99, 141, 134, 65, 131, 4, 107, 127],
[121, 85, 135, 99, 141, 4, 127],
...
正如在本例中可以看到的,许多路径沿途共享相同的节点子集。(许多其他路径[此处未显示]不共享子路径。)

我想计算每条路径的“最优性”,即沿途权重的总和或乘积。在遍历每条路径时,可以将这些权重视为我的图的常量

需要明确的是:我希望避免计算本例中所有所示路径从节点121到节点141的路径的权重,因为在每个所示路径中,两个节点之间权重的乘法/加法是相同的(直到节点141)

我对数据结构的建议感到满意,并解释了为什么所提到的数据结构最适合我的需要。
如果您还有一个库推荐,我更喜欢C/C++或Python中的库。

到目前为止您尝试了什么?请包括您的python/ccode@JonasPraem:通过将我的权重乘以数百万条不同路径上的节点,对“路径长度”进行简单而重复的计算,在意识到这个方案非常低效之前,我来这里问这个问题,因为我的背景是电气工程而不是计算机科学或高等数学,这就是为什么我缺乏数据结构知识。
functools.lru\u cache
Python中的decorator来加速计算?如何给出路径?如果您需要执行
O(k)
操作来读取长度为
k
的路径,那么您最好在不增加额外成本的情况下对权重进行求和或乘法。概述:目前我正在使用Boost Graph库(C++),并使用Python进行原型制作。虽然柠檬图形库看起来不错。但老实说,我不在乎我是如何计算的,也不在乎我是否必须自己写东西或使用lib。MykolaZotko:谢谢你的留言@CătălinFr–ncu:我的问题是关于最适合的数据结构/算法。我不想在求和时读每一条路径。这将导致重复相同的计算。这就是为什么我在寻找一个不同的解决方案。我考虑了一些树结构(根eq.开始节点)。。。