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); }
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; }