【发布时间】:2008-11-09 16:18:23
【问题描述】:
我需要一个函数 count_permutations() 来返回给定范围的排列数。 假设允许修改范围,并从第一个排列开始,我可以天真地将其实现为对 next_permutation() 的重复调用,如下所示:
template<class Ret, class Iter>
Ret count_permutations(Iter first, Iter last)
{
Ret ret = 0;
do {
++ret;
} while (next_permutation(first, last));
return ret;
}
有没有更快的方法不需要遍历所有排列来找到答案?它仍然可以假设输入可以被修改,并从第一个排列开始,但显然如果可以在没有这些假设的情况下实现它也会很棒。
【问题讨论】: