Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 有多少单元格将具有有限值_Algorithm_Graph Algorithm - Fatal编程技术网

Algorithm 有多少单元格将具有有限值

Algorithm 有多少单元格将具有有限值,algorithm,graph-algorithm,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是待定的 假设,现在

我遇到了一个编程问题

假设我有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是待定的

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


约束:(1'本能地,我会尽一切努力构建一个适当的依赖图。这是一个有向图,一个节点与其他节点有边,如果它依赖于它们的话

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

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

关于@Henry的评论:


如果A=2*B和B=A-3呢?有一个唯一的解决方案A=6,B=3 尽管循环引用


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

本能地,我会尽全力构建一个适当的依赖关系图。这是一个有向图,如果一个节点依赖于其他节点,那么它与其他节点有边

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

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

关于@Henry的评论:


如果A=2*B和B=A-3呢?有一个唯一的解决方案A=6,B=3 尽管循环引用


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

如果A=2*B和B=A-3怎么办?尽管存在循环引用,但有一个唯一的解决方案A=6,B=3。依赖项列表是哪种方式?你如何重复出现rsive更新?依赖关系可以是任意一种方式。可能所有单元格都是不确定的。我的意思是,如果A依赖于B,你是将其存储在A中还是存储在B中?每个单元格都有一个表达式。因此,如果A依赖于B,它将存储在A中,如果A=2*B和B=A-3,那么A=6,B=3是唯一的解决方案,不管循环引用如何。依赖关系列表是哪种方式去?你怎么做递归更新?依赖性可以去任何一种方式。可能所有的单元格都是不确定的。我的意思是,如果A依赖于B,你是将它存储在A还是B中?每个单元格都有一个表达式。所以如果A依赖于B,它将存储在A中