求:存贮多维数组的最快与最省空间的算法或存储结构

mechiland 2003-11-12 03:21:16
假定现在有一多维数组(10-20维),每个维度有多个元素(50-100个),这样的一个数组在内存中,如何将这个数组以最快的方法、最小的空间存入到文件中?

前提:在这个数组中只有20%左右的元素非空(不为0)

最直接的方法也许是循环50-100*50-100*...*(一共10-20次循环),然后写入到文件中。稍微好一点的方法只存储一个个的向量-值(Vector-Value),下次根据Vector代表的路径将value读出,其他不存在的路径设置为0。这样做能够节省空间。不知道大家有什么好的方法
...全文
75 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mechiland 2003-11-17
  • 打赏
  • 举报
回复
楼上的我怎么看不明白呢
ZhangYv 2003-11-16
  • 打赏
  • 举报
回复
多维数组(10-20维),每个维度有多个元素(50-100个),
设总数有N个,每维的起始下标地址是D[i](需要初始化)
开辟空间 A = new dataType[N]
选定i维第j个元素的公式是
A[D[i-1]+j]的就是...
mechiland 2003-11-13
  • 打赏
  • 举报
回复
不会吧,没人理会了?55
mechiland 2003-11-12
  • 打赏
  • 举报
回复
还有个小问题:哪位有用B+实现文件索引的小Demo,借我看看,以前没好好学,:P
mechiland 2003-11-12
  • 打赏
  • 举报
回复
我的思路和楼上的差不多,就是通过一条路径(索引)找到某一个值,有值才存,无值或为0就不存。这样能省不少空间。基本的元数据结构如下(以10维为例)

1-1-1-1-1-1-1-1-1-1-1234

但是这样在读取的时候不太方便,最好的方式是第一次读取时将数据全部读入内存中的一个10维数组中,再进行查询。写入的话也最好是一次写入。

短歌如风 2003-11-12
  • 打赏
  • 举报
回复
事实上一个N维数组可以看成是从<I[1],I[2],……I[N]>有序对到Data的映射,因为I必然是整数,当数组数据接近满时当然是用索引直接定位最好,不过当大量数据都是空(或都是固定值)时就应该使用种索引搜索结构了。而既然是放在外存,用B+Tree效率还是比较高的,在外存索引中,它在读取外存次数和每次读取数据量方面的综合起来还是很优秀的。
eastsun 2003-11-12
  • 打赏
  • 举报
回复


先建立一个基于比特位的是否非空的映射数组。

然后对于有非空元素的数组单元建立词典查询结构或者顺序查询结构。

先建立的映射数组:支持如下操作:BOOL IsNotNullElement( int V1, int V2, ...int V20 );
如果这个返回值为0,则这个地方的数组元素为空。如果不为空,则通过二分法或者索引的方法,找出这个值。

主要存储结构采用链表(链表可以建立索引)或者顺序数组。

不过这个问题工程确实很难,因为50的20次方是一个天文数字。乘20%还是天文数字。












33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