在n个步骤内计算有向图中获得的最大值的良好算法

时间:2016-09-02 14:00:47

标签: algorithm graph

问题是这样的: 每个顶点在第i步具有值Value [i] (此图只是一个演示,与后面的示例计算无关)

            +----+-----+------+------+-----+-----+-----+----+-----+----  +------+-------+
            |    |     |      |      |     |     |     |    |     |    |      |       |
Value for V1| 2  |  1  |  6   |   4  |    3|   4 |  5  |  1 |   9 | 1  | 10   |   2   |
            |    |     |      |      |     |     |     |    |     |    |      |       |
            +----+-----+------+------+-----+-----+-----+----+-----+----+------+-------+

这一步是全球性的一步。所以当我们从第1步到第2步时,其数组中所有顶点的值索引都会移动。

目的是找到以N个步骤获得最大值的最大路径。

所以例如:

我们有顶点A,B,C

值数组:1,4,5,2,3

B值数组:2,1,1,5,4

C值数组3,2,9,6,1

图:A - > B; B - > C; C - > A

N:5(你有步骤)

最佳路径:(始终从A开始)

A-> B-> C-> C->一种

价值:20

因为如果我们这样做

A-> B-> C-> C-> C值仅为18。

这样做的好算法是什么?

Dijkstra似乎不适合这个。

1 个答案:

答案 0 :(得分:1)

您可以为每个步骤找到以特定顶点结尾的最佳子路径。

在第一步中,为每个顶点找到在此顶点结束并导致最大值的子路径。在接下来的步骤中,从这些先前的值开始并重复。如果存储每个顶点的前驱,则子路径(和值)很容易找到:只需选择具有最大值的前驱。

输入(和反身边)的示例:

A values : 1, 4, 5, 2, 3  
B values : 2, 1, 1, 5, 4  
C values : 3, 2, 9, 6, 1  
A successors : A, B
B successors : B, C
C successors : A, C
A predecessors : A, C
B predecessors : A, B
C predecessors : B, C

从A开始,值1,第一步导致:

A max : 5 (subpath A->A)
B max : 2 (subpath A->B)
C max : 0 (no subpath)

第二步:

A max : 10 (subpath A->A->A)    <- the predecessors of A are A and C,
                                   and the previous max value of A
                                   is greater than that of C.
B max : 5 (subpath A->A->B)
C max : 11 (subpath A->B->C)

第三步:

A max : 13 (subpath A->B->C->A)
B max : 15 (subpath A->A->A->B)
C max : 17 (subpath A->B->C->C)

第四步也是最后一步:

A max : 20 (path A->B->C->C->A)
B max : 19 (path A->A->A->B->B)
C max : 18 (path A->B->C->C->C)