算法总结与学习心得体会
为期六天的编程课落下帷幕,我收获了不少新的知识,学会了一些基本算法。 下面是我对学习算法的总结与体会。
一.【回溯算法】
回溯算法的基本思想是选择一种可能探索下去,直到发现错误再退回一步重新选择,一直到找到解或无解为止,核心则是利用for循环里的递归,进行判断后递归,递归结束后撤销选择。
一个经典的问题是八皇后:在棋盘上放置皇后,使每个皇后横竖斜列都没有皇后。则可知皇后的放置条件是行列号及对角线未被占用,方可放置。该问题对回溯算法的体现,在于当到达某一行将要放置皇后时做出判断,发现皇后无法放置时,会退出当前皇后,回溯一步,重新放置皇后,直到能找到一种放置皇后的方法。
二.【贪心算法】
贪心算法的基本思想是根据局部最优推导出全局最优,局部最优解推导出全局最优解。
我印象比较深刻的是活动安排问题:安排N个活动使得一天中能够进行的活动最多。安排活动的前提是活动能正常进行,所以只要使后一个活动的开始时间晚于前一个活动的结束时间就可以了。
三.【分治算法】
分治算法的基本思想是将大规模的问题分成几个子问题解决,就是分而治之,尽可能地不断分成两个子问题用递归法求解。
例如比赛日程表问题:让N名选手每天分别与其他一个选手进行比赛,一位选手一天比赛一次,每位选手不重复且不轮空。比赛日程表如下:
1 2 3 4 5 6 7 8
2 1 4 3 6 5 8 7
3 4 1 2 7 8 5 6
4 3 2 1 8 7 6 5
5 6 7 8 1 2 3 4
6 5 8 7 2 1 4 3
7 8 5 6 3 4 1 2
8 7 6 5 4 3 2 1
这串数字其实看着复杂,但是稍加分析就可以发现比赛日程表在空间上的分布特点是对称的,也就是只要知道一个小方块的排步就能知道整张日程表。
通过对算法的学习,我认识到编程学习是无止境的,也提升了自己思考问题的能力。
以上就是我这几天对算法学习的总结与体会。
