将递归解决方案转换为动态编程

时间:2018-03-05 17:13:43

标签: time-complexity dynamic-programming computation-theory

问题陈述:查找可以从给定的摩尔斯电码序列中生成的“仅元音”字符串的数量(必须使用整个字符串)

我有这个当前的递归解决方案。我想加快这个算法在O(n)时间内运行。我知道我可以将我的数组定义为S [j] =可以通过1 ... j访问创建的唯一字符串的最大数量。但我不知道从哪里去。

morsedict = {'A': '.-',
             'E': '.',
             'I': '..',
             'O': '---',
             'U': '..-'}

 maxcombinations = 0

 def countCombinations(codelist):
    if len(codelist) is 0:
        global maxcombinations
        maxcombinations += 1
        return

    if codelist[0] in morsedict.values():
        countCombinations(codelist[1:])
    if len(codelist) >= 2 and codelist[:2] in morsedict.values():
        countCombinations(codelist[2:])
    if len(codelist) >= 3 and codelist[:3] in morsedict.values():
        countCombinations(codelist[3:])
    return

1 个答案:

答案 0 :(得分:0)

对于未来的研究人员来说,这是转换为DP问题的解决方案:

    keywords            Labels
0   cheap shoes         budget
1   luxury shoes        expensive
2   cheap hiking shoes  budget | sport