是否可以使用分形来计算软件的复杂性?

时间:2011-04-18 12:37:20

标签: java .net algorithm complexity-theory

2 个答案:

答案 0 :(得分:1)

您想要计算具有分形维数的四叉树。四叉树可被视为空间填充曲线,将曲面递归细分为较小的瓦片。存在分形维数为2的sfc意味着它将2d复杂度降低到1d复杂度。你想寻找尼克的希尔伯特曲线空间指数四叉树。

答案 1 :(得分:1)

分形维度的概念在于糟糕的普通英语(AFAIK):如果我将对象的基本长度设为两倍大,那么分形得到的分数就会大得多。点,线,圆,球的平凡情况导致因子1,2,4,8将(使用二阶数学小精灵尘埃)转换为维数0,1,2,3。

对于分形物体(海绵,海岸线......),你会得到合理的数字。

如果要将其应用于软件,则必须定义三件事:

  • 什么是'基本长度'
  • 源代码的大小。
  • 你怎么'把基本长度增加两倍'

我认为有很多选择可能有意义:

我个人最喜欢的是这种组合 - 类文件的数量 - LOC - 等待项目按需扩展或使用版本控制系统在不同阶段查看系统

另一种方法是使用不同的项目来获得不同规模的“措施”。因此,您可以将Java项目的维度与C中实现的维度进行比较。

BTW:这篇文章并不算贵。

------------------ update ------------------------- 不同的想法

有一种称为“盒子计数”的方法(http://en.wikipedia.org/wiki/Box-counting_dimension)。您可以将源代码解释为树。节点例如是方法+类+字段。边缘就像“参考”一样。在此图上应用图形布局算法。在结果上使用盒子计数算法。

不知道这是否稳定(当您稍微更改代码时没有太大变化)或者根本没有任何有用的属性。但这肯定是一个有趣的实验。