public double Calculate(Chain chain, Link link)
{
double result = 0;
double g = averageRemoteness.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 gj = averageRemoteness.Calculate(chain.CongenericChain(chain.Alphabet[i]), link);
double delta = gj - g;
result += n == 0 ? 0 : delta * delta * delta * delta * nj / n;
}
return result;
}