以下是引用pangding在2010-12-6 22:01:53的发言:
楼主如果想讲算法的话,用语言描述其实更好一点。算法描述清楚了代码就不用注释太多了。
比如第一个,你只说了函数是干什么的,没说怎么干的,后面的代码也没有有用的注释。和这个同样功能的函数,STL 里就有一个,那个我倒会,不过你的算法没细看不知道用的算法一样不一样。另两个感觉很专用,我就不怎么看了。
我听说过一个生成全排列的算法,是递归的,不知道你这有没有。我只说下思路。
一个元素的排列只有一种:
1
两个的,就是把 2 在 1 前后“晃”一下:
1 2
2 1
三个的,要借助两个的,把 3 在其中“穿梭”一下,一共6个:
1 2 3
1 3 2
3 1 2
3 2 1
2 3 1
2 1 3
四个的,就是在其中再“穿梭”,一共24个:
1 2 3 4
1 2 4 3
1 4 2 3
4 1 2 3
4 1 3 2
1 4 3 2
1 3 4 2
1 3 2 4
3 1 2 4
3 1 4 2
3 4 1 2
4 3 1 2
4 3 2 1
3 4 2 1
3 2 4 1
3 2 1 4
2 3 1 4
2 3 4 1
2 4 3 1
4 2 3 1
4 2 1 3
2 4 1 3
2 1 4 3
2 1 3 4
五个的可以再算。
这个算法的特点是,只要知道了 n - 1 的全排列,就可以用之来生成 n 个的。
另一个比较著名的算法就是我说的 STL 里的那个,那个的特点是按字典序移动出全排列。
好算法啊,
楼主如果想讲算法的话,用语言描述其实更好一点。算法描述清楚了代码就不用注释太多了。
比如第一个,你只说了函数是干什么的,没说怎么干的,后面的代码也没有有用的注释。和这个同样功能的函数,STL 里就有一个,那个我倒会,不过你的算法没细看不知道用的算法一样不一样。另两个感觉很专用,我就不怎么看了。
我听说过一个生成全排列的算法,是递归的,不知道你这有没有。我只说下思路。
一个元素的排列只有一种:
1
两个的,就是把 2 在 1 前后“晃”一下:
1 2
2 1
三个的,要借助两个的,把 3 在其中“穿梭”一下,一共6个:
1 2 3
1 3 2
3 1 2
3 2 1
2 3 1
2 1 3
四个的,就是在其中再“穿梭”,一共24个:
1 2 3 4
1 2 4 3
1 4 2 3
4 1 2 3
4 1 3 2
1 4 3 2
1 3 4 2
1 3 2 4
3 1 2 4
3 1 4 2
3 4 1 2
4 3 1 2
4 3 2 1
3 4 2 1
3 2 4 1
3 2 1 4
2 3 1 4
2 3 4 1
2 4 3 1
4 2 3 1
4 2 1 3
2 4 1 3
2 1 4 3
2 1 3 4
五个的可以再算。
这个算法的特点是,只要知道了 n - 1 的全排列,就可以用之来生成 n 个的。
另一个比较著名的算法就是我说的 STL 里的那个,那个的特点是按字典序移动出全排列。
我就是真命天子,顺我者生,逆我者死!