展开全部
基础的算法:像排序(快排和冒泡就够了),模拟,贪心,枚举,染色(bloodfill)....
搜索:很重要,深搜和广搜,要学会剪枝(可行性剪枝和最优解剪枝),启发式搜索
动态规划:很重要,要多做题,多见题型
递归:回溯什么的,要会写子程序
递推:一些数字递推问题,要善于总结公式
二分:要有分治思想
其他:什么二部图,并查集,图论中一些算法如最短路,欧拉回路,等比较实用的算法
数据结构:
1.链表,其实就是一维数组,但链表的插入,删除等操作也是有技巧的,就像noip2009的靶形数独,就可以用Dancing Links这种神奇的链表中数据的插入和删除来大大优化时间。
2.栈:针对先进后出的问题,像火车进站
3.队列:针对先进先出的问题,广搜,SPFA常用。
4.树,包括二叉树(最常用),多叉树,“森林”等,特别是二叉树,因为只有两个叉,因此对于状态分立的问题就可以用递归和树结合存储,在通过遍历得到特殊结果,这个在二叉树排序中很经典。
5.堆,和树有相似之处,对一些问题的优化作用很好,不过这些优化算法一般比较高级,像Dijskara的堆优化等,可以上网搜一下。
6.图,图论必修。所有图论问题都离不开图,个人也认为比较难学。
搜索:很重要,深搜和广搜,要学会剪枝(可行性剪枝和最优解剪枝),启发式搜索
动态规划:很重要,要多做题,多见题型
递归:回溯什么的,要会写子程序
递推:一些数字递推问题,要善于总结公式
二分:要有分治思想
其他:什么二部图,并查集,图论中一些算法如最短路,欧拉回路,等比较实用的算法
数据结构:
1.链表,其实就是一维数组,但链表的插入,删除等操作也是有技巧的,就像noip2009的靶形数独,就可以用Dancing Links这种神奇的链表中数据的插入和删除来大大优化时间。
2.栈:针对先进后出的问题,像火车进站
3.队列:针对先进先出的问题,广搜,SPFA常用。
4.树,包括二叉树(最常用),多叉树,“森林”等,特别是二叉树,因为只有两个叉,因此对于状态分立的问题就可以用递归和树结合存储,在通过遍历得到特殊结果,这个在二叉树排序中很经典。
5.堆,和树有相似之处,对一些问题的优化作用很好,不过这些优化算法一般比较高级,像Dijskara的堆优化等,可以上网搜一下。
6.图,图论必修。所有图论问题都离不开图,个人也认为比较难学。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询