通过跟踪自动机所处的状态以及输入字符串到达的距离,可以轻松地在输入字符串上模拟非确定性自动机。但是,如何模拟非确定性传感器(传感器,当然,可以将输入符号转换为输出符号,并将输出符号作为输出,而不仅仅是布尔值)?这似乎更复杂,因为我们需要以某种方式跟踪输出字符串,由于不确定性,输出字符串可能很多。
答案 0 :(得分:2)
首先,一些理论。以下是不同的代数结构:
发电机(过渡系统)
接受者(自动机)
传感器(机器)
括号中的术语在文献中很常见,唉它们经常被错误地使用。这些代数结构非常相似,并且可以通过许多小变化从一个变为另一个或混合变形。但这不应该分散它们根本不同的事实:
生成器是语言的建设性表示,即一组(有限或无限)单词。你不确定地遍历一个生成器,这样你就可以生成那种语言中的所有单词。
接受者再次是用于定义一组单词(语言)的构造,但每个接受者代表所有可能单词(有限或无限)上的指示符函数。因此,他们将每个单词映射到一个布尔值(可以适当地扩展为有限或无限输出字,以试图与换能器进行比较 - 虽然存在明显的代数差异)。
传感器表示将每个可允许的有限输入字映射到有限输出字的函数。
在有限语言的上下文中,受体和换能器之间的区别变得不那么明显,因为受体可以接受或不接受任何有限字,而不管其长度如何,因此它为每个这样的字产生输出字。通过来自接受器的布尔输出的连接,可以为每个有限输入字创建有限输出字(即,通过连接来自给定输入字的每个前缀的输出)。尽管在机制上是正确的,但这种弥合这两个概念的尝试仍然扭曲了所涉及的概念。
在无限词语言的背景下,区别更清晰。 infinite-word automaton 不能生成给定(无限)输入字的有限前缀的输出。这种限制是在整个(无限)词上定义无限词接受的结果。结果,接受者将每个输入字映射到布尔值,或者如果优选这样的视点则输出字。相反,换能器(机器)将任何输入字的每个有限前缀映射到相等长度的有限输出字。出于这个原因,它们被称为顺序机器,因为它们会一步一步地做出反应。
有两种不同类型的传感器:
摩尔机器可以用Mealy机器代表。并非每台Mealy机器都可以用摩尔机器代表。在定义和比较这两种类型的传感器时,文献通常是错误的,请参阅原始出版物以获得正确的定义。
所以这两个定义都是确定性的。确定性存在这种限制的原因:传感器用于控制系统,因此我们想要确定地知道应该采用的下一个控制措施应该是什么。这导致确定性传感器成为文献中的标准。
然而,非确定性换能器也可以是有用的,例如,作为多种策略的紧凑表示。但是,当它们被执行时,只有遵循单个路径并产生单个输出字而不是多个输出字是有意义的(就像在执行期间产生的非确定性接受器的副本一样)。因此很明显,换能器的非确定性模拟与其预期用途不符。它代表了一套替代策略(如果在每次单独游戏中没有以固定方式确定,也可以混合使用)。
所以你确实需要创建一个(不断扩展的)可能输出单词的树,这些单词很快就会爆炸。这棵树本质上是通过剥离其输入注释的传感器得到的生成器(过渡系统)的展开。
答案 1 :(得分:0)
基本上你和NFA一样,但这次不是返回true或false,而是将输出添加到输出集。这是一个伪代码:
function rec(in, current_state, pos, out)
if(current_state.isFinal && pos == in.length) out_set += out
for(t <- lambda transition going out from current_state)
rec(in, t.destination, pos, out + t.output_symbol)
for(t <- transition going out from current_state for symbol in(pos)
rec(in, t.destination, pos+1, out + t.output_symbol)