朱迪矩阵

✍ dations ◷ 2025-09-10 12:18:31 #数据结构

朱迪矩阵(Judy array)是一个计算机科学和软件工程学中的名词,是一种高性能、低内存消耗的数据结构,实现了关联数组的功能。与普通数组不同,Judy array可以是稀疏的,这一点更像是散列表,而非数组。Judy array可以用整形或字符串作为键值来存储、查询数据,它最大的优势是可动态自动扩展,高性能,节省内存并且易于使用。

由于Judy array在操作速度和内存使用上都非常高效,同时并不需要特殊配置或初始化,使得它可以用来替换掉多种常见数据结构,例如跳跃列表,链表,二叉树,B树,散列表,而且judy array在海量数据集上的表现比那些数据结构更好。

粗略地讲,Judy array像是一个高度优化了的256叉树,为了节省内存,它使用了超过20种不同的压缩技术来压缩树节点。.

Judy array 是Douglas Baskins发明的,他用自己妹妹的名字命名了这种数据结构。

容量、用量、密度 这三个概念是传统树形结构中很少使用,但在Judy array中反复使用的。这个的概念的定义如下:

Judy array是没有容量限制的,所以也不用事先分配好存储空间,它可以根据用量动态决定生长或收缩内存使用,来支撑海量数据存储。其存储能力仅受到计算机内存容量的限制。 Judy array的内存用量与其存储的数据用量基本呈线性关系。

Judy array在设计上就力争保持尽可能高的CPU缓存命中率,为了达到这个目标,其内部算法十分复杂。由于有了这些针对性的优化,使得Judy array在运行速度上十分高效,有时甚至超过散列表,尤其是在处理大数据集的时候。由于Judy array是依托树 (数据结构)形结构设计的,其内存消耗比散列表小很多,同样是拜树形结构所赐,使得它可以完成键值的顺序遍历,这一点在散列表中是不可能的。

从Judy array的发明者所撰写的简介以及其他一些相关的中文论文中看,设计中使用了多种的压缩思想与压缩算法,根据不同的密度情况,选择不同的压缩方式,以期尽可能节省内存,降低实际存储中的稀疏情况,我猜测,这能够在缓存命中率上带来不少提升,进而提升效率。

看到的算法思路包括:

相关

  • 泌尿外科学人体解剖学 - 人体生理学 组织学 - 胚胎学 人体寄生虫学 - 免疫学 病理学 - 病理生理学 细胞学 - 营养学 流行病学 - 药理学 - 毒理学泌尿外科是专门研究男女泌尿系统与男
  • 心肌梗塞心肌梗死(Myocardial infarction简称MI、Acute myocardial infarction简称AMI),旧称心肌梗塞,是一种急性及严重的心脏状态。其成因是部分心肌的血液循环突然中断,心肌因无法得到
  • 生态系的物质循环生物地质化学循环(英语:Biogeochemical Cycle,又称作生态系统的物质循环)在生态学上指的是化学元素或分子在生态系统中划分的生物群落和无机环境之间相互循环的过程。这使得相关
  • 甘石星经《甘石星经》,中国古代的天文学专著和观测记录,是世界上现存第二早的天文著作,仅次于前1800年的巴比伦星表。中国在春秋战国时期天文学已发展,在这一时期出现了一大批天文学专著
  • 开普勒定律开普勒定律是由德国天文、数学家约翰尼斯·开普勒所发现、关于行星运动的定律。他于1609年在他出版的《新天文学》科学杂志上发表了关于行星运动的两条定律,又于1618年,发现了
  • 摊丁入亩摊丁入地,又称作摊丁入亩或地丁合一,草创于明代,是大体完成于中国清朝雍正帝统治时的一项重大的税制改革,将中国实行两千多年的人头税(丁税)废除,而并入田赋,从而将人力形式的地方税
  • 坡州市坡州市(朝鲜语:파주시/坡州市 Paju si */?)是位于大韩民国京畿道西北部的市。本市市界上的板门店为南北停战区的最前线位置。该市也是所有非军事区南缘的韩国行政区域中唯一一
  • 条纹林狸条纹林狸(学名:Prionodon linsang)是林狸科林狸属的一种,原生于马来西亚、苏门塔腊、婆罗洲、爪哇、泰国及印尼,是猫科的近亲。条纹林狸连尾巴约长74厘米。它们呈淡黄色,有5条深色
  • 千叶县第11区千叶县第11区是日本众议院的选区,设立于1994年。北海道 13 | 山形县 4 | 静冈县 9 | 岛根县 3 | 大分县 4福井县 3 | 山梨县 3 | 德岛县 3 | 高知县 3 | 佐贺县 3青森县 4 |
  • 1478年莫斯科—喀山战争1478年莫斯科—喀山战争(俄语:1478 Русско-казанская война),是第三次莫斯科—诺夫哥罗德战争后喀山汗国打算出兵占领盛产宝石的原诺夫哥罗德共和国维亚特