public double Calculate(Chain chain, Link link)
{
double result = 0;
double h = identificationInformation.Calculate(chain, link);
int n = (int)intervalsCount.Calculate(chain, link);
for (int i = 0; i < chain.Alphabet.Cardinality; i++)
{
double nj = intervalsCount.Calculate(chain.CongenericChain(chain.Alphabet[i]), link);
double hj = identificationInformation.Calculate(chain.CongenericChain(chain.Alphabet[i]), link);
double deltaH = hj - h;
result += n == 0 ? 0 : deltaH * deltaH * deltaH * deltaH * nj / n;
}
return result;
}