首页 > 其他分享 >为什么会变成这样呢? #1 (最小异或生成树)

为什么会变成这样呢? #1 (最小异或生成树)

时间:2023-08-09 22:14:37浏览次数:35  
标签:log trie 复杂度 最小 生成 异或 集合

对于 \(n\) 个点的完全图,点 \(i\) 和点 \(j\) 之间的边权为 \(a_i \oplus a_j\),求该图的最小生成树,其中 \(\oplus\) 表示按位异或。

期望复杂度:\(O(n\log n\log a_i)\)。

解答

把所有 \(a_i\) 插入 01trie。一个显然的结论是,对于在最终生成树上任意两个点之间的路径,其经过的点都一定在两点在 trie 上的 LCA 的子树内。于是遍历每个节点,设它的左右两个儿子内的节点已经连通,现在关心连接左右两个儿子的边的权值。这相当于问两个集合内的各选一个数,使得选出的两个数的异或值尽可能小,这是经典问题,枚举一个集合内的数,在另一个集合的 trie 树上匹配即可。

只要保证每次枚举较小的集合,每个点会被合并至多 \(\log n\) 次,是典型的启发式合并复杂度。不过由于 trie 的深度不超过 \(\log a_i\),因此其实每次任选一个集合也可以保证每个点会被合并至多 \(\log a_i\) 次,复杂度差异不大。

例题:

标签:log,trie,复杂度,最小,生成,异或,集合
From: https://www.cnblogs.com/szdytom/p/how-did-we-get-here-1.html

相关文章

  • 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(13):Hamliton-Cay
    目录前言Hello!小伙伴!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖…已保研。目前正在学习C++/Linux/Python学习经验:扎实基础+多做笔记+......
  • Hugging Face 的文本生成和大语言模型的开源生态
    [更新于2023年7月23日:添加Llama2。]文本生成和对话技术已经出现多年了。早期的挑战在于通过设置参数和分辨偏差,同时控制好文本忠实性和多样性。更忠实的输出一般更缺少创造性,并且和原始训练数据更加接近,也更不像人话。最近的研究克服了这些困难,并且友好的交互页面能让......
  • 异或运算的一点规律
    亦或就是相同为0,不同为1若AxorB==C则:1、A xorC==BC xorA==BB xorA==CAxorB==CCxorB==ABxorC==A(满足类似于交换律的东西)2、(AxorB)xorC==0AxorBxorC==0(AxorC)xorB==0AxorCxorB==0(CxorB)xorA==0C xor B xorA==0 ......
  • yaml-cpp生成yaml文件及解析yaml文件
    1) 源码编译及安装获取源码$git clone https://github.com/jbeder/yaml-cpp.git$cd yaml-cpp && mkdir build && cd build && cmake .. && make && make install使用样例:由于yaml格式文件与xml和json格式的文件类似,采用树形结构。Yaml对于树节点定义为No......
  • 【转载】八种生成学习策略
    本文发表于《数字教育》2016年第3期(总第9期)域外观察 栏目,页码:86-92.摘要:生成学习意味着学习者会积极尝试去理解所呈现的材料内容。学习者会通过在学习时对所呈现材料进行相关部分的“选择”,在工作记忆中进行心理表征的“组织”,再将所组织的材料与长时记忆中激活的已有知识进行......
  • 【转载】学习是一种生成活动
    本文发表于《数字教育》2016年第2期(总第8期)域外观察栏目,页码:85-92。转载请注明来源!摘 要:意义学习是一种生成活动,即学习者总是努力想去理解所呈现的材料。生成学习对研究学习科学、评估科学和教学科学都有着重要意义。生成学习发生于学习者在学习时进行适当认知加工的过程中;与接......
  • 生成树
    prim模板P1546[USACO3.1]最短网络Agri-Net#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>usingnamespacestd;intn,m,vis[105],d[105],xk,a[105][105],ans,fl;voidprim(){//n^2vi......
  • 使用C#配合modbus协议的16进制代码生成crc16校验码的计算方法
    前言在网上也是查看了很多关于crc16校验的文章,但是好像都是对于有基础的人看的,我当时拿起直接使用,发现行不通,这对于零基础的不是很友好,所以决定贡献一篇,哈哈哈哈~~~publicuintCalcCRC16(stringhexCommand){byte[]pBuf=HexStringToByteArray(......
  • JavaScript:表单生成器
    JavaScript:表单生成器一条小橘猫于2021-12-0116:10:56发布3393收藏38分类专栏:JavaScript文章标签:经验分享javajavascripthtml前端版权华为云开发者联盟该内容已被华为云开发者联盟社区收录加入社区JavaScript专栏收录该内容45篇文章55订阅已订阅表单属性有姓......
  • 什么是迭代器,生成器,装饰器
    1什么是迭代器,生成器,装饰器迭代器迭代器(Iterator):是一种用于遍历(迭代)集合或序列数据的对象,它提供了一种统一的方式来逐个访问集合中的元素,而无需了解集合内部的具体结构。迭代器允许你逐步处理大量数据,而不必一次性加载所有数据到内存中。迭代:一种不依赖于索引取值的方式,我们......