henryzhihua 2020-06-10
近期在队友的影响下,开始学习《算法竞赛进阶指南》这本书。对于本来就有一定算法基础的我来说,这本书不论是对于学习不常见的新算法还是对于基础算法的巩固都有很大的帮助。其中,数据结构和图论的一些巧妙的算法令我非常感兴趣。
就数据结构方面的算法来说,线段树在书中是一个重头,这个算法在维护区间上有着很优秀的时间复杂度——nlog。对于区间操作,比如区间修改,区间查询,单点修改,单点查询都可以通过线段树来解决。当然,我学到了另一种树状数组的数据结构,相比于线段树,它的复杂度的常数更加优秀,在有些时候可以代替线段树,实现降低复杂度,但是,对于一些情况,我们只能使用线段树。初学线段树,我觉得这个算法很难,但是,我去做了这本书上的一些题目,我发现,对于一些更难的算法来说,线段树往往起的只是一个工具的作用。这不得不让我感叹算法的博大精深,以及无穷无尽。
图论中让我感兴趣的是网络流算法。虽然这个算法在我以前刷题的历史中,真的很少,我并没有怎么见到过,但是他的思路之巧妙让我大为惊叹。这个算法本身并不难,一套题目写下来,让我觉得这个算法真正的困难在于构建图。根据事务之间的关系,构建出有逻辑和道理的图,再套上网络流的模板。之前听过这样一句话“一切皆可网络流”,虽然不知道是真是假,但是不论从什么方向来看,网络流的精妙也可以从侧面体现出来了。于是,本着对这个算法的兴趣,我在vjudge上拉了一个专题专门来学习这个构图思维,并整理出了自己的网络流模板,封装在了起来,写上注释,方便以后的二次学习。
这本书中还有许许多多的算法,确实不是我一时半会可以参透的,但是算法之博大精深让我无比震惊,学习算法的过程痛苦而快乐,时而迷迷糊糊,时而又是一点就通,在阅读这本书的时候,我学会了戒骄戒躁,静下心来读书,这才也算是小有收获。
我希望可以读完这本书,虽然里面的很多知识对我来说真的很难,特别是数论那一块,但是我觉得只要慢慢去参悟,融会贯通,多动手实践,算法总会有被攻略的一天。