Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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_Excel_Spreadsheet - Fatal编程技术网

Algorithm 在电子表格中查找循环引用的算法

Algorithm 在电子表格中查找循环引用的算法,algorithm,excel,spreadsheet,Algorithm,Excel,Spreadsheet,我有一个公式的电子表格应用程序。我正在寻找在公式中检测循环引用的最佳算法。我目前采用的方法很慢,当公式中有长链计算时,会占用太多内存。它包括为每个公式保留所有依赖项集。因此,如果第一列单元格的每个单元格都有一个公式,其中引用了前面的单元格,则第一个单元格的集合将为空。第二个单元格的集合将只包含第一个单元格,第三个单元格的集合将包含单元格1和2,…,第1000个单元格的集合将包含其前面的999个单元格。当引入新公式时,将构建其依赖项集,如果该集包含新公式,则存在循环引用。但显然,在这种情况下,所需

我有一个公式的电子表格应用程序。我正在寻找在公式中检测循环引用的最佳算法。我目前采用的方法很慢,当公式中有长链计算时,会占用太多内存。它包括为每个公式保留所有依赖项集。因此,如果第一列单元格的每个单元格都有一个公式,其中引用了前面的单元格,则第一个单元格的集合将为空。第二个单元格的集合将只包含第一个单元格,第三个单元格的集合将包含单元格1和2,…,第1000个单元格的集合将包含其前面的999个单元格。当引入新公式时,将构建其依赖项集,如果该集包含新公式,则存在循环引用。但显然,在这种情况下,所需的时间和内存呈指数增长。

将单元格之间的依赖关系表示为有向图,并使用(大小为2或更大的每个强连接组件都包含循环).

无论如何,您都需要对单元格进行拓扑排序,以便在某些内容发生更改时能够快速计算单元格的值。拓扑排序过程还将循环检测为副产品


请参见

也许您有自己检查的动机,但Excel已经自动检查循环引用。您可以使用VBA中的
工作表.CircularReference
属性来访问此信息。

答案可能有用数据不在Excel工作簿中。我刚刚用Excel标记了这个问题,因为它与Excel场景密切相关。谢谢。我已经有了一个排序公式和检测变化的快速算法,但现在我可以删除它,用它一举两得。