有多少个单元格具有有限值

时间:2016-12-28 18:04:40

标签: algorithm graph-algorithm

我遇到了一个编程问题。

考虑我有N个细胞。这些细胞可以有一些整数值或表达式。 可以有T个迭代次数。在每次迭代中,都可以更新一些单元格。 在每次迭代中,我必须告诉有多少个单元格具有有限值(可以确定)。

例如,如果N = 5,那么五个单元可以是A,B,C,D,E。 假设以下是值 A = 4,B = D + E,C = 2 * B,D = 6,E = A + B
因此,在这种情况下,只有两个单元(A和D)分别具有有限值4和6.B,C和E的值不能确定.B取决于E,而E又依赖于B(循环直接依赖)。另一方面,C取决于未确定的B。

假设现在我将B更新为10而不是D + E,那么所有单元都具有有限值。 A(4),B(10),C(20),D(6),E(14)。在每次迭代中,可以改变单元格的值。

约束:(1'<'N< = 200,1<'T'< = 1000)

我尝试过:为每个单元格创建依赖项列表。对于每次迭代更新该依赖项列表。如果它包含任何一个未确定的元素,那么对于此迭代,此​​单元格不能具有有限值。 还有其他更好的方法吗?

1 个答案:

答案 0 :(得分:0)

本能地,我会一路走来并构建一个合适的依赖图。这是一个有向图,如果节点依赖于它们,则节点具有到其他节点的边。

更新节点时,我们只需销毁其出站边缘并根据需要重建它们。实际计算:从每个节点开始,我们开始深度优先遍历,当遇到标记为“已知”的节点时终止,然后开始向后传播标记:也就是说,如果所有节点都将其标记为“已知”子节点标记为这样。

我认为这与您的解决方案基本相同。根据实际的实现,这可能会有更好的运行时性能,我认为这是一个视觉上更清晰的解决方案。

关于@ Henry的评论:

  

如果A = 2 * B且B = A - 3怎么办?有一个独特的解决方案A = 6,B = 3 in   尽管有循环参考。

我们可以在更新后引入优化步骤。我们可以检查循环,如果我们找到了循环,我们可以尝试通过求解方程组来解决它。那很酷。

相关问题