首先在算法书的选择上,选择的是李煜东所著的《算法竞赛进阶指南》这本书,因为参加了学院的ACM竞赛实验室,这本书对本人的影响也很深,它涵盖了竞赛中大部分的算法,如基本算法二分、倍增、前缀和,简单的数据结构堆、字典树,DFS、BFS,博弈论,线段树、树状数组,动态规划、图论。仔细研究过的算法只是其中的一部分,最熟悉的就是图论部分了。
  图论中讲了很多算法,比如最短路、最小生成树、二分图、tarjan算法、网络流等。学习完这些,最让人印象深刻的算法就是tarjan算法,tarjan算法是计算机科学家Robert Tarjan提出的可以在线性时间内求出无向图的割点与桥,以及双连通分量。其实tarjan算法的本质是在深度优先搜索的基础上,通过设置时间戳、追溯值等操作避免了重复遍历结点,得出相关的值。Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树中的一棵子树。搜索时,把当前搜索树中未处理的节点加入一个堆栈,回溯时可以判断栈顶到栈中的节点是否为一个强连通分量。Tarjan算法有点类似于基于后序的深度遍历搜索和并查集的组合,充分利用回溯来解决问题。
  但是这次笔记主要是复习一下网络流的Dinic算法,网络流指的是一张有向图中每条边都有一个权值,为边的容量,在不超过容量限制的前提下,从源点S到汇点T,流会从S产生,最终归于汇点。Dinic算法是解决网络流的最大流问题,Dinic算法是典型的增广路算法,与其相对的还有预留推进算法,如ISAP。Dinic算法的思路是这样的:每次都不停地用BFS来构造“层次图”,然后用“阻塞流”来增广。什么是层次图呢?假设在残余网络中,起点到结点u的距离是dis(u),那么dis(u)就是结点u的“层次”。只保留每个点出发到下一层次的弧,就得到了一张层次图,其中还增加了众多剪枝。Dinic算法的时间复杂度的理论上界是O(N*N*M)(N是结点数,M是边数),但实际上Dinic算法比这个理论上界好得多。对于二分图最大匹配这样的特殊图,时间复杂度是O(N0.5*M)。可以处理104到105规模的网络。

Note(读书笔记)相关推荐

  1. pro git读书笔记

    pro git读书笔记 起步 三种区域以及三种状态 Git 项目有三个工作区域的概念:工作目录,暂存区域以及Git 仓库 工作目录是我们用来修改文件的目录,是对项目的某个版本独立提取出来的内容 暂存区 ...

  2. 《Deep Learning With Python second edition》英文版读书笔记:第十一章DL for text: NLP、Transformer、Seq2Seq

    文章目录 第十一章:Deep learning for text 11.1 Natural language processing: The bird's eye view 11.2 Preparin ...

  3. 《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理

    系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务,推迟一段时间执行的任务),因此,时间的管理对于linux来说非常重要. 主要内容: 系统时间 定时器 定时器相关概念 定时器执行流 ...

  4. Think in Java第四版 读书笔记9第15章 泛型

    Think in Java第四版 读书笔记9第15章 泛型 泛型:适用于很多很多的类型 与其他语言相比 Java的泛型可能有许多局限 但是它还是有很多优点的. 本章介绍java泛型的局限和优势以及ja ...

  5. 《深入理解Android2》读书笔记(五)

    接上篇<深入理解Android2>读书笔记(四) startActivity Am void run() throws RemoteException {try {printMessage ...

  6. 《刻意练习:从新手到大师》读书笔记 觉得别人总结的不错拿来学习备份

    <刻意练习:从新手到大师>读书笔记 https://www.douban.com/note/611579795/ 愁容童子 愁容童子 2017-03-18 12:05:05    1. 正 ...

  7. 《Hands-On Machine Learning with Scikit-Learn TensorFlow》读书笔记(三):分类

    最近有时间看书了,把以前想看的书捡一下,翻译中顺便加上自己的理解,写个读书笔记. 注意:下面的"数字+s"表示的是数字的类别,加上s是和纯数字区别开. 在上上篇中,我们提到最常见的 ...

  8. 读书笔记:技术的本质-技术是什么,它是怎样进化的 (布莱恩•阿瑟)

    读书笔记算不算原创? - page 30 然而.作为人类,我们实际上不应该和技术如此紧密地结合,而是应该和其它什么东西融合得更为紧密,那就是自然. 在最深的层次上.人的存在应该和自然,和我们最初的环境 ...

  9. 读书笔记:技术的本质-技术是什么,它是如何进化的 (布莱恩•阿瑟)

    读书笔记算不算原创? - page 30 然而,作为人类,我们实际上不应该和技术如此紧密地结合,而是应该和其他什么东西融合得更为紧密,那就是自然.在最深的层次上,人的存在应该和自然,和我们最初的环境, ...

最新文章

  1. 后悔没早知道这些Python特性
  2. 【生生被气死的一周】头秃
  3. Android Java虚拟机拦截技术分析
  4. python经典100例答案pdf-Python 入门 100 案例,PDF免费下载
  5. 《中国编程挑战赛--资格赛》赛题及解答
  6. python动态生成数据库表_使用Python创建MySQL数据库实现字段动态添加以及动态的插入数据...
  7. 上阿坤的课程的注意事项
  8. Linux线程(二)
  9. Nginx深入详解之过滤模块
  10. 『 编程思维』之我见
  11. 【c】【报错解决】incompatible implicit declaration
  12. python与java区别-python(一):python与java语法的异同之处
  13. 一家胡三家的人工智能来了
  14. Step7 MicroWin V4.0 SP9在Win10系统中的安装方法
  15. 解决kindle刷多看系统的问题
  16. pycharm中遇到master in has no tracked branch的解决方式
  17. 【无标题】对于_, predicted = torch.max(outputs.data, 1)的理解
  18. 教育部明确:坚持普职分流非常必要
  19. poj 4084:拓扑排序
  20. CHIPON 芯旺微的KF32A156系列的CAN FD模块的使用介绍

热门文章

  1. 【面试-八股文】万字app测试 面试题,助你吊打面试官系列
  2. c语言syslog日志记录
  3. 十、惯性导航误差传播规律
  4. 史上最全mysql日期计算(月初、月末、上中下旬判断、年初、年末、季初、季末)
  5. Stripe 2 (前缀和计数)
  6. 手把手学习Vue3.0:CSS样式基础和HTML5基础收藏
  7. Linux-USB学习 -- USB枚举过程
  8. python数据维度小测试_数据分析|如何做一个ABtest测验
  9. 最完整的Windows系统安装教程(Win7、Win10、Win11)
  10. 【烈日炎炎战后端】JAVA基础(3.4万字)