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

标签 java .net algorithm complexity-theory

.net 或 java 中的任何想法或任何具体内容?分形维数表示复杂性。一个分形是由其他分形组成的。如果软件模块可以以某种方式被视为分形,那将是可能的吗?

更新:找到了这个但是没有权限访问它。有人做吗?

计算分形维数 - 大型软件系统的全局指标 http://ieeexplore.ieee.org/articleSale/Sarticle.jsp?reload=true&arnumber=5676891

确定这是全新的范例,所以我的问题是:你会怎么做?

最后有一些有趣的建议。直觉上,我认为分形维数可以更好地衡量复杂性,它比其他指标(如 cycloblahblahblah 太接近低级机器操作)更接近人类感受。

最佳答案

分形维数的概念用不好的普通英语 (AFAIK) 表达:如果我将一个对象的基本长度设为两倍大,那么分形会变大多少。点、线、圆、球这些简单的情况导致因子 1、2、4、8 转换(使用二阶数学 Sprite 尘)到维度 0、1、2、3。

对于类似分形的物体(海绵、海岸线...),您会得到有理数。

如果你想将它应用到软件中,你必须定义三件事:

  • 什么是“基本长度”
  • 源代码的大小是多少。
  • 如何“使基本长度加倍”

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

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

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

顺便说一句:这篇文章并没有那么贵。

----------------更新------------------------ 不同的想法

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

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

关于java - 是否可以使用分形来计算软件的复杂性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5702989/

相关文章:

java - 插入 "Duplicate entry ... for key PRIMARY"和 "Krakow"时为 "Kraków"

java - Dagger 2 - 如果没有 @Provides 注释的方法则无法提供

.net - 错误 NU1605 检测到软件包降级

c# - 以编程方式连接和断开 USB 设备

algorithm - 求解递归 T(n) = T(n/2) + lg n?

java - Eclipse/OSGi : How to control the file-name created via an exported plugin (jar)

java - Apache Ignite 无法找到 XML 模式命名空间的 Spring NamespaceHandler

C# 所有管道实例都忙

c++ - 带有红黑树的免费列表分配器

algorithm - 最大化具有给定最小权重的子图数