我需要一个函数count_permutations(),它返回给定范围的排列数。 假设范围内允许进行修改,并在第一置换开始,我天真地实现这个作为重复调用next_permutation()如下:更好的方法来实现count_permutations?
template<class Ret, class Iter>
Ret count_permutations(Iter first, Iter last)
{
Ret ret = 0;
do {
++ret;
} while (next_permutation(first, last));
return ret;
}
有那并不是一个更快的方法你需要迭代所有的排列来找到答案?它仍然可以假定输入可以被修改,并且从第一个排列开始,但是显然如果可以在没有这些推断的情况下实现,它也会很好。
好吧,那么如果范围排序,它将需要通过范围一遍查找所有大小的重复范围。谢谢。 – 2008-11-09 16:38:58
对于C++来说,是的,如果范围是排序的,会更容易。对于像Python这样的动态类型语言,即使是未排序的列表也可以。 即使您必须对范围进行排序,时间复杂度将为O(n log n + n)= O(n log n),而不会考虑阶乘计算。 – 2008-11-09 16:46:56