public Hiearchical(LinkageCriterion criterion, int reqClust, double[,] dMatrix, List <DataPoint> p)
        {
            _criterion      = criterion;
            LinkageClusters = new List <Cluster>();
            points          = new List <DataPoint>();
            _distanceMatrix = dMatrix;
            _clusters       = N = _distanceMatrix.GetLength(0);
            _reqClusters    = reqClust;
            points          = p;

            switch (_criterion)
            {
            case LinkageCriterion.SINGLE:
                this._linkage = new SingleLinkage();
                break;

            case LinkageCriterion.COMPLETE:
                this._linkage = new CompleteLinkage();
                break;

            case LinkageCriterion.AVERAGE:
                this._linkage = new AverageLinkage();
                break;

            case LinkageCriterion.WARD:
                this._linkage = new WardLinkage();
                break;
            }
        }
        public Hiearchical(LinkageCriterion criterion, int reqClust, List <DataPoint> p)
        {
            _criterion      = criterion;
            LinkageClusters = new List <Cluster>();
            points          = new List <DataPoint>();
            _clusters       = N = p.Count();
            _reqClusters    = reqClust;
            points          = p;

            switch (_criterion)
            {
            case LinkageCriterion.SINGLE:
                this._linkage = new SingleLinkage();
                break;

            case LinkageCriterion.COMPLETE:
                this._linkage = new CompleteLinkage();
                break;

            case LinkageCriterion.AVERAGE:
                this._linkage = new AverageLinkage();
                break;

            case LinkageCriterion.WARD:
                this._linkage = new WardLinkage();
                break;
            }
        }