【问题标题】:Dynamic programming to split a string into a list of separate words动态编程将字符串拆分为单独的单词列表
【发布时间】:2011-05-20 08:15:30
【问题描述】:

这基本上是一个副本:

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

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

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

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

并填写表格,但是,我到底如何才能检索到最佳解决方案(以递归方式?)

任何帮助表示赞赏。

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

EDIT2:我希望每个人都知道,经过长时间的工作,我已经回答了这个问题,没关系没有得到解决方案,我想自己得到它总是最好的:P

干杯!:)

【问题讨论】:

  • 我认为,您需要获取总字符串长度并为第一个字母运行 for 循环,前两个字母作为第二个循环,前三个字母作为第三个循环..等等...通过比较使用数据库英语词典...直到您到达循环的结尾或字符串的结尾。
  • errr 否,因为我必须为每个单独的分区(我认为)计算一个 Word(x),因此树被划分为 etree 或 thetree 或 th et ree 或树,或thetree ,必须通过调用 word() 方法填写此表中的每个条目。然后我必须以某种方式找到通过该表的最佳路径.. 编辑:最佳路径是 word(x) 函数总和最高的路径。即如果我们有一个路径(1,3)=10 , (3,6)=20, (6,7)=1 和一个路径 (1,1)=0 , (2,5)=12, ( 5,7)=-1 然后第一条路径的总和 > 2nd

标签: partitioning dynamic-programming


【解决方案1】:

山姆你是说:

您有一个表格,其中包含您在字符串中的位置,如果有长度为 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。

如果我对这些假设有误,请纠正我。

【讨论】:

  • 好吧,我举个例子:
  • aw 实际上 word 函数确实使用 J ,它将单词 X 作为变量,因此使用 Word(x) 意味着单词 x 是我们初始单词 A 的子字符串。我们计算它的方式是 A 的子字符串,i=1,j=1,然后 j=2 等等。
  • 好吧,如果我明白你的意思,它会给我一个 +1 表示我的表格中有数字的地方,以及一个 -1 表示我有破折号或有零的地方?很难理解你在说什么。
【解决方案2】:

好吧,我给你举个例子:

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 不正确...

如果我只能存储上一个最佳输入的位置,这可能会起作用。(我再次认为)

【讨论】:

    猜你喜欢
    • 2017-03-17
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多