|
|
1
6
我认为作为有效单词(从有限字典中提取的单词)的串联出现的所有字符串的集合在字符的字母表上形成了一种规则语言。然后可以构建一个有限自动机,它完全接受所需的字符串;计算时间是O(n)。 例如,让字典由单词{bat,bag}组成。然后我们构造了以下自动机:状态由0,1,2表示。边:(0,1,b)、(1,2,a)、(2,0,t)、(2,0,g);其中三元组(x,y,z)表示输入z上从x到y的边。唯一接受状态为0。在每个步骤中,在读取下一个输入符号时,必须计算在该输入上可到达的状态集。假设自动机中的状态数是恒定的,则其复杂性为O(n)。至于空间复杂度,我想你可以用O(字数)和上面的结构提示。
在另一个例子中,用{bag,bat,bun,but}这个词,自动机看起来是这样的:
更正式地说,我们的算法如下:
现在,这个循环的执行次数和输入符号的执行次数一样多。我们唯一要检查的是步骤3和步骤5需要恒定的时间。假设S和R的大小不大于自动机中的状态数(状态数是常量),并且我们可以以查找时间是常量的方式存储边,则如下所示。(请注意,我们当然会丢失多个“parsing”,但这也不是一个要求。) |
|
|
2
0
我会选择隐式回溯的递归算法。函数签名:
工作原理如下:
对于前缀不明确的词典,这 在实践中取得了相当好的运行时间(我想说,在一般情况下是O(n)),尽管在理论上,O(2^n)复杂度的病理病例可能是可以构造的。然而,我怀疑我们能做得更好,因为我们需要回溯无论如何,所以“本能”的O(n)方法使用传统的预计算lexer是不可能的。。。我想。 编辑:
|
|
Ben · 统计向量中的单词在字符串中出现的频率 1 年前 |
|
|
bear_525 · 从列中删除中间名和首字母,并保存在单独的列中 1 年前 |
|
|
asdfadf · 为什么具有相同内存值的字符串和整数打印方式不同? 1 年前 |
|
|
user764754 · 防止多行原始字符串文字中出现新行字符 1 年前 |
|
|
Bogaso · 从列表中返回与模式匹配的元素 1 年前 |
|
|
Jasco · 如何使用VBA提取两个相似字符之间的字符串中的单词? 1 年前 |