动态编程将字符串拆分为单独的单词列表

时间:2010-12-04 21:14:48

标签: partitioning dynamic-programming

这基本上是一个共同的:

How to split a string into words. Ex: "stringintowords" -> "String Into Words"?

neverthelees,我使用了一个函数:public int Word(x) {code},其中对于字符串x,它将返回一个整数(+ ve或-ve),该整数将表示有多好或者分区是针对特定单词的。我应该返回给出最大数字的组合。

我想为此做的是创建一个表(i,j),其中i和j具有单词的长度,并填写表格如下:

for i = 1 to n
   for j=i to n do 
      word(subset of x i to j)

并填写表格,然而,我将如何能够以递归的方式检索最佳解决方案?

任何帮助表示感谢。

编辑:最佳路径是具有最高的词(x)函数和的路径,即如果我们有 路径(1,3)= 10,(3,6)= 20,(6,7)= 1,和 路径(1,1)= 0,(2,5)= 12,(5,7)= - 1
那么第一路径的总和>第二

EDIT2:我希望每个人都知道,经过长时间的工作后,我已经回答了这个问题,因为没有得到解决方案,所以我自己总是这样认为:P

欢呼:!)

2 个答案:

答案 0 :(得分:0)

Sam,你说的是:

你有一个表填充你在字符串中的位置,如果有一个长度为j的子字符串,则表示每个单元格的布尔值。

示例:

                    |       Positions of the example:
                    |            "xdeafcatmonologue"
 -------------------|-------------01234567890123476----------------
length of substring |                              
        1           |             11111111111111111     
        2           |             ------2----------
        3           |             -----3------3----
        4           |             -4--------------- 
        5           |             -----------------
        6           |             -----------------
        7           |             -----------------
        8           |             -----------------
        9           |             --------9--------
                    |              

      final         |             -4---3--9---3----

破折号在技术上是零,数字潜力,这是你要建立的表格。

如果只存储每个位置的最大值,则可以构建一个小得多的表,因为Word函数会告诉您每个位置的最大值。如果迭代子字符串大小,变量j,则无关紧要,因为Word不使用j。

如果我误解了这些假设,请纠正我。

答案 1 :(得分:0)

好吧,让我举个例子:

word thetree


         1  2   3  4  5  6  7 ( ending index)

start 1  1  -1  2 -1 -1 -1 -1
      2  0  1  -1  -1 -1 -1 -1
      3  0  0   1  0  0  0  0
      4  0  0   0  1  0  0  4
      5  0  0   0  0  1  0  0
      6  0  0   0  0  0  1  0  
      7  0  0   0  0  0  0  1

考虑这个解决方案,然后如果你单独存储每个列,那么在第3号柱上你得到2,在7你得到4,这总共得到6,不过,如果你单独拿出每个字母,那么:1 + 1 + 1 + 1 + 1 + 1 + 1 = 7(对角线向下i = j)这意味着talbe是不正确的......

如果我只能存储最好的前一个肠道的位置,这可能会有效。(我想再次)