通过递归生成集合 - 语言和字符串(cs/逻辑)

Posted

技术标签:

【中文标题】通过递归生成集合 - 语言和字符串(cs/逻辑)【英文标题】:Generating Sets via recursion - Language and strings (cs/logic) 【发布时间】:2012-02-28 13:45:58 【问题描述】:

这是一个一般逻辑问题,在大多数语言和机器入门课程中都很常见。但是,我已经在互联网和论坛上搜索了有关这方面的任何帮助,但我似乎无法找到详细说明连续集将包含什么的主题。这是一个示例问题:(我有很多这样的硬件问题,我只是不知道从哪里开始)

令 L 为由以下递归定义生成的 a,b 上的语言 基础:λ ∈ L 递归步骤:如果 w ∈ L,则 awbb 在 L 中。 闭包:一个字符串 w ∈ L 仅当它可以从有限数的基组中获得 递归步骤的应用。 A部分。给出集合 L1; L2;和 L3 由递归定义生成。注意 L0 = λ

我知道字母表是 a,b,Lo = 空字符串,如果字符串 w 包含在 L 中,则 awbb 在 L 中。但这对接下来的几组意味着什么?

我认为 L1 = λ ,awbb 然后 L2=λ , awbb, aawbbwbb?

如果您能在这方面提供任何帮助,我们将不胜感激。

【问题讨论】:

您所拥有的通常也称为归纳定义。定义的集合是这个定义的最小固定点(或者,用“外行的话”,满足给定标准的最小集合)。请注意,后者至关重要(您将其表述为“终于有许多应用程序”),否则许多集合符合“定义”。 【参考方案1】:

我认为你误解了规则

如果 w ∈ L,然后 awbb ∈升

的意思。这并不意味着文字字符串“awbb”在 L 中。相反,这意味着如果您有一些字符串 w ∈ L,您可以将字符串 w 替换为字符串 awbb,结果字符串将在 L 中。例如,如果 ab ∈ L,然后是 aabbb ∈ L 也是。

使用它,尝试再次构造集合 L1 和 L2。我认为,一旦你建立了前几组,你就会立即发现一个模式。

希望这会有所帮助!

【讨论】:

感谢您的快速回复!对于您的示例,如果 w=ab 然后 L1= λ, aabbb 和 L2= λ, aabbb, aabbabbb 等,将 ab 放入前一个字符串的中间。所以一般来说 L1=λ, awbb 和 L2=λ, awwbb 等等?还是我完全错过了你的观点? @user1193839- 我认为你完全没有理解我的意思。 :-) 将 w 视为占位符。如果你在集合 L 中有一个字符串,那么你可以拿那个字符串并将它插入到 w 通常在字符串中的位置。因此,例如,如果您知道 lambda 在 L 中,则在应用一次规则后,您将得到 abb 也在 L 中,因为如果您将 lambda 替换为 awbb 中的 w,您将得到 abb。如果要构造 L2,请尝试用 abb 替换字符串 awbb 中的 w,看看会产生什么新字符串。 哦。好的,我想我现在有这个。 L2 = a[w]bb -> w = abb 其中 w 是从前一个递归步骤收集的值。 L2 生成字符串 aabbbb,L3 生成 aaabbbbbb。基本上,您只需在 a 和 bb 之间继续插入上一步中的字符串。 另一个快速的问题,下一组是否也包含所有先前的值?例如是 L2=λ,abb,aabbbb 还是集合仅包含在该递归步骤上生成的值? @user1193839- 是的,他们应该这样做。每个集合都是从上一个集合开始的结果,然后将规则应用于上一个集合的每个成员的结果添加到该集合。

以上是关于通过递归生成集合 - 语言和字符串(cs/逻辑)的主要内容,如果未能解决你的问题,请参考以下文章

C语言详解:函数递归专题

C语言数据结构:数据的逻辑结构和存储结构(迭代反转与递归反转)

编程语言业务逻辑分类

python 基础 正则,递归 生成器

Java递归遍历集合

图的遍历和生成树求解实现 (c语言版)