Ejemplo n.º 1
0
        //returns true if candidate vertex can be decomposed in multiple ways from set of possible edges.
        private bool DoubleDecompositionHeuristic(Point2 candidateVertex, List <Point2> possibleEdges)
        {
            return(DoubleDecompositionBruteForce(candidateVertex, possibleEdges));

            //possibleEdges may not be required.

            var numberOfNonZeroCoordinates = candidateVertex.GetDimension();

            List <Point2> usedVectors = new List <Point2>();

            //create data structure to store (2) decompositions of candidate vertices.

            //make a copy of candidateVertex that will be modified (i.e. subtracting vectors).

            while (true)     //need to determine termination condition for loop
            {
                //find first nonzero coordinate of current vector
                var           firstNonZeroIndex = candidateVertex.FirstNonZeroIndex();
                List <Point2> splitVectors      = new List <Point2>();

                //generate corresponding unit vector
                Point2 unitVector = Point2.GenerateOnesVector(candidateVertex.GetDimension(), firstNonZeroIndex);

                //ensure unit vector is not in usedVector list, if vector is used, perform split. Check to make sure split vectors are not used before.
                if (usedVectors.Contains(unitVector))
                {
                    splitVectors = Point2.SplitVectors(unitVector, usedVectors);
                }

                if (splitVectors.Count == 0)
                {
                    //Cannot split the current vector, hence no decomposition possible
                }

                //subtract unit vector from current vector

                //add unit vector to usedVeectorList
            }
            return(DoubleDecompositionBruteForce(candidateVertex, possibleEdges));
        }