1
3
我建议你阅读 Godel, Escher, Bach =)它详细讨论了您在这里描述的内容。 总之,一个解决方案是找到 invariant 对于您的系统:如果在操作开始时为真, 在任何情况下都必须 在你的操作结束时也要真实。 如果第一个字符串具有该不变量,而结束字符串没有,则替换规则将 从未 生成第二个字符串。 您的不变规则可能更强大…例如,它可以是 当且仅当 关系(如果且仅当第一步为真时,在最后一步中的不变量为真),因此,如果第一个字符串中存在不为真的不变量,则可以证明无法访问结束字符串。请注意,如果并且仅当关系自动遵循标准if关系时,如果您的所有规则都是双向工作的(您可以前后应用它们) 例如,在第一个系统中有一个可能的不变量:
考虑到这个不变的规则,很容易提供一个决策公式来决定给定起始字符串的字符串是否可行。 追加 我希望你不介意我采用霍夫施塔特的说法:
所以,你的问题从“x能产生y吗?”到“y是一个有效的定理吗,从x导出?”
那么,让我们从更一般的术语来处理字符串替换问题。我们会打电话
它说,“如果我们看到一个集合中有一个字符串的定理
让我们找到一些不变量,这是真的,
不管什么是成套的
例如,如果我们有公理
但是,对于很长的一组
让我们试着让这个更有用…
假设我们有
这更有用,因为对于任何
但是,我们发现我们可以进一步扩展这一点:
我们会发现这更有用!
现在,注意,我们也可以后退!也就是说,我们可以说:
有了这些规则,我组装了一个 decision tree 为了找出我们锁定了哪些案例,哪些案例是无法确定的。你会注意到我们只有两个这样无法确定的案例。 现在剩下的就是找到这两个例子的不变量。但是,我们可以注意到一件事:
也就是说,如果你有
所以,我们基本上解决了两个未定案例到一个案例;让我们看看我们还能分析什么…… …又一次。我一会儿再谈。 |
2
1
您可以很容易地将这个问题映射到一个有向图,其中所有规则都是从一个节点到另一个节点的有向路径。 接收输入时 一 和 乙 ,检查它们之间的差异,并查看是否有一条沿着图生成预期结果的路径。 |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
Manny · 如何比较Perl中的字符串? 2 年前 |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |