读书人

全排列算法,该怎么处理

发布时间: 2012-07-29 15:26:14 作者: rapoo

全排列算法

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花费的时间可能其他时间的多少倍

读书人网 >软件架构设计

热点推荐