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