ConnectGraph() 공개 메소드

Method is connecting nodes into "shortest unclosed path" (snp).
public ConnectGraph ( ) : void
리턴 void
        /// <summary>
        /// Clusterization method for given groups number.
        /// </summary>
        /// <param name="clustersCount">
        /// Groups count.
        /// </param>
        /// <param name="data">
        /// Characteristics values for every object.
        /// First dimension represents objects.
        /// Second Dimension represents characteristics.
        /// </param>
        /// <returns>
        /// Optimal clusterization as <see cref="ClusterizationVariants"/>.
        /// </returns>
        public int[] Cluster(int clustersCount, double[][] data)
        {
            // all connections (pairs of elements)
            var connections = new List<Connection>();

            // all elements
            var elements = new List<GraphElement>();

            for (int i = 0; i < data.Length; i++)
            {
                elements.Add(new GraphElement(data[i], i));
            }

            for (int j = 0; j < elements.Count - 1; j++)
            {
                for (int k = j + 1; k < elements.Count; k++)
                {
                    connections.Add(new Connection(j, k));
                }
            }

            manager = new GraphManager(connections, elements);

            // calculating distances
            CommonCalculator.CalculateCharacteristic(manager, normalizedDistanceWeight, distanceWeight);
            manager.ConnectGraph();
            GraphManager tempManager = manager.Clone();
            ChooseDivision(clustersCount, 0, manager);
            var result = new int[data.Length];

            // extracting clusters from the graph
            for (int j = 0; j < optimalDivide.Elements.Count; j++)
            {
                result[j] = optimalDivide.Elements[j].TaxonNumber;
            }

            manager = tempManager;
            return result;
        }
        public void GraphConnectionTest()
        {
            connectionsList[0].Connected = false;
            connectionsList[14].Connected = false;

            for (int i = 0; i < connectionsList.Count; i++)
            {
                elementsList[connectionsList[i].FirstElementIndex].TaxonNumber = 0;
                elementsList[connectionsList[i].SecondElementIndex].TaxonNumber = 0;
            }

            var lambdas = new[] { 10, 20, 15, 21, 6, 11, 12, 27, 16, 9, 25, 26, 13, 21, 22 };

            for (int i = 0; i < lambdas.Length; i++)
            {
                connectionsList[i].Lambda = lambdas[i];
            }

            var connector = new GraphManager(connectionsList, elementsList);
            connector.ConnectGraph();
            Assert.IsTrue(connectionsList[0].Connected);
            Assert.IsTrue(connectionsList[4].Connected);
            Assert.IsTrue(connectionsList[5].Connected);
            Assert.IsTrue(connectionsList[9].Connected);
            Assert.IsTrue(connectionsList[12].Connected);
            Assert.IsFalse(connectionsList[1].Connected);
            Assert.IsFalse(connectionsList[2].Connected);
            Assert.IsFalse(connectionsList[3].Connected);
            Assert.IsFalse(connectionsList[6].Connected);
            Assert.IsFalse(connectionsList[7].Connected);
            Assert.IsFalse(connectionsList[8].Connected);
            Assert.IsFalse(connectionsList[10].Connected);
            Assert.IsFalse(connectionsList[11].Connected);
            Assert.IsFalse(connectionsList[13].Connected);
            Assert.IsFalse(connectionsList[14].Connected);
        }