Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何确定此解决方案对重复排列的运行时间?_Algorithm_Runtime - Fatal编程技术网

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

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 =

我知道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

假设您有一个数组,其中
k
不同的值出现
m1
m2
,…,
mk
次。设
n=m1+m2+…+m_k
。排列的数量是
n
不同事物的排列数量除以给出相同排列的排列数量。由于每个不同的值都可以以任何顺序出现并给出相同的排列,因此结果是
n!/(m_1!*m_2!*…*m_k!)


如果你想从这个精确的公式到某种有用的近似值,我建议你使用,坚持你想要的假设,然后从那里开始。

如果不知道重复元素的分布,你就不能确定运行时间:“平均”依赖于该PDF。@例如,删减如果您拥有所有1怎么办?如果您拥有所有1,则只有一个输出。您所需要的只是检测单个值并转储一个排列的时间,该排列在列表大小上为**O**(N)。我不知道你想要什么样的答案。