我需要一個函數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