public static void MinimizeHopcroft(Automaton a)
        {
            a.Determinize();
            var tr = a.Initial.Transitions;

            if (tr.Count == 1)
            {
                var t = tr[0];
                if (t.To == a.Initial && t.Min == char.MinValue && t.Max == char.MaxValue)
                {
                    return;
                }
            }

            a.Totalize();

            var ss     = a.GetStates();
            var states = new State[ss.Count];
            var number = 0;

            foreach (var q in ss)
            {
                states[number] = q;
                q.Number       = number++;
            }

            var sigma = a.GetStartPoints();

            var v       = Enumerable.Repeat <LinkedList <State> >(default, sigma.Length);
Example #2
0
        public static Automaton Complement(Automaton a)
        {
            a = a.CloneExpandedIfRequired();
            a.Determinize();
            a.Totalize();
            foreach (var p in a.GetStates())
            {
                p.Accept = !p.Accept;
            }

            a.RemoveDeadTransitions();
            return(a);
        }