Algorithm 如何确定此解决方案对重复排列的运行时间?
我知道n个不同对象上的排列数是n!,所以最坏的情况是,下面是n!在运行时。但一般情况又如何呢?我有一个解决方案来处理具有重复项的数组的置换元素(例如-[1,2,2,3]),但我不确定如何确定平均案例运行时间。有人能给我解释一下吗Algorithm 如何确定此解决方案对重复排列的运行时间?,algorithm,runtime,Algorithm,Runtime,我知道n个不同对象上的排列数是n!,所以最坏的情况是,下面是n!在运行时。但一般情况又如何呢?我有一个解决方案来处理具有重复项的数组的置换元素(例如-[1,2,2,3]),但我不确定如何确定平均案例运行时间。有人能给我解释一下吗 import collections class Permutations(object): def permuteUnique(self, nums): ctr = collections.Counter(nums) res =
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
假设您有一个数组,其中
k
不同的值出现m1
,m2
,…,mk
次。设n=m1+m2+…+m_k
。排列的数量是n
不同事物的排列数量除以给出相同排列的排列数量。由于每个不同的值都可以以任何顺序出现并给出相同的排列,因此结果是n!/(m_1!*m_2!*…*m_k!)
如果你想从这个精确的公式到某种有用的近似值,我建议你使用,坚持你想要的假设,然后从那里开始。如果不知道重复元素的分布,你就不能确定运行时间:“平均”依赖于该PDF。@例如,删减如果您拥有所有1怎么办?如果您拥有所有1,则只有一个输出。您所需要的只是检测单个值并转储一个排列的时间,该排列在列表大小上为**O**(N)。我不知道你想要什么样的答案。