假设A是一个有限的字母表,A*是从该字母表中可以组成的所有有限字符串的集合。然后,您将获得一个包含字母表本身(A)和一个属于A*的字符串S的一些字符串的集合F(通常比A*小得多)。
是否有一个多项式时间算法来查找用属于F的字符串的术语对S进行最小分解?
通过分解,我指的是将S = F1...Fk写成连接的字符串Fj的写作,并尝试最小化数量k。
假设A是一个有限的字母表,A*是从该字母表中可以组成的所有有限字符串的集合。然后,您将获得一个包含字母表本身(A)和一个属于A*的字符串S的一些字符串的集合F(通常比A*小得多)。
是否有一个多项式时间算法来查找用属于F的字符串的术语对S进行最小分解?
通过分解,我指的是将S = F1...Fk写成连接的字符串Fj的写作,并尝试最小化数量k。
F=['abcd','de','a','b','c','d']
S='abcde'
D = [ [] ]
for i in range(1,len(S)+1):
s = S[:i]
best = None
for f in F:
if s.endswith(f):
a = D[i-len(f)]
if a is None:
continue
if best is None or len(a) < len(best):
best = a + [f]
D.append(best)
print D[len(S)]
输出:
['a', 'b', 'c', 'de']