句子分离问题的动态规划算法?

时间:2019-11-30 18:55:47

标签: algorithm dynamic-programming

我必须找到一种动态编程算法来解决以下问题,而且我似乎被困住了:

  

给出一个函数 f(w),该函数返回单词 w 在英语中出现的频率(0 <= f(w)< / em> <= 1),算法divideSentence( s )其中 s 是一串字母,没有空格,必须返回 f(w)的值 中所有单词的,以使divideSentence最大化。例如:divideSentence(helloworld)应该返回 f(hello) + f(world)

我知道通过动态编程,我可以通过将中间值存储在一个哈希图中来限制对 f 的调用数量,但是从我的角度来看,有2 ^ n种方法可以分开句子,我看不到不尝试2 ^ n个不同解就找不到解决方案的可能,因为 f(hell) + f(o)! = f(hello)。尽管老师说可以找到一种算法来找到O(n²)中的解,所以很明显我遗漏了一些东西...

有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

这是针对上述问题的动态编程解决方案。

让A []为数组,其中A [i]表示考虑前i个字符的答案。因此,最终答案将是A [s.length()-1](考虑从0开始的索引),其中s是没有空格的输入字符串。

现在的算法如下:

<input type={this.state.hidden ? 'hidden' : 'checkbox'} id="boldCheckbox"  />

其中n是输入字符串的大小。
最终答案存储在A [n-1]中。