我已经使用relax-trie定义了这个用于识别字符串的伪代码,其中函数Next [u,x]给出了来自u的u-edge节点集合(基本上是节点集合,如(u,x) ,v)是T)的优势。
这是:
U := {1};
while s ≠ λ and U ≠ Ø do
U:= U in u Union Next [u, head(s)];
s:= tail(s)
od;
if U ≠ Ø then
if Final[u] for some u in U then
Accept
else reject
fi
else
reject
fi
基本上我已经为循环定义了一个后置条件,给定了一个循环不变量(我想我已经覆盖了这些元素,但是如果你认为它有助于解释它的话)。
所以我需要给出一个简短的参数,说明为什么不变量是不变的(即,当循环条件成立时,循环体如何保留它)。
然后我需要扩展这个伪代码,以便它可以在不推进输入的情况下移动到新节点:
(我想我会通过添加另一个数组(比如Null)来做到这一点,其中Null [u]是它可以从u移动到的状态集而不会推进输入)
也应该进行更改,以便在查看输入所有状态之前的每次迭代都可以从U中的状态到达,而不会提前输入。
感谢您的所有帮助,我发现这两个步骤相当困难,但认为我的第一部分的伪代码很好