回溯问题的复杂性和解决方案

时间:2019-05-23 09:36:43

标签: python time-complexity backtracking recursive-backtracking

给出给定整个n的打印算法的伪代码 所有长度为n且在{a, b}中带有符号的字符串 奇数个符号a和奇数个符号b。 例如,对于n = 3,什么也不会打印,而对于n = 4,则 要打印的字符串是:

abbb babb bbab bbba baaa abaa aaba aaab

该算法必须具有复杂度O(nS(n)),其中S(n)是 要打印的字符串。激发算法的复杂性。 我做了解决方案,但我不知道它是否是回溯算法以及该算法的复杂性。这是正确的方法吗?

def stringheBinarie(n, i, sol = [], totA = 0, totB = 0):
    if n == i:
        print("".join(sol))
    else:
        if i < n - 1:
            sol.append('a')
            stringheBinarie(n, i + 1, sol, totA + 1, totB)
            sol.pop()
            sol.append('b')
            stringheBinarie(n, i + 1, sol, totA, totB + 1)
            sol.pop()
        else:
            if totA % 2 == 0 and totB % 2 == 1:
                sol.append('a')
                stringheBinarie(n, i + 1, sol, totA +1, totB)
                sol.pop()
            if totB % 2 == 0 and totA % 2 == 1:
                sol.append('b')
                stringheBinarie(n, i + 1, sol, totA, totB + 1)
                sol.pop()

0 个答案:

没有答案