映射中的所有节点一次链接?

时间:2017-02-06 12:26:54

标签: python-3.x

我正在制作一个基本的DFA(确定性有限自动机)生成器。如果你不知道它是什么,它或多或少是一个基本的状态机。生成节点并系统地链接到另一个节点,其中一些数据在JSON中指定。

为此,我有一个节点字典。保证每个节点都有唯一的ID,因此我使用ID作为密钥,并将节点作为值。

我填充了我的字典,然后从那里开始将每个节点链接到它可以传输到的后续节点(状态)。转换状态具有它开始的节点的ID,以及它结束的节点的ID。每个节点都有一个对节点的引用映射,其中转换为散列值(由于是DFA,它也保证是唯一的)。

问题在于,当我将地图中的一个节点与后续节点链接时,每个其他节点同时也会获得链接!

所以,如果我有节点

[q0]  [q1]  [q2]

我将q0与q1链接,转换为1,这种情况发生了:

[q0] -> [q1] <- [q2]
          ↺

我知道我没有碰撞错误。如果我在此处对节点执行任何其他操作,则不会对我的每个其他节点执行操作。

我像这样创建节点字典:

dict_nodes = {}
alphabet = json_values["alphabet"]
for state in json_values["possible_states"]:
    dict_nodes[state["state_key"]] = node()

然后像这样链接他们:

for transition in json_values["transitions"]:
    lexicon = transition["transition"]
    if lexicon not in alphabet:
        raise ValueError("Nodes with transitions outside of alphabet are not accepted")

dict_nodes[transition["start_key"]].add_following_state(dict_nodes[transition["end_key"]], lexicon)

节点类如下所示:

class node(object):
""" Following node paths that can be walked and their states """
following_states = {}
""" Determine if node is an accept state or not """
is_accept_state = False

def __init__(self):
    pass

def add_following_state(self, new_node, state):
    self.following_states[state] = new_node

""" Extra methods omitted """

知道为什么一切都会立即联系起来吗?

0 个答案:

没有答案