STMT

Halstead复杂度

设n1 表示程序中不同的操作符(程序保留字、运算符、分隔 符、函数调用) 个数,n2 表示程序中不同的操作数(常量、 变量) 个数,N1 表示程序中出现的操作符总数,N2 表示程序 中出现的操作数总数。
Halstead程序词汇表长度Program vocabulary:n= n1+ n2 .
实际Halstead长度或简单长度Program length: N= N1+N2 .
以N^表示程序的预测长度Calculated program length: N^= n1log2n1 + n2log2n2 . ◌ Halstead 的重要结论之一是:程序的实际长度N与预测长度 N^ 非常接近,这表明即使程序还未编写完也能预先估算出 程序的实际长度N。

#include <stdio.h>
#include <math.h>
int main() {
    float a, b, c, mean;
    scanf("%f %f %f", &a, &b, &c);
    mean = a * b * c;
    mean = pow(mean, 1.0 / 3.0);
    printf("Geometric Mean = %f", mean);
    return 0;
} 

unique operator:#, include, <>, stdio.h, math.h, int, main, (), {}, float, scanf, &, *, =, pow,/, printf, return.
unique oprands:a, b, c, mean, “%f,%f,%f”,1.0,3.0,”Geometric Mean = %f”,0.
n1=18,n2=9,N1=28,N2=19.
Halstead程序词汇表长度Program vocabulary:n= n1+ n2 =18+9=27
实际Halstead长度或简单长度Program length: N= N1+N2=28+19=47
以N^表示程序的预测长度Calculated program length:
N^= n1log2n1 + n2log2n2=103.5879

  1. 程序体积或容量Volume: V=Nlog2(n)V=Nlog2(n),表明了程序在词汇上 的复杂性。
    V=47log2(27)=223.48V=47log2(27)=223.48
  2. 程序级别Level: LL^=(2/n1)x(n2/N2)(n2/N2),表明了一个程序的最 紧凑形式的程序量与实际程序量之比,反映了程序的效率。
    LL^=(2/n1)x(n2/N2)=(2/18)(9/19)=0.0526(n2/N2)=(2/18)∗(9/19)=0.0526
  3. 程序难度Difficulty: D=1/LD=1/L^,表明了实现算法的困难程度。
    D = 19
  4. 编程工作量Effort:E=VE=VxD=V/LD=V/L^ .
    E = 223.48*19 = 4246.12
  5. 智能级别:I=LI=L^xEE .
    I = 223.35
  6. 语言级别:L=L^xLL^xV .
    L=0.618L‘=0.618
  7. 编程时间(hours): TT^ =E/(Sxf)f),这里S = 60x60, f = 18 .
    TT^=0.065526
  8. 平均语句大小:N/语句数
    47/10=4.7
  9. 程序中的错误数预测值:B=Nxlog2(n1+n2)/3000log2(n1+n2)/3000 .
    B=47B=47xlog2(18+9)/3000=0.0745log2(18+9)/3000=0.0745
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值