/// <summary> /// See <see cref="IDistribution.CreateDistribution(List{double})"/>. /// </summary> public Dictionary <double, double> CreateDistribution(List <double> allBuckets) { Dictionary <double, double> result = new Dictionary <double, double>(); double previousResultCache = 0; for (int i = 0; i < allBuckets.Count; i++) { double currentResult = 1 - Math.Pow(1 - PROBABILITY, i + 1); result[allBuckets[i]] = currentResult - previousResultCache; previousResultCache = currentResult; } return(DistributionUtils.AdjustToOne(result)); }
/// <summary> /// Creates the distribution by using the given mean and deviation value. /// </summary> /// <param name="allBuckets">All buckets.</param> /// <param name="mean">The mean for the normal distribution.</param> /// <param name="deviation">The standard deviation for the normal distribution.</param> public virtual Dictionary <double, double> CreateDistribution(List <double> allBuckets, double mean, double deviation) { Dictionary <double, double> result = new Dictionary <double, double>(); double previousResultCache = 0; for (int i = 0; i < allBuckets.Count; i++) { double currentResult = Normal.CDF(mean, deviation, allBuckets[i]); result[allBuckets[i]] = currentResult - previousResultCache; previousResultCache = currentResult; } return(DistributionUtils.AdjustToOne(result)); }
/// <summary> /// See <see cref="IDistribution.CreateDistribution(List{double})"/>. /// </summary> public Dictionary <double, double> CreateDistribution(List <double> allBuckets) { GeometricDistribution geometricDistribution = new GeometricDistribution(); Dictionary <double, double> original = geometricDistribution.CreateDistribution(allBuckets); Dictionary <double, double> result = new Dictionary <double, double>(); for (int i = 0; i < allBuckets.Count; i++) { double index = allBuckets[i]; double inverseIndex = allBuckets[allBuckets.Count - 1 - i]; result[index] = original[index] + original[inverseIndex]; } return(DistributionUtils.AdjustToOne(result)); }
/// <summary> /// See <see cref="Distribution.CreateDistribution(List{double})"/>. /// </summary> public Dictionary <double, double> CreateDistribution(List <double> allBuckets) { Dictionary <double, double> result = new Dictionary <double, double>(); int numberOfBuckets = allBuckets.Count - 1; for (int k = 0; k <= numberOfBuckets; k++) { double firstPart = (Factorial(numberOfBuckets) / (Factorial(k) * Factorial(numberOfBuckets - k))); double secondPart = Math.Pow(PROBABILITY, k) * Math.Pow((1 - PROBABILITY), (numberOfBuckets - k)); double probability = firstPart * secondPart; result[allBuckets[k]] = probability; } // Adjust it to be 1.0 in the sum result = DistributionUtils.AdjustToOne(result); return(result); }