public double LogKtMultiplier(int index, int symbol)
{
var node = this.Nodes[index];
if (node.NumberOf0S < this.CacheMultipliersBellow && node.NumberOf1S < this.CacheMultipliersBellow)
{
if (symbol == 1)
return this.Multipliers[node.NumberOf0S+node.NumberOf1S, node.NumberOf1S];
else {
return this.Multipliers[node.NumberOf0S + node.NumberOf1S, node.NumberOf0S];
}
}
double denominator = node.NumberOf0S + node.NumberOf1S + 1;
double numerator;
if (symbol == 1)
{
numerator = node.NumberOf1S + 0.5;
}
else
{
numerator = node.NumberOf0S + 0.5;
}
return Math.Log(numerator / denominator);
}