Пример #1
0
        public I_f Generate()
        {
            I_f ret = new I_f();

            ////////////////////test
            //ffunc = 0;
            ///////////////////////
            ret.f     = ffunc;
            ret.glist = new List <gNode>();

            //由于int只有32个二进制位的限制,最多支持到31维
            //点用int表示
            int pointsCount         = (int)Math.Pow(2, nDim);
            List <BigInteger> deDup = new List <BigInteger>();

            for (int alpha = 0; alpha < pointsCount; alpha++)
            {
                int        count     = 0;
                int        isFAlpha1 = Func(alpha) == 1 ? 1 : 0;                //f(α)等于1? 是,为1;否则为0
                List <int> betas     = null;

                betas = FindDownUpPoints(alpha, isFAlpha1);                     //如果f(α)==1,寻找下级。反之寻找上级
                foreach (int beta in betas)
                {
                    if (Func(beta) == isFAlpha1)
                    {
                        count++;
                        if (count >= 2)
                        {
                            //生成一个g
                            gNode      node = new gNode();
                            BigInteger g    = ffunc;
                            BigInteger mod  = 1;
                            mod = mod << alpha;
                            g   = g ^ mod;
                            if (!deDup.Contains(g))
                            {
                                deDup.Add(g);
                                node.g = g;
                                node.G = alpha;
                                ret.glist.Add(node);
                            }
                            break;
                        }
                    }
                }
            }

            return(ret);
        }
Пример #2
0
        public static void Main()
        {
            String s = Convert.ToString(UInt32.MaxValue, 2).PadLeft(32, '0');


            gGenerate    generate = new gGenerate();
            FileStream   fs       = new FileStream("monotone.txt", FileMode.Open);
            StreamReader sr       = new StreamReader(fs);
            String       line;

            generate.nDim = 5;
            List <I_f> lstIf = new List <I_f>();

            while ((line = sr.ReadLine()) != null)
            {
                BigInteger ffunc = Convert.ToUInt32(line, 2);                    //把string转换成十进制
                UInt32     dd    = (UInt32)ffunc;
                generate.ffunc = ffunc;
                I_f i = generate.Generate();
                lstIf.Add(i);
            }
            ToGenerateXML(lstIf);

            //TestDuplication
            List <BigInteger> integers = new List <BigInteger>();

            foreach (var ii in lstIf)
            {
                foreach (var g in ii.glist)
                {
                    if (integers.Contains(g.g))
                    {
                        Console.Out.WriteLine(g.g);
                    }
                    integers.Add(g.g);
                }
            }
            return;
        }