我是负责我们队数据结构和图论的,在集训队做了一个多月的题,应该算是图论和数据结构入门了吧,这里我推荐一些图论和数据结构的算法学习顺序(我的见解),如果对这一方面有兴趣的可以看一看。(日常菜的抠脚不想去刷题)
    首先,相比数据结构,图论入门要简单一些,要入门图论,先要学会dfs和bfs,题目的话每一样入门题10道,中档题10道,难题5,6道就差不多懂了,dfs就是要学习回溯和强枝剪的思想,有时候好的dfs+强剪枝是可以媲美dp的。bfs呢就是要活用结构体,输出路径,难度高一些的有手写队列,双向bfs,加上一些状态压缩搜索什么的,我的博客的题解顺序也是按难度来的。学完这些你还只是有了图论的一些工具,这时你可以学习拓扑排序,无向欧拉路判定什么的,这些还是比较简单,一般用一些模拟+dfs或者bfs就能做出来,后面混合图(无向和有向)难度就很高了,需要大量的图论理论知识qaq就不用做了(我还不是很会),如果是入门到这里就可以了。
    然后可以正式入手图论了,首先是最短路径算法,有Floyd(三重暴力),迪杰斯特拉算法(单源最短路,最常用),贝尔曼弗德(求负权值最常用的算法),SPFA(单源最短路,bfs的思想,有时有奇效),这些算法每一个都像模板一样,每个做个10题左右就差不多了。然后就可以学最小生成树,有克鲁斯卡尔算法(贪心,也是最常用算法),prim算法(适合边很多的稠密图),注意,图论经常和一些stl中的东西搭配,这个学习的过程中也要学很多stl的用法,比如最基础的sort对结构体排序,优先队列的使用,vector和map的用法等等,我的博客有总结的(总结向里面),最小生成树也差不多每种算法做个10题总结下模板就好了,然后就可以做二分匹配的了,也是模板,有匈牙利算法,HK算法(只做过一题),KM算法(完全不会),匈牙利做算法是最常见的算法,邻接矩阵的做法会比邻接表的更慢,所以邻接表写法要会,然后如果邻接表的匈牙利算法都TLE了那么就一定是用HK算法了。。这个有的复杂,准备好模板就好了,然后总之,匈牙利算法是用于求最大匹配数的(只要按要求能匹配就行的那种),而KM算法是用来求带权值的最大匹配数的(就是符合条件的最佳选择),到这就差不多图论入门了吧(写完这篇博客就要去学KM和KMP,最大最小流之类的了qaq好难啊)
   然后数据结构方面,首先从简单的并查集开始,学会路径压缩就差不多了,做个10题左右吧(根据并查集好像是图论的,不过没差了),然后就开始痛并快乐的线段树之旅了(当你不看题解做出一题来都很爽hhhhh),线段树首先就是做什么操作格子和敌兵布阵吧,也就是线段树的单点更新题,这个就差不多是个模板,一开始看不懂不要着急,多做几题就觉得很水了,差不多做了5题之后就可以升级了,线段树的区间更新和区间查询,恩恩,是不是感觉难一些了,做个5题左右,就做线段树的区间合并吧,还有学会区间更新的lazy tag思想,这对很多搞数据结构的是一个巨大的坎,我差不多被lazy tag和区间合并虐了一个星期才搞明白是怎么回事,学会这些就算是线段树入门了,中档一些的有线段树的离线操作,说白了就是在区间更新或者查询的时候做一些手脚,也比较好理解,然后高级一点的就是学会离散化。。这个在线段树里面很常用也很好用,既可以省时间又可以省空间,被虐几次就可以做扫描线了,扫描线我也是一题就做一天的那种。。。被虐多了就好了,习惯就好,最后最恐怖的就是二维线段树qaq,一开始完全不会做(现在也基本是套模板,不是很理解),被虐个一天就似懂非懂了,昨天终于AK了线段树专题好爽啊hhhhhhh。
   对了忘记说了,做线段树的区间更新之前,可以做树状数组的题了。。。虽然能用树状数组做的题用线段树基本都能做,用线段树能做的树状数组不一定能做,但真的是好用!!!对于一些大数据的题目,我们有时开线段树就要很多的内存,如果题目只是单点更新,区间查询,我们就可以用树状数组来实现,树状数组不仅代码量很短,耗的内存是线段树的四分之一,而且速度也要比线段树快一些,抢一血的必备数据结构,其实树状数组也可以实现区间更新,这个在博客题集里面有,可以区间更新+单点查询,总之,这是个很强的数据结构,也是必备的,做个10题左右就差不多了,然后一些难的有分情况一次性开10棵树状数组和二维树状数组那种题目,做过就好了,难以理解是肯定的。

