数量结构存储数据内存不够如何解决?

发布日期:2018-06-06 来源:财富国际在线 阅读:
数量结构存储数据内存不够如何解决? 萧井陌 2小时前 52 内存碎片 给一个特别大的单词本(是那种任意字符串的,比如aa也算一个单词,aaaaaaa也算一个单词),统计其中各个单词的频次。 我是这么解决的: 第一层是存a~z,用的struct data{int num;data NEXT[26];}table; table.NEXT[i].num存储a~z的频次,然后每个NEXT[i]=(data)malloc(sizeof(data))构造第二层,表示aa~zz 这样依次下去。 但是这样特别耗内存,大概50M(远远小于单词本大小)多一点的单词本要用将近2G的内存。 不知道有什么解决的…
0 0
其他回答
补充一下,大数据是专用词,最好别轻易用。
这结构这么多层有必要么?
正常应用的话,第一个字母做成桶,剩下链式时间消耗都可以接受。
两层足够了。如果想任意层,用b树。
时冰蓝 1小时前 0条评论
0 0
首先,题主你要好好学学算法,好好读书,书上这种例子很多,不要把百晓知道当成百度知道。

其次,我可以给你几个思路:

1、你这个程序,耗内存的原因之一是指针太多,如果你的单词本里短单词太多的话,仅仅指针一项就消耗大量的内存,并且由于内存申请需要对齐,导致内存碎片特别多。

2、对于小规模的单词本,比如单词本小于1G的这种,你完全可以申请一个巨大的连续的内存块然后自己来维护内存并且把所有的单词都保存进去,不用链表而是用哈希索引,大概的结构是:

struct node {int num; char * ptr; int hash}; 其中ptr指向的就是大内存块的字符串,用哈希索引,速度不会太慢。(你可以进一步优化,我只帮你到这一步,优化空间还很大)。

3、或者,因为你的内存都是一次申请知道最后才释放了,即使你把所有的东西都放到大内存块里,你最终消耗的内存都比零散申请要小。

4、检查一下是否有内存泄露,如果不是字典的特性问题,那么不排除你代码哪里写错了。

5、可以把数据存到文件里,反正你不涉及数据删除。

以上仅供参考,好久不练习算法了,手生,等高手给更好的信息
北极 1小时前 0条评论
0 0

关于我们 联系我们招聘信息免责申明广告服务 网站地图 百度地图 TAG标签

Copyright@2018-2022 Cfgjzx.Com 财富国际在线 版权所有 All Rights Reserved   
财富国际提供:最新财富资讯、房产资讯、股票资讯、区块链、投资理财、保险导购、健康产品、公私募基金,易经等资讯及服务.