You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Zero/ZeroLevel.HNSW/Utils/ProbabilityLayerNumberGener...

35 lines
958 B

3 years ago
using System;
namespace ZeroLevel.HNSW.Services
{
internal sealed class ProbabilityLayerNumberGenerator
{
private const float DIVIDER = 3.361f;
private readonly float[] _probabilities;
3 years ago
private float _mL;
internal ProbabilityLayerNumberGenerator(int maxLayers, int M)
{
3 years ago
_mL = maxLayers;
_probabilities = new float[maxLayers];
var probability = 1.0f / DIVIDER;
for (int i = 0; i < maxLayers; i++)
{
_probabilities[i] = probability;
probability /= DIVIDER;
}
}
internal int GetRandomLayer()
{
var probability = DefaultRandomGenerator.Instance.NextFloat();
for (int i = 0; i < _probabilities.Length; i++)
{
if (probability > _probabilities[i])
return i;
}
return 0;
}
}
}

Powered by TurnKey Linux.