对对排序数组(整数,字节)的紧凑数据结构?

用户1987133

我有一个非常特定的数据集,需要以最紧凑的方式存储为字节数组。它是整数的实时流,不断增加,经常增加一个,但并不总是增加一个。每个整数值都有一个标记,它是一个字节值。可能会有具有相同值和标记的值,但我只需要存储区别。只有受支持的操作才能添加新元素,删除元素并检查元素是否存在-我保留此数据集以检查是否最近有“配对”过。

一些样本数据:

# | value | tag |
1 | 1000  | 0   |
2 | 1000  | 1   |
3 | 1000  | 2   |
4 | 1001  | 0   |
5 | 1002  | 2   |
6 | 1004  | 1   |
7 | 1004  | 2   |
8 | 1005  | 0   |

正如我所说的,这是一个实时流,但是我只能容忍最后几千个存储。目标是使其在存储(和RAM)中尽可能高效地利用内存,操作可能会花费很多。

如果没有标签,则可以存储范围或值,(1000-1002),(1002-1005)等,通常一行中大约有5-6个值而没有间隔。但是标签把这一切弄糟了。

我当前的方法是将每个值+标记对编码为几个字节-标记为一个字节,标记“ delta”为1个或多个字节。这样,我需要存储第一个值(在上述情况下为1000),然后我要存储增量-#1,#2,#4的1,#5的1,#6的2等。

大多数增量都在1-10的范围内,因此我只能将其存储在一个字节中-如果值足够小以适合7位,则第一个位是一个标志;否则,我可以将其存储-接下来的7位将存储一个值,该值表示字节增量的占用率。

也许有更好,更紧凑的方法?

迈克·纳基斯(Mike Nakis)

由于只有127个不同的标记值,因此您可以维护127个不同的表,每个标记一个表,从而使您不必存储标记。在每个表中,您仍可以使用带有差值的漂亮技巧。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

紧凑的数据结构,用于成对的排序数组(整数,字节)?

来自分类Dev

哪种数据结构更适合-堆或排序数组?

来自分类Dev

在递归通用数据结构中对对象进行排序

来自分类Dev

在递归通用数据结构中对对象进行排序

来自分类Dev

排序通用数据结构数组

来自分类Dev

Java可变字节数组数据结构

来自分类Dev

Java可变字节数组数据结构

来自分类Dev

rails紧凑数组和NilClass

来自分类Dev

排序数组的复杂结构

来自分类Dev

数据结构-数组

来自分类Dev

整数C的排序数组

来自分类Dev

整数C的排序数组

来自分类Dev

调度程序数据结构

来自分类Dev

用C对数据结构数组进行排序

来自分类Dev

排序的Trie数据结构

来自分类Dev

从php数组排序数据

来自分类Dev

UITableView的层次结构中的排序数组

来自分类Dev

如何快速排序数组结构

来自分类Dev

JavaScript不必要的紧凑数组操作

来自分类Dev

使用XML以外的应用程序数据结构

来自分类Dev

非重叠整数范围的数据结构?

来自分类Dev

C ++数据结构的拓扑排序

来自分类Dev

C ++数据结构的拓扑排序

来自分类Dev

根据key(id)对perl数组数据结构中的键,值对进行排序

来自分类Dev

带负整数和正整数的排序数组

来自分类Dev

排序数据库或数组

来自分类Dev

网格访问排序数组数据

来自分类Dev

提取和排序数组中的数据?

来自分类Dev

按数组长度排序数据