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

时间:2011-04-20 14:25:07

标签: algorithm excel spreadsheet

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

3 个答案:

答案 0 :(得分:5)

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

请参阅http://en.wikipedia.org/wiki/Topological_sorting

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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