不确定这个伪代码在说什么

时间:2015-02-27 19:22:04

标签: dynamic dynamic-programming pseudocode

我在另一个stackoverflow问题上看到了这个伪代码Split a string to a string of valid words using Dynamic Programming

问题是一个动态编程问题,以查看输入字符串是否可以从字典中拆分为单词。

第三行,是指将大小为[N + 1]的数组b设置为所有错误值?我很确定。但我真正不确定的是第五行。这是一个for循环还是什么?我觉得伪代码说'for i in range'只有2个值。这句话是什么意思?

def try_to_split(doc):
   N = len(doc)
   b = [False] * (N + 1)
   b[N] = True
   for i in range(N - 1, -1, -1):
      for word starting at position i:
         if b[i + len(word)]:
            b[i] = True
            break
   return b

1 个答案:

答案 0 :(得分:0)

语法混乱,我很确定这是一个错误。它应该是:

for i in range(N - 1, 0, -1) //0, not -1

我认为这意味着

for i from (N - 1) downto 0 //-1 was the step, like i-- or i -= 1

这对算法有意义,因为它只是从字符串的末尾开始,并解决每个尾随的子字符串,直到它到达开头。如果b [0]最后是true,那么输入字符串可以从字典中分割成单词。 for word starting at position i只检查字典中的所有单词,看看它们是否从该位置开始。

如果想要重建解决方案,他们可以将b更改为int数组,初始化为0,并将if更改为:

if b[i + len(word)] != 0
    b[i] = i + len(word) //len(word) works too
    break