不确定这个伪代码在说什么
Not sure what this pseudo-code is saying
我在此处发现的另一个 Whosebug 问题上看到了这个伪代码 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
它的语法令人困惑,我很确定其中有一个错误。应该是:
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
我在此处发现的另一个 Whosebug 问题上看到了这个伪代码 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
它的语法令人困惑,我很确定其中有一个错误。应该是:
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