开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情
✨欢迎关注🖱点赞🎀收藏⭐留言✒
🔮本文由京与旧铺原创,csdn首发!
😘系列专栏:java学习
💻首发时间:🎞2022年12月10日🎠
🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦
🎧作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲
🐱💻导航小助手
1.0-1字典树概述
1.1回顾字典树
想要理解0-1字典树,首先需要理解好一个数据结构,就是字典树,所谓的字典树,顾名思义,是关于“字典”的一棵树。即:它是对于字典的一种存储方式(所以是一种数据结构而不是算法)。这个词典中的每个“单词”就是从根节点出发一直到某一个目标节点的路径,路径中每条边的字母连起来就是一个单词。
其中,根结点是不包含字母的,从根节点开始走到某结点的路径就表示这一个单词。
字典树又叫做前缀树,常见的作用如下: 1、维护字符串集合(即字典)。 2、向字符串集合中插入字符串(即建树)。 3、查询字符串集合中是否有某个字符串(即查询)。 4、统计字符串在集合中出现的个数(即统计)。 5、将字符串集合按字典序排序(即字典序排序)。 6、求集合内两个字符串的LCP(Longest Common Prefix,最长公共前缀)(即求最长公共前缀)。
字典树的实现可以直接使用数组实现,也可以基于类的基础上实现,在竞赛当中常常直接使用数组,工程中会以类的方式进行实现,大致的实现思想就是对于每一个结点都有一个子结点数组,大小为26也就是字母表的个数(字母与数组下标顺序对应),用来存放下一个字母的结点位置信息,所以可以通过根结点进行查询和添加单词,具体实现就不说了,本文着重介绍字典树的一种运用或者说改造【0-1字典树】,所以想要理解0-1字典树,建议对字典树这种数据结构需要熟悉,具体实现请参考这一篇博客:weijianhuawen.blog.csdn.net/article/det…
1.2 0-1字典树
0-1字典树常常用来求有关二进制的问题,最典型的就是求一个数组中的最大异或值。 0-1字典树其实就是字典树的一种变形或者特殊的字典树,相比于一般的字典树它的字典的数组只有两个,一个表示1另一个就是表示0咯,一般在问题中不需要去考虑end标记,因为在一个题目中,出现数据类型是一样的,比如int就是32位,所以高度一般就是固定的。
实现的思路基本上和字典树,基本上一模一样吧,下面以求一组数中最大异或值为例,简单实现和运用一下0-1字典树,其实就是写字典树了。