public RootCluster(Cluster firstCluster, Cluster secondCluster, LinkageFunctionTypes linkageFunction, DistanceMeasurementTypes distanceMeasurement) { FirstCluster = firstCluster; SecondCluster = secondCluster; Distance = LinkageFunctionHelper.Calculate(linkageFunction, distanceMeasurement, FirstCluster, SecondCluster); FirstCluster.ComputeDistance(linkageFunction, distanceMeasurement); SecondCluster.ComputeDistance(linkageFunction, distanceMeasurement); }
public static double Calculate(LinkageFunctionTypes linkageFunction, DistanceMeasurementTypes distanceMeasurement, List <double[]> firstClusterDatapoints, List <double[]> secondClusterDatapoints) { switch (linkageFunction) { case LinkageFunctionTypes.Single: return(CalculateSingle(distanceMeasurement, firstClusterDatapoints, secondClusterDatapoints)); case LinkageFunctionTypes.Complete: return(CalculateComplete(distanceMeasurement, firstClusterDatapoints, secondClusterDatapoints)); } return(default(double)); }
public void ComputeDistance(LinkageFunctionTypes linkageFunction, DistanceMeasurementTypes distanceMeasurement) { if (Child == null) { Distance = LinkageFunctionHelper.Calculate(linkageFunction, distanceMeasurement, new List <double[]> { FirstDatapoint }, new List <double[]> { SecondDatapoint });; return; } Distance = LinkageFunctionHelper.Calculate(linkageFunction, distanceMeasurement, new List <double[]> { FirstDatapoint }, Child.GetAllDatapoints()); Child.ComputeDistance(linkageFunction, distanceMeasurement); }
public static double Calculate(LinkageFunctionTypes linkageFunction, DistanceMeasurementTypes distanceMeasurement, Cluster firstCluster, Cluster secondCluster) { return(Calculate(linkageFunction, distanceMeasurement, firstCluster.GetAllDatapoints(), secondCluster.GetAllDatapoints())); }