wog
2013-03-30 17:26:04 +08:00
其实,碰见这种问题,如果我实在做不出来都是用随机算法来做的
我试了下用随机算法来做,用c++写了个小程序,(没看明白你那个题目是不是只能交换相邻的两个数字,不过我写程序是按照只能交换相邻位置的两个元素来写的)
在数组长度小于6的时候都非常稳定,
A[1,2,3,4] B[2,3,1,4]
2
real 0m0.291s
user 0m0.008s
sys 0m0.284s
====================
A = {1, 2, 3, 4,5};
B = {2, 3, 5, 1, 4};
4
real 0m0.295s
user 0m0.008s
sys 0m0.284s
========================
A = {1, 2, 3, 4, 5, 6};
B = {6, 2, 3, 5, 1, 4};
11
real 0m0.338s
user 0m0.064s
sys 0m0.272s
在这之前,我程序的尝试次数定在1024,结果几乎没有什么浮动
======================
A = {1, 2, 3, 4, 5, 6, 7};
B = {6, 2, 7, 3, 5, 1, 4};
17
real 0m21.271s
user 0m3.632s
sys 0m17.616s
在这里如果尝试次数还是1024的话,得到的结果浮动很大,所以直接改成65535了
==============================================
A = {1, 2, 3, 4, 5, 6,7,8};
B = {6, 2, 7, 3, 5, 8,1,4,};
19
real 0m19.241s
user 0m1.596s
sys 0m17.624s
还是尝试65535次
不过话说回来,这个问题用贪心算法和我用的这个方法,只能得到近似最优解,要真正准确的算出来最有解,还是得用动态规划,不过这个动态规划是需要完全遍历所有情况的,我觉得要实现的话不太现实