Я видел этот псевдокод на другом вопросе stackoverflow, который здесь найден Split a string to a string of valid words using Dynamic Programming.Не уверен, что говорит этот псевдокод
Проблема заключается в задаче динамического программирования, чтобы увидеть, можно ли разделить входную строку на слова из словаря.
Третья строка означает установить массив b размера [N + 1] для всех ложных значений? Я в этом почти уверен. Но я действительно не уверен в пятой строчке. Это для цикла или что? Я чувствую, что псевдокод, говорящий, что «для i в диапазоне» будет иметь только 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
Спасибо. Я считаю, что это тоже ошибка, и ваша ревизия делает код более понятным. Но в чем смысл создания b массива int вместо булевского массива? –
Предположим, что мы устанавливаем 'b [i]' на 'i + len (word)'. Тогда, если есть решение, 'b [i]! = 0'. Затем мы можем найти фактическое решение, взяв слово от 'i = 0' до' i = b [0] ', а затем повторим на' b [b [0]] 'до тех пор, пока мы не дойдем до конца строки. –
Извините, что вы подразумеваете под "фактическим решением"? Я не вижу, как использование метода с булевым массивом не работает. –