我知道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
答案 0 :(得分:0)
假设您有一个数组,其中k
,m_1
,...,m_2
次出现了m_k
个不同的值。让n = m_1 + m_2 + ... + m_k
。排列数是n
个不同事物的排列数除以给出相同排列的排列数。由于每个不同的值都可以按任何顺序出现并给出相同的排列,因此得出的值是n! / (m_1! * m_2! * ... * m_k!)
如果您希望从这个精确公式转换为某种有用的近似值,我建议您使用Stirling's Approximation,坚持想要的假设,然后从那里开始。