马踏棋盘的问题——贪心算法

【贪心算法】
其实马踏棋盘的问题很早就有人提出,且早在1823年,J.C.Warnsdorff就提出了一个有名的算法。
在每个结点对其子结点进行选取时,优先选择 ‘出口’最小的进行搜索,‘出口’的意思是在这
些子结点中它们的可行子结点的个数,也就是‘孙子’结点越少的越优先跳,为什么要这样选取,
这是一种局部调整最优的做法,如果优先选择出口多的子结点,那出口少的子结点就会越来越多,
很可能出现‘死’结点(顾名思义就是没有出口又没有跳过的结点),这样对下面的搜索纯粹是徒
劳,这样会浪费很多无用的时间,反过来如果每次都优先选择出口少的结点跳,那出口少的结点就
会越来越少,这样跳成功的机会就更大一些。这种算法称为为贪心算法,也叫贪婪算法或启发示算
法,它对整个求解过程的局部做最优调整,它只适用于求较优解或者部分解,而不能求最优解。这
样的调整方法叫贪心策略,至于什么问题需要什么样的贪心策略是不确定的,具体问题具体分析。
实验可以证明马遍历问题在运用到了上面的贪心策略之后求解速率有非常明显的提高,如果只要求
出一个解甚至不用回溯就可以完成,因为在这个算法提出的时候世界上还没有计算机,这种方法完
全可以用手工求出解来,其效率可想而知。


我的算法不是最好的,有本书介绍过,在4x4中,每4步组成一个环,然后再将16个小环连成一个大环。

34 41 38 61 46 59 50 55 
39 62 35 42 37 56 47 58 
26 33 40 45 60 49 54 51 
63 12 27 36 43 52 57 48 
32 25 44 13 28 19 16 53 
11 64 29  4 17 14  7 20 
24 31  2  9 22  5 18 15 
 1 10 23 30  3  8 21  6 

64  步的计算结果

你可能感兴趣的:(开发方法,算法,贪心算法)