2024.8.20随笔

树分治

这部分知识是我的弱项,之前学习时也没有听懂。此前碰到这类题也会想尽办法用数据结构代替,但发现非常不可做,代码复杂程度极高。而且感觉之前我连普通的区间分治都不太熟练,没有学好的信心。现在学习过后好了很多,理解了分治的核心(也许),就是每次到分治的关键点就去统计包含关键点的答案,然后去递归子区间,然后根据具体的题目要求选取合适的数据结构维护信息。记得之前做过一道时间复杂度为 O(nlogn) 的题目,但是我当时不能熟练运用树状数组所以尝试用线段树替代,然后被卡了很谔谔,后经高人指点终于懂得要选用常熟小、复杂度尽量低、代码写起来较为简单的数据结构,更关键的是要正确判断题目需要维护的信息的性质。

关于具体的树分治,它分成点分和边分。点分治就是每次在当前树中选择最优点(一般是重心)为根,然后 dfs 子树维护信息、更新答案。因为每次选择最优点作为树根,所以所有分治点暴力 dfs 的复杂度总共为 nlogn 的,加上维护信息的复杂度(比普通维护多了一只 log 应该?)是比较优秀的。虽然一些复杂的数据结构时间复杂度可能比它低,但是在巨大的常数下也甘拜下风。

后面的边分治与在线点分治(点分树)都是属于能够理解但代码对我来说比较困难所以还没有写,明天自习也只是看情况,因为感觉点分治可代替他们,只是实现需要加一点科技。现在还是多写几道 dsu 和 点分治的题熟悉熟悉,确保考试碰到有大概率做出来才是正道!

做题

下午写了几道题感觉收获较大,但是这两天的代码还不是很熟悉吧。准备明天不写太多题,就把板子多熟悉一下,保证在理解算法的情况下能够稳稳写出来!

最后走之前一直在和 xjy 讨论点分治与 dsu 的关系,感觉它们之间联系挺大的,很多题如果能用其中一个去写,那么极大概率也能用另一个去实现。就比如点分治的板子题,xjy 在用点分治写出后没有去赶做题进度,而是尝试用 dsu 重新完成此题,并且他有一些疑惑也在询问我,我在给他讲解的同时也同时加深对这两种算法的印象、理解与思考,以及一些小小的技巧吧也许(?),还有最重要的注意事项。

最后在晚饭后他也靠自己成功 AC,想必他一定非常开心吧!在 AC 后他也积极与我交流一些有关东西,感觉挺不错!他的精神值得我学习!我也不要再去有意无意去赶进度了,不要把做题看得太重!谨记!

最后

本来晚上说去九眼桥转一圈的,未果。晚上没有干啥,就稍微看了一下这两天得板子,在 B 站上看了一些科普类的视频,有收获。今天运用量有点大,累了,睡觉去了。记录一下写文章时听的音乐:feel the fire。豪庭!

posted @   Lyrella  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2023-08-20 网络流专题
点击右上角即可分享
微信分享提示