当前位置: 首页 > news >正文

为什么java中不使用多叉树

怎么样的数据结构能高效定位数据呢?前提是顺序排列

1.二分法

通过二分法每次可以排除一半的选择,这样查询是O(logn)

但是这样的线性存储的话存在不好插入删除的问题,如果插入或者删除元素后面的元素全部都要移动位置

2.非线形且天然适合二分查找的数据结构——二叉查找树

一个节点的左子树的所有节点的都小于这个节点,右子树的所有节点都大于这个节点

查询是O(logn),但是存在最坏情况就是退化成链表,此时查询时间复杂度是O(n)

3.平衡二叉查找树

为了防止二叉查找树的退化,增加了一条限制:左右子树的高度差不能大于1

但是在插入或者删除节点的时候为了保持这种平衡需要进行复杂的旋转操作

4.红黑树

保持了二叉查找树的特性,但是保持的是一种相对平衡不是绝对平衡

查找效率比avl树要稍微差一些,但是保持平衡的操作复杂度要更低

5.多叉树——b树

上面的二叉树都存在一个特点,当数据量很多的时候树的高度会变得很高

这种特点对于要从磁盘读取数据的话非常不合适,要想减少读取磁盘次数可以降低树的高度,一个数据块里多放一些数据

b树是每个节点都存放数据记录,但是对于范围查询的话,b树就可能需要访问多个节点

6.b+树

b+树是只有叶子节点才存放数据,非叶子节点只存放索引,这样非叶子节点可以存放更多的索引,树高也就会更低一些

多叉树的查询效率也是O(logn)

对于需要访问磁盘来查找数据的,多叉树无疑是更好的选择,因为低树高磁盘io次数更少

但是对于内存来说呢?

二叉树和多叉树在查找时间复杂度来说都是O(logn),对于内存来说访问速度不是限制,但是内存资源是会稍微紧张一些的,多叉树的一个数据块中存放多个数据,一个数据块如果太大,容易存在内存碎片,所以内存中更适合单个数据作为一个节点

选择什么样的数据结构往往是看要解决什么样的问题

例如redis中使用的是跳表来作为zset的底层数据结构,跳表我觉得也是一种多叉树的思想,而且是偏向b树的多叉树,从最高层索引不断向下查询。但是跳表的索引是一种随机的体现,因为不是固定的新增一个数据就会增加索引,通过随机创建索引的方式能够极大简化树在保持平衡上的消耗,这也符合redis追求简单高效的设计目标。使用了一些冗余的空间来换时间

对于java中一些数据结构,它们与数据库的主要区别是数据量小,其次java的垃圾回收机制也更支持单数据节点的实现方式,且红黑树的性能和稳定性都很高了,没有必要再设计一种适合java的多叉树了

http://www.dtcms.com/a/443279.html

相关文章:

  • 没人做网站了吗网站模块功能
  • 10.2 容器云部署准备(二)
  • 铜陵网站建设企业vi设计合同
  • 【文献笔记】NeurIPS 2022 | PointNeXt
  • 安庆建设网站怎么创建网站页面
  • wordpress 众筹网站众筹网站建设方案模板
  • 线性表的实现
  • 传播文化有限公司网站建设查询网138网站域名
  • YOLO入门教程(番外):卷积神经网络—从全连接层到卷积
  • 技术支持 东莞网站建设大型门户网站开发案例
  • Rust程序语言设计(1-4)
  • 做北京电梯招标的网站合肥seo外包平台
  • CodeForces 20251003 - ?
  • node服务端通过socket.io保持长连接通信示例
  • Super-Resolution Delay-Doppler Estimation for OFDM Passive Radar
  • 九江开发区建设环保局网站贵州住房建设厅官网查询
  • 郑州诺耀科技 - 郑州高端网站建设营销推广网站路径怎么做
  • 招聘网站源码下载岳阳市交通建设投资公司门户网站
  • 单细胞空间--免疫细胞与肾脏细胞的时空相互作用调控自身免疫性肾病中肾小球新月体形成
  • 巨野做网站的网站策划与运营考试题
  • 正品海外购网站有哪些中国十大建筑设计院排名
  • Docker Compose 多容器编排实战
  • 初创公司 建网站网站设计和营销
  • 救援启动!
  • Android 事件分发机制 图解
  • 做网站价钱电脑版qq在线登录网页入口
  • 140、【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(六)
  • 免费网站建设软件大全wordpress禁止中国ip
  • 有界区域上具有常数右端项的泊松方程解的上界估计
  • 做区位分析的地图网站wordpress主题分类目录主题