internal Core(Func <TItem, TItem, TDistance> distance, SmallWorld <TItem, TDistance> .Parameters parameters) { Distance = distance; Parameters = parameters; var initialSize = Math.Max(1024, parameters.InitialItemsSize); Nodes = new List <Node>(initialSize); Items = new List <TItem>(initialSize); switch (Parameters.NeighbourHeuristic) { case NeighbourSelectionHeuristic.SelectSimple: { Algorithm = new Algorithms.Algorithm3 <TItem, TDistance>(this); break; } case NeighbourSelectionHeuristic.SelectHeuristic: { Algorithm = new Algorithms.Algorithm4 <TItem, TDistance>(this); break; } } if (Parameters.EnableDistanceCacheForConstruction) { DistanceCache = new DistanceCache <TDistance>(); DistanceCache.Resize(parameters.InitialDistanceCacheSize, false); } DistanceCalculationsCount = 0; }
/// <summary> /// Initializes a new instance of the <see cref="Core"/> class. /// </summary> /// <param name="distance">The distance function in the items space.</param> /// <param name="parameters">The parameters of the world.</param> /// <param name="items">The original items.</param> internal Core(Func <TItem, TItem, TDistance> distance, SmallWorld <TItem, TDistance> .Parameters parameters, IReadOnlyList <TItem> items) { this.distance = distance; this.Parameters = parameters; this.Items = items; switch (this.Parameters.NeighbourHeuristic) { case SmallWorld <TItem, TDistance> .NeighbourSelectionHeuristic.SelectSimple: this.Algorithm = new Node.Algorithm3 <TItem, TDistance>(this); break; case SmallWorld <TItem, TDistance> .NeighbourSelectionHeuristic.SelectHeuristic: this.Algorithm = new Node.Algorithm4 <TItem, TDistance>(this); break; } if (this.Parameters.EnableDistanceCacheForConstruction) { this.distanceCache = new DistanceCache <TDistance>(this.Items.Count); } this.distanceCacheHitCount = 0; this.distanceCalculationsCount = 0; }