这个同时,你的stl也要跟上,数据结构经常伴随着二分查找的操作,还有离散化的时候经常用unique这个函数,vector也常用于建树来转成线段树,所以这些也要会的。

好了,总结就到这里,又要回到(tong)快(ku)乐的刷题之路了

关于数据结构和图论的一些入门攻略相关推荐

  1. SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...

  2. sdut 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    第一次写BFS的题,从开始一脸懵逼到慢慢分析,期间没有看书没查博客,自己安静的做了四十分钟终于做出来了,满满的成就感,我很水,但是我很努力,Mr杰要努力! #include<stdio.h> ...

  3. YTU每周训练----数据结构+数论+图论

    如果可以,可以陪你千年不老,千年只想眷顾你倾城一笑;如果愿意,愿意陪你永世不离,永世只愿留恋你青丝白衣. Asteroids Bessie wants to navigate her spaceshi ...

  4. 数据结构之图论概念大全

    本文一些概念引用他人博文 如有侵权 联系删除. 这么一整理,发现图的概念也太多了吧

  5. 数据结构之图论算法(四)—— 拓扑算法

    一.有向无环图(DAG图):无环的有向图 应用示例1: 描述含公共子式的表达式的工具--实现对相同子式的共享,从而节省存储空间: 应用示例2: 描述工程项目或系统过程的工具 工程可分为若干个成为活动的 ...

  6. 数据结构之图论算法(五)——关键路径(Dijkstra算法与Floyd算法)

    最短路径 1.最短路径问题 一般是求带权有向图G = (V,E)中的一个或多个点到G中其他各个点的最短路径. 源点:路径上的第一个顶点 终点:最后一个顶点 求解方法: 单源点最短路径--迪杰斯特拉(D ...

  7. 七桥问题c语言程序数据结构,数据结构与算法学习——图论

    什么是图? 在计算机程序设计中,图结构也是一种非常常见的数据结构 但是图论其实是一个非常大的话题 图结构是一种与树结构有些相似的数据结构 图论是数学的一个分支,并且在数学概念上,树是图的一种 它以图为 ...

  8. 图论相关算法理解和总结

    晚上学习了一些图论相关算法: 单源最短路径算法: Bellman-Ford 算法: Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shor ...

  9. VC++2012编程演练数据结构《31》狄杰斯特拉算法

    狄杰斯特拉算法 Dijkstra(狄杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很 ...

最新文章

  1. Spring Security 实战干货:自定义异常处理
  2. UA MATH564 概率论 Dirichlet分布
  3. 在Outlook中修改脱机文件(.ost)的保存位置
  4. 二分查找(c语言实现)
  5. 【JAVA基础篇】注解
  6. ASP连接各类数据库的语句
  7. 管理后台--3,修改分类
  8. RedisTemplate清空所有键值对
  9. 计算机应用类专业综合冲刺卷,计算机应用类专业(综合)二模试卷2011
  10. uboot1.1.6 start.s分析
  11. 【从理论到代码】旋转矩阵与欧拉角 一
  12. 智能优化算法之免疫算法(IA)
  13. paraview热流图(5):只保留一个网格
  14. AD7705模数转换芯片工作原理
  15. TFLite Interpreter
  16. python的help函数如何使用
  17. continue语句只用于循环语句中_Python尚学堂高淇|P60P63break语句,else语句使用,循环代码的优化...
  18. 主板中的电池是怎样放电的?
  19. iOS图像处理(4)坐标变化
  20. 【字符串】字符串长度与字节长度

热门文章

  1. 被G20、APEC、瑞典、新加坡、俄罗斯等引用的GCI报告,今年有什么新发现?
  2. 计算机专业读研三年,到底值不值!
  3. 【C语言安全编码之可重入函数】1、可重入函数的基本概念
  4. |,^,(按位或,按位异或,按位与)
  5. ROS rviz和gazebo联合仿真报错
  6. R绘图(5): 一文学会桑基图的画法
  7. iNFTnews | 徐悲鸿作品版权争议的启示,到期的版权是NFT的下一个金矿吗?
  8. python读取大疆激光雷达LVX数据并显示
  9. 前端面试题干货汇总(超详细)
  10. 微信小程序 动态计算图片大小