1
2
要理解为什么你的案例表现出指数行为,最好的方法是首先对代码进行一些实验,然后尝试从中收集一些经验数据并做出假设。 首先,让我们添加一些简单的“日志记录”:
现在让我们运行一些实验,确保在每次实验之前重置计数(记住,在实际代码中要避免全局变量:)
你可以看看每一个的输出,看看为每一个生成的行数,然后问自己“递归调用的数量是如何随着字符串的加长而增长的?”(经典经验算法分析!)
我已经完成了
你可以看到它走了34步。看看输出;它应该让你对匹配的本质有一些了解。并且一定要尝试增加长度的字符串。快乐的实验。 |
2
2
这是一个经典的案例,通过递归下降实现正则表达式匹配会导致病理行为。 实现这一点的正确方法是将正则表达式变成一个不确定的状态机。它需要(相当多的)更多的代码,但对于任何给定的正则表达式都将以线性时间运行。 这是一个 first class article 关于这个问题。 干杯 |
Muds · 如何使用regex返回字符串以从要匹配的字符串中排除部分 6 年前 |
PrzeM · R中的模糊匹配(非行到行) 6 年前 |
tink · 如果元组中的字符串1或字符串2 7 年前 |
PixieDev · 如何在两个单独的RDD之间映射键/值对? 7 年前 |