当前位置: 首页 > 面试题库 >

如何找到两个NFA的交集

经伟
2023-03-14
问题内容

在DFA中,我们可以通过对两个自动机的状态进行叉积运算,并接受两个初始自动机中都接受的状态,来进行两个自动机的交集。联合执行类似。尽管我可以使用epsilon过渡轻松地在NFA中实现联盟,但是我如何进行交集呢?


问题答案:

您可以像使用DFA一样在NFA上使用跨产品构造。唯一的变化是您如何处理ε过渡。具体来说,对于叉积自动机中的每个状态(q i,r
j),您将从该状态添加一个ε跃迁到第一台机器中存在ε跃迁的每对状态(q k,r j)从q i到q k,到第二对机器中从r j到r
k都有一个ε跃迁的状态对(q i,r k)。

另外,您始终可以将NFA转换为DFA,然后计算这些DFA的叉积。

希望这可以帮助!



 类似资料:
  • 如果这两个矩阵不是无序的,长度相同,那么下面的代码应该可以工作,并且是有效的。 我的一个老练的解决方案是将我要用于匹配的每个矩阵的各个列串联起来。在本例中,我将使用所有列。 这就是我正在寻找的结果,但我想知道是否有更优雅的东西,比如%中的向量函数

  • 让0 我想找到曲线相交的点“x”。我不想找到f和g的交点。我可以通过以下方法简单地找到:

  • 我需要写一个函数,把一个正整数数组a、一个正整数B和一个正整数C作为输入。然后,函数应该返回长度为B和C的两个不相交子数组a的元素的总和,这些元素的总和最大化这些总和。例如,如果A=[3,11,1,2,9,4,5,6,1],B=4和C=2,那么函数应该返回38。这是因为A的长度为B和C的两个最大的不相交子数组是[9,4,5,6]和[3,11]。第一个子阵列的元素之和是9+4+5+6=24,第二个子

  • 问题内容: 我有一个带有两个自定义管理器方法的Django模型。每个对象都基于对象的不同属性返回模型对象的不同子集。 有没有什么方法可以获取一个查询集,或者只是一个对象列表,那就是每个管理器方法返回的查询集的并集? 问题答案: 这可以工作,看起来更干净: 如果你不希望重复,则需要添加:

  • 我已经读过一些其他的堆栈溢出线程: 在java中求两个多集的交集 我如何获得两个数组之间的交集作为一个新数组? 我试图检查两个数组以及它们的元素数(numElementsInX和numElementsInY),并返回一个包含数组x和y的公共值的新数组。他们的交集。 编辑代码

  • 问题内容: 说,有两个哈希集,如何计算它们的交集? 问题答案: 使用以下方法: 如果要保留集合,请创建一个新集合以保存交集: 该的的说,这正是你想要的: 仅保留此集合中包含在指定集合中的元素(可选操作)。换句话说,从该集合中删除所有未包含在指定集合中的元素。如果指定的集合也是一个集合,则此操作将有效地修改此集合,以使其值为两个集合的交集。

  • 问题内容: 如果我有两个数组,例如 我想以以下模式[one [0],two [0],one [1],two [1]等合并/交织数组。 什么是实现合并功能的好方法? 问题答案: 如果两个数组的 长度相同, 那么这可能是一种解决方案: 此处枚举并行的数组,并返回一对对(2元素元组)的序列,每个数组中都有一个元素。从每对创建一个2元素数组,并将结果连接起来。 如果数组的 长度 可以 不同, 则可以将较长

  • 问题内容: 我有一个基本的查询: 我想在输出中添加另一列…让我们称其为“差异”以找出“ dtcreated”和“ dtlastupdated”之间的天数,例如,如果记录1的dtcreated为1/1/11和dtlastupdated为1/1/12,则“差异”列将为“ 365”。 可以在查询中完成吗? 问题答案: 您将使用: 所以对于您的查询: