示例#1
0
        public static SolveResult Gaussian(SolveRequest solvereq)
        {
            GuassianSolveResult result = new GuassianSolveResult(solvereq.B, solvereq.L);

            for (int i = 0; i < Math.Min(solvereq.B, solvereq.L); i++)
            {
                if (solvereq.Coefficients[i][i] == 0)
                {
                    for (int j = i + 1; j < solvereq.B; j++)
                    {
                        if (solvereq.Coefficients[j][i] == 1)
                        {
                            BinaryVector tmp = solvereq.Coefficients[j];
                            solvereq.Coefficients[j] = solvereq.Coefficients[i];
                            solvereq.Coefficients[i] = tmp;
                            break;
                        }
                    }
                }
                if (solvereq.Coefficients[i][i] == 1)
                {
                    for (int j = 0; j < solvereq.B; j++)
                    {
                        if (j != i)
                        {
                            if (solvereq.Coefficients[j][i] == 1)
                            {
                                BinaryVector.FastAdd(solvereq.Coefficients[j], solvereq.Coefficients[i]);
                            }
                        }
                    }
                }
                else
                {
                    solvereq.Coefficients[i][i] = 1;//<-this may or may not work
                    BinaryVector col = new BinaryVector(solvereq.B);
                    for (int j = 0; j < solvereq.B; j++)
                    {
                        col[j] = solvereq.Coefficients[j][i];
                    }
                    result.reducedMatrix.Add(col);
                }
            }
            result.End();
            return(result);
        }
示例#2
0
            private void incrementBit(int idx)
            {
                if (idx == freeMult.Length)
                {
                    done = true;
                    return;
                }

                if (freeMult[idx] == 1)
                {
                    freeMult[idx] = 0;
                    incrementBit(idx + 1);
                }
                else
                {
                    freeMult[idx] = 1;
                }

                if (freeMult[idx] == 1)
                {
                    BinaryVector.FastAdd(currSolution, reducedMatrix[idx]);
                }
            }