Algorithm 动态规划-修复所有标点缺失的文本的算法

Algorithm 动态规划-修复所有标点缺失的文本的算法,algorithm,dynamic-programming,Algorithm,Dynamic Programming,以下是我的问题描述: 我在考虑从左边开始,加上一个字母,如果是单词,那么检查其余的是否可以分隔为单词(调用递归函数)。如果是,那么我有结果,如果不是,那么我会在第一个单词后面再加一个字母,依此类推。但这需要先检查较小的单词,我想需要先检查较长单词然后再检查较小单词的算法 所以我想从整个单词开始,然后递归检查没有最后一个字母的左边部分,然后是右边部分。如果它不能返回true,那么我用“游标”向左移动,然后检查没有最后两个字母的左边部分和右边部分(从最后两个字母开始),依此类推。但我认为这需要比O

以下是我的问题描述:

  • 我在考虑从左边开始,加上一个字母,如果是单词,那么检查其余的是否可以分隔为单词(调用递归函数)。如果是,那么我有结果,如果不是,那么我会在第一个单词后面再加一个字母,依此类推。但这需要先检查较小的单词,我想需要先检查较长单词然后再检查较小单词的算法
  • 所以我想从整个单词开始,然后递归检查没有最后一个字母的左边部分,然后是右边部分。如果它不能返回true,那么我用“游标”向左移动,然后检查没有最后两个字母的左边部分和右边部分(从最后两个字母开始),依此类推。但我认为这需要比O(n^2)更多的时间

  • 那么,有人能帮我学习一些基本的算法吗?这些算法既能工作又能满足时间复杂度的要求?感谢

    动态规划方法可以基于以下递归公式:

    f(n) = true
    f(i) =  OR { d(s[i]s[i+1]...s[j-1]) AND f(j) | for each j such that i < j <= n }
    
    f(n)=真
    f(i)=或{d(s[i]s[i+1]…s[j-1])和f(j)|对于每个j,O(n^2)中的i
    
    DP(n) = (DP(0) && dict(S[1..n]) || (DP(1) && dict(S[2..n]))..... || (DP(n-1) && dict(S[n..n])
    DP(0) = true
    
    DP(n) = Whether there is valid sentence made from S[1...n]
    
    S[i...j] is substring from ith index to jth index
    

    赋值要求使用动态规划算法,而不是递归算法。@tobias_k DP基本上是递归的有效实现。