如何确定此解决方案重复排列的运行时间?

时间:2018-11-09 18:29:33

标签: algorithm runtime

我知道n个不同对象上的排列数是n !,因此最坏的情况是,下面是n!。在运行时。但是一般情况下呢?我有一个解决方案,可以处理具有重复项的数组置换元素(例如-[1、2、2、3]),但是我不确定如何确定平均情况下的运行时间。有人可以向我解释一下吗?

import collections
class Permutations(object):
    def permuteUnique(self, nums):
        ctr = collections.Counter(nums)
        res = []
        self.backtrack(res, [], nums, len(nums), ctr)
        return res

    def backtrack(self, res, temp, nums, check, ctr):
        if check == 0:
            res.append(temp)
        else:
            for key,v in ctr.items():
                if ctr[key] == 0:
                    continue
                ctr[key] -= 1
                self.backtrack(res, temp + [key], nums, check - 1, ctr)
                ctr[key] += 1

1 个答案:

答案 0 :(得分:0)

假设您有一个数组,其中km_1,...,m_2次出现了m_k个不同的值。让n = m_1 + m_2 + ... + m_k。排列数是n个不同事物的排列数除以给出相同排列的排列数。由于每个不同的值都可以按任何顺序出现并给出相同的排列,因此得出的值是n! / (m_1! * m_2! * ... * m_k!)

如果您希望从这个精确公式转换为某种有用的近似值,我建议您使用Stirling's Approximation,坚持想要的假设,然后从那里开始。