| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 初探并查集 -> 正文阅读 |
|
[数据结构与算法]初探并查集 |
前言:笔者最近学习了算法进阶指南的并查集的章节,写了几道题,也算是有些许感悟,于此写一些。 并查集的作用:一种十分高效地维护各个元素之间的关系的数据结构,常见的关系有:亲戚关系,敌对与盟友关系,捕食与被捕食关系,两个元素之间夹着多少个元素(比较特殊). 并查集的种类:单一关系(普通并查集),多种关系(带权并查集或扩展域并查集)。 带权并查集基本模板(路径压缩和按秩合并): ? ? ? ? ? 注:路径压缩模板一般是不变的,而按秩合并是变化,需要根据题意推导合并公式。 ? 路径压缩(均摊复杂度o(logn),优化后o(α(n))):
? 按秩合并(复杂度o(1)):
常用推导合并公式的方法: ? 1.向量法(适合维护既有方向又有长度的量,比如:A欠Bx元,A捕食B......):利用向量加法法则推导即可。 ? ? ? 2.迭代加法(适合维护只有长度的量,比如:A到祖宗结点之间有多少元素):注意初始化时要考虑到底能不能置为1,例如维护这个结点到祖宗结点之间有多少元素就不能初始化为1。参见:银河英雄传说。 分析题目的一些切入点: ? ? 1.首先明确这道题是否能用并查集,这步比较简单,凡是需要维护元素之间的消息的基本都可? ? ? ? 以用到并查集。 ? ? 2.明确维护的消息是矢量还是标量,是多关系还是单一关系? ? ? 3.种类并查集维护的是该结点到其祖宗结点的某种信息,从这一角度思考到底维护拿一些具体? ? ? ? 的信息,其后便可以结合迭代加法或者向量法推导合并公式。 经典题目推荐:程序自动分析,狡猾的商人,银河英雄传说,食物链...... |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/28 11:43:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |