Esempio n. 1
0
 protected LBDDNode Contraction(LBDDNode x, int v, bool pos) // сужение функции на 0 или 1
 {
     if (v != x.GetVarId())
     {
         return(x);
     }
     return(pos ? x.GetHigh() : x.GetLow());
 }
Esempio n. 2
0
        private void ConvertToDot(LBDDNode node)
        {
            if (node.IsTerminal)
            {
                return;
            }
            var v = CreateVertex(node);
            var l = CreateVertex(node.GetLow());
            var h = CreateVertex(node.GetHigh());

            if (!g.ContainsEdge(v, l))
            {
                g.AddEdge(new LBDDToGraph.Edge(v, l, false));
            }
            if (!g.ContainsEdge(v, h))
            {
                g.AddEdge(new LBDDToGraph.Edge(v, h, true));
            }
            ConvertToDot(node.GetLow());
            ConvertToDot(node.GetHigh());
        }
Esempio n. 3
0
        public virtual LBDDNode NOT(LBDDNode f)
        {
            if (f.GetId() == Zero.GetId())
            {
                return(One);
            }
            if (f.GetId() == One.GetId())
            {
                return(Zero);
            }

            if (_notCache.ContainsKey(f.GetId()))
            {
                return(_notCache[f.GetId()]);
            }

            int      v       = f.GetVarId();
            var      invLow  = NOT(f.GetLow());
            var      invHigh = NOT(f.GetHigh());
            LBDDNode node    = null;

            if (f.IsDouble())
            {
                node = MakeOrReturn(v, LBDDNode.Labeling.Double, invHigh, invLow);
            }

            else if (f.IsNegate())
            {
                node = MakeOrReturn(v, LBDDNode.Labeling.Non, invLow, invHigh);
            }

            else /*f.IsNormal()*/
            {
                node = MakeOrReturn(v, LBDDNode.Labeling.Negate, invLow, invHigh);
            }

            _notCache.Add(f.GetId(), node);
            return(node);
        }