private DFAState Build_New_DFA(List <List <int> > part, int state)
        {
            DFAState tmp = new DFAState();

            tmp.finished = false;
            if (DFA_state_list[part[state][0]].finished)
            {
                tmp.finished = true;
            }
            foreach (int index in active_charset_index)
            {
                tmp.char_set[index] = Get_Group_Index(part, DFA_state_list[part[state][0]].char_set[index]);
            }
            return(tmp);
        }
        private void Minimize_DFA()
        {
            // initializing the partitions
            List <List <int> > part = Initialize_Partition();

            // structure the partitions
            Structure_Partition(ref part);
            // build minimum DFA
            CleanEmptyPart(ref part);
            for (int i = 0; i < part.Count; i++)
            {
                DFAState tmp = Build_New_DFA(part, i);
                Min_DFA_state_list.Add(tmp);
            }
        }