sep*_*p2k 81
你去吧 这可能是一个在O(n!)时间上运行的函数的最简单的例子(函数n的参数在哪里):
void nFacRuntimeFunc(int n) {
for(int i=0; i<n; i++) {
nFacRuntimeFunc(n-1);
}
}
Run Code Online (Sandbox Code Playgroud)
cod*_*ict 38
一个典型的例子是通过暴力搜索的旅行商问题.
如果有N城市,蛮力方法将尝试这些N城市的每一个排列,以找出哪个最便宜.现在,N城市排列的数量正在N!变得复杂因子(O(N!)).
存在的问题是NP-complete(在非确定性多项式时间内可验证).意思是如果输入缩放,那么解决问题所需的计算量会增加很多.
一些NP-hard问题是:哈密顿路径问题(open img),旅行商问题(open img)
一些NP-complete问题是:布尔可满足性问题(Sat.)(打开img),N-puzzle(打开img),背包问题(打开img),子图同构问题(打开img),子集求和问题(打开img),Clique问题(打开img),顶点覆盖问题(打开img),独立设置问题(打开img),支配设置问题(打开img),图形着色问题(打开img),

来源:链接
寻找未成年人扩张的决定因素.
这里有很好的解释.
# include <cppad/cppad.hpp>
# include <cppad/speed/det_by_minor.hpp>
bool det_by_minor()
{ bool ok = true;
// dimension of the matrix
size_t n = 3;
// construct the determinat object
CppAD::det_by_minor<double> Det(n);
double a[] = {
1., 2., 3., // a[0] a[1] a[2]
3., 2., 1., // a[3] a[4] a[5]
2., 1., 2. // a[6] a[7] a[8]
};
CPPAD_TEST_VECTOR<double> A(9);
size_t i;
for(i = 0; i < 9; i++)
A[i] = a[i];
// evaluate the determinant
double det = Det(A);
double check;
check = a[0]*(a[4]*a[8] - a[5]*a[7])
- a[1]*(a[3]*a[8] - a[5]*a[6])
+ a[2]*(a[3]*a[7] - a[4]*a[6]);
ok = det == check;
return ok;
}
Run Code Online (Sandbox Code Playgroud)
我想我有点晚了,但我发现snailsort是O(n!)确定性算法的最好例子.它基本上找到了数组的下一个排列,直到它对它进行排序.
它看起来像这样:
template <class Iter>
void snail_sort(Iter first, Iter last)
{
while (next_permutation(first, last)) {}
}
Run Code Online (Sandbox Code Playgroud)