全排列算法
- Assembly code
input: 正整数n output:n的所有排列 for j=1 to n p[j]=j end for perml(1) perml(m) if m=n then output p[1…n] else for j=m to n swa(p[j],p[m]) perml(m+1) swa(p[j],p[m]) end for end if
Q:由于存在n!个排列,所以perml的第1步(红色那句)共有nn!次来输出所有的排列,请问一下,为什么这里是nn!而不是n!??
for循环执行的次数是不是n*f(n-1)?
0 n=1
f(n)=
nf(n-1)+n n>=2 (请问,加n是什么意思呢?)
Q:所以算法的运行时间由输出语句来决定的,也就是O(nn!)
请问,为什么算法的运行时间由输出语句决定的?时间复杂度为什么不是O(n!)??
[解决办法]
就是n!吧
for循环的执行次数也是这么多,也等于n*f(n-1)
f(n)= nf(n-1)+n n>=2
这里的+n表示上面的for循环赋值吧
之所以说算法的运行时间由输出语句决定,是因为IO操作比较费时,一个printf花费的时间可能其他时间的多少倍