public void GetLikelyhood(DataSample sample, ClassLikelyhood[] result) { var matched = new int[Classes]; var currentIindex = 0; foreach (var dataPoint in sample.DataPoints) { var itemsFound = 0; for (int index = 0; index < Classes; index++) { if (matched[index] != 0) { continue; } var value = Convert.ToDouble(dataPoint.Value); var prob = _distribution[index, dataPoint.ColumnId].GetProbability(value) * _classesProbablityDistribution.GetProbability(index); if (prob > Double.Epsilon) { result[currentIindex + itemsFound].ClassId = index; result[currentIindex + itemsFound].Value = prob; itemsFound++; matched[index]++; } } if (itemsFound > 0) { Array.Sort(result, currentIindex, itemsFound, _comparerLikelyhood); currentIindex = currentIindex + itemsFound; } if (currentIindex >= 5) { return; } } if (currentIindex < 5) { for (int index = 0; index < Classes; index++) { if (matched[index] != 0) { continue; } var prob = _classesProbablityDistribution.GetProbability(index); result[currentIindex + index].ClassId = index; result[currentIindex + index].Value = prob; } Array.Sort(result, currentIindex, Classes, _comparerLikelyhood); } }