Python 基于Hopcroft算法的DFA最小化

Python 基于Hopcroft算法的DFA最小化,python,algorithm,automata,Python,Algorithm,Automata,我不知道为什么这个算法在我的代码中不起作用,我的代码中有问题吗?Ok。1) 到底是什么不起作用?它是给你一个错误,还是只是没有产生正确的输出?您期望什么样的输出?程序输出与此有什么不同?2) 什么是dfa对象?你有密码吗?什么是“国家”?这是一个列表、int、字符串等吗?很遗憾这个问题已经结束了,因为我遇到了完全相同的问题。 P := {F, Q \ F}; W := {F}; while (W is not empty) do choose and remove a set A fr

我不知道为什么这个算法在我的代码中不起作用,我的代码中有问题吗?

Ok。1) 到底是什么不起作用?它是给你一个错误,还是只是没有产生正确的输出?您期望什么样的输出?程序输出与此有什么不同?2) 什么是
dfa
对象?你有密码吗?什么是“国家”?这是一个列表、int、字符串等吗?很遗憾这个问题已经结束了,因为我遇到了完全相同的问题。
P := {F, Q \ F};
W := {F};
while (W is not empty) do
     choose and remove a set A from W
     for each c in ∑ do
          let X be the set of states for which a transition on c leads to a state in A
          for each set Y in P for which X ∩ Y is nonempty do
               replace Y in P by the two sets X ∩ Y and Y \ X
               if Y is in W
                    replace Y in W by the same two sets
               else
                    if |X ∩ Y| <= |Y \ X|
                         add X ∩ Y to W
                    else
                         add Y \ X to W
          end;
     end;
end;
def minimize(self,dfa):
    P = [set(dfa.finalstates),dfa.states.difference(set(dfa.finalstates))]
    W = [set(dfa.finalstates)]

    while len(W) != 0:
        A = W[0]
        W.remove(A)
        X = set()
        for c in dfa.alphabet:
            for from_state, to_state in dfa.transitions.items():
                for toNum, value in to_state.items():
                    if c in value and toNum in A:
                        X.update(set([from_state]))
        for Y in P:
            if not X.intersection(Y) == set():
                P.append(X.intersection(Y))
                P.append(Y.difference(X))
                if Y in W:
                    W.append(X.intersection(Y))
                    W.append(Y.difference(X))
                    W.remove(Y)
                else :
                    if len(X.intersection(Y)) <= len (Y.difference(X)):
                        W.append(X.intersection(Y))
                        #W.remove(Y)
                    else :
                        W.append(Y.difference(X))
                        #W.remove(Y)
                P.remove(Y)

    print P,W
dfa.states = set() of states.
dfa.startstate = int number of start state number
dfa.finalstates = list structure consisting of final states
dfa.transitions = dictionary structure of dfa transitions.
ex) {from state : {to state1 : set of character to go to state1 , to state 2 : set of charac...}}
dfa.alphabet = set of dfa alphabets.