树好像没有辣么难

简介: 之前不会用树处理数据,直到怎么用之后,发现还是很好用的
最近用到查找,很简单的字符串去重操作,从A字符串集合中去掉在B字符串集合中已经存在的字符串,去重很见到,从A中读取一个,在B里面查找,如果B里面已经有了,那就不管,如果没有,那就保留或者存储到临时容器中,当A被遍历一遍之后,也就查完了。思路是这样,如何快速的遍历查找是关键,按照原有逻辑,嵌套遍历时间复杂度O(sumA*sumB)时间开销过长,严重破坏体验效果
解决思路:首先要确定,使用查找方式比遍历方式要节省时间,目前我已知的快速查找方式是二分查找,这样比较快速,创建红黑树提供思路,确定string为树节点的值,如何确定键,也就是key值是一个问题,确定键值对唯一,不能产生一个键对应两个值的问题。
最简单的,想到了md5值,因为不同的字符串得到的md5也不一样,这时候我走进一个误区,当A,B两个树容器全部建立完毕之后,我仍然使用查找的方式,确定A[k]是不是在B也有一个B[k],仍然是遍历查找B[k]解决,时间上虽然有节省,但是没有减少多少。
经过完善,有两个方案。
方案一:
  吧A的k和v拿出来,添加到B中,如果B的长度改变,那么就是添加成功,如果长度没有变,则B中有k,v对与功能的键值对存在
方案二:
  获取A的k,v和B的k集合B.keys(),如果k在B.keys()里面,就说明B中有v,如果没有,就获取了对比出来要处理的v
目录
相关文章
|
3月前
|
C++
【C++】手撕AVL树(下)
【C++】手撕AVL树(下)
47 1
|
存储
手撕AVL树
手撕AVL树
49 0
|
5月前
|
存储 算法 关系型数据库
【面试普通人VS高手系列】b树和b+树的理解
【面试普通人VS高手系列】b树和b+树的理解
|
存储 关系型数据库 MySQL
浅浅谈一谈B树和B+树
浅浅谈一谈B树和B+树
2021年圣诞节送自己一颗树吧
2021年圣诞节送自己一颗树吧
2021年圣诞节送自己一颗树吧
|
存储 算法
漫画:什么是 “哈夫曼树” ?
哈夫曼树是由麻省理工学院的哈夫曼博士于1952年发明,这到底是一颗什么样的树呢? 刚才我们学习了树的带权路径长度(WPL),而哈夫曼树(Huffman Tree)是在叶子结点和权重确定的情况下,带权路径长度最小的二叉树,也被称为最优二叉树。 举个例子,给定权重分别为1,3,4,6,8的叶子结点,我们应当构建怎样的二叉树,才能保证其带权路径长度最小? 原则上,我们应该让权重小的叶子结点远离树根,权重大的叶子结点靠近树根。
315 0
漫画:什么是 “哈夫曼树” ?
|
存储 Java
【Java数据结构】二叉树到底是什么品种的树?以及二叉树有哪些基操
【Java数据结构】二叉树到底是什么品种的树?以及二叉树有哪些基操
【Java数据结构】二叉树到底是什么品种的树?以及二叉树有哪些基操
|
存储 SQL 缓存
拜托,别再问我什么是 B+ 树了
拜托,别再问我什么是 B+ 树了