Complexitatea HALSTEAD

În cartea sa de 127 pagini, intitulată Elements of Software Science şi publicată în 1977 la Editura Elsevier North Holland, Inc., Maurice Howard HALSTEAD a prezentat o formulă de calcul a complexităţii programelor notată cu C, definită astfel:
C = m*log2 m + n*log2 n,
unde:
m - numărul operanzilor,
n - numărul operatorilor.
Acum există instrumente de măsurare a complexităţii programelor scrise în cam toate limbajele.
Aici, voi prezenta un profram în care este definită o funcţie de calcul a complexităţii pentru expresiile aritmetice simple în care apar operatorii: +, -, *, /, =, %.
Programul este:



#
# Complexitate HALSTEAD
#
import math
def comlexitate_HALSTEAD(Nr_opez, Nr_opet):
   if Nr_opez >= 2 and Nr_opet >=2:
      Complexit = Nr_opez*math.log(Nr_opez,2) +Nr_opet* math.log(Nr_opet,2)
   else:
      Complexit = -1
   return Complexit
# *********** Teste simpple
n_operanzi =2.
n_operatori =2.
Compl = comlexitate_HALSTEAD(n_operanzi, n_operatori)
print('Complxitatea HALSTEAD de test e 4, cea cal ulata este ', Compl)
n_operanzi =4.
n_operatori =8.
Compl = comlexitate_HALSTEAD(n_operanzi, n_operatori)
print('Complxitatea HALSTEAD de test e 32, cea cal ulata este ', Compl)
n_operanzi =1.
n_operatori =0.
Compl = comlexitate_HALSTEAD(n_operanzi, n_operatori)
print('Complxitatea HALSTEAD de test e -1, cea cal ulata este ', Compl)
Expresie = 'e = a + b + C * d - x /y'
nr_operatori = 0.
for c in Expresie:
   if c == '=' or c == '+' or c == '-' or c == '*' or c == '/' or c == '%':
      nr_operatori += 1.
nr_operanzi = nr_operatori +1.
print('numar operanzi este ', nr_operanzi)
print('numar operatori este ', nr_operatori)
Compl_halst = comlexitate_HALSTEAD(nr_operanzi, nr_operatori)
print('Complxitatea HALSTEAD este ', Compl_halst)




Rezultatele afişate sunt:

Complxitatea HALSTEAD de test e 4, cea cal ulata este 4.0
Complxitatea HALSTEAD de test e 32, cea cal ulata este 32.0
Complxitatea HALSTEAD de test e -1, cea cal ulata este -1
numar operanzi este 7.0
numar operatori este 6.0
Complxitatea HALSTEAD este 35.161259458730164









(Afişat azi 08 mai 2022 ora 22,50 )
revenire