Clusterizator.Krab.GraphManager.ConnectGraph C# (CSharp) Метод

ConnectGraph() публичный Метод

Method is connecting nodes into "shortest unclosed path" (snp).
public ConnectGraph ( ) : void
Результат void
        public void ConnectGraph()
        {
            for (int i = 0; i < Elements.Count - 1; i++)
            {
                var minDistance = double.MaxValue;
                int pointNumber = -1;

                // searching for shortest available connection
                for (int j = 0; j < Connections.Count; j++)
                {
                    // checking that noeds are in different subgraphs
                    bool taxonNumberCheck = (Elements[Connections[j].FirstElementIndex].TaxonNumber !=
                                             Elements[Connections[j].SecondElementIndex].TaxonNumber)
                                            || (Elements[Connections[j].FirstElementIndex].TaxonNumber == 0);
                    if ((Connections[j].Lambda < minDistance) && taxonNumberCheck)
                    {
                        minDistance = Connections[j].Lambda;
                        pointNumber = j;
                    }
                }

                Connect(Connections[pointNumber].FirstElementIndex, Connections[pointNumber].SecondElementIndex);
            }
        }

Usage Example

        /// <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;
        }
All Usage Examples Of Clusterizator.Krab.GraphManager::ConnectGraph