2018-11-10-noj1324

2018-11-10-noj1324
文章图片
noj-1324.png
这是开端。
然后产生了以下两个程序:

void perms1(int m) { static int b[N]={0}; static char use[N]={0}; if(m >= n) { for(int i=0; i

void perms2(int m) { if(m >= n) { for(int i=0; i

两个函数进行全排列后都可以按照字典序的顺序输出(不符合题意是因为后来历经多次修改,思想是相同的)。
比较 :
【2018-11-10-noj1324】空间:perms1为O(n),perms2为O(1)。
perms1使用了一倍的附加存储空间和相同数量的标记位。
perms2使用了一个变量用于交换。
时间:相同 。
递归层数相同。
函数内的循环次数不同,perms1更多的做了一些无用功。
由于交换,perms2在循环内的赋值操作比perms1多一倍。
实际测试中两个函数时间相差极小,大多数情况下perms2更快。
猜想:CPU的cache?

    推荐阅读