蓝桥杯难度还好,只要做的题多,掌握一些经典的算法,就还是能取得不错的成绩。
老生常谈了:程序=算法+数据结构,算法和数据结构又是相辅相成的。
所以基本的数据结构知识必不可少:
1、 八大数据结构:数组,链表;栈、队列;堆,树;哈希表,图。
2、 了解数据结构的使用范围,知道大概什么情况下用什么数据结构最好。
3、 在数据结构上进行的基本操作如:增、删、改、查。
再就是一些基本的、经常使用的经典算法:
1、排序算法:堆排序,快排,桶排序,归并排序(超大数据情况下)。
2、搜索算法:Dijkstra最短路径算法,求图中给定的两个顶点之间的最短路径。DFS,深度优先搜索,一般是用栈。BFS,广度优先搜索,一般是用队列。
4、查找:二分查找,差值查找,红黑树,B树B+树。
5、动态规划:通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。主要思想:若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。 通常许多子问题非常相似,为此动态规划法试图仅仅解决每个子问题一次,从而减少计算量: 一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次需要同一个子问题解之时直接查表。 这种做法在重复子问题的数目关于输入的规模呈指数增长时特别有用。
6、贪心算法:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。
7、分治算法:整个问题可以分解为两个或多个规模较小的子问题,每个子问题的求解类似于对整个问题的求解,如果子问题的规模仍然比较大,可以继续对子问题进行分治求解。分治法和递归的思想是紧密相连的。
8、分支限界法:常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。
解算法题从入门到入土:
第一步:了解经典的算法思想。
第二步:熟悉、理解、灵活运用。
第三步:刷题、积累增长见识。(一定得刷那种有答案的或者有解析的算法题,这样的话,不会可以学习别人怎么做的;会的话可以看自己是不是最好的)。
第四步:融合,创新。