0 赞 0 踩
其他回答
补充一下,大数据是专用词,最好别轻易用。
这结构这么多层有必要么?
正常应用的话,第一个字母做成桶,剩下链式时间消耗都可以接受。
两层足够了。如果想任意层,用b树。 时冰蓝 1小时前 0条评论
这结构这么多层有必要么?
正常应用的话,第一个字母做成桶,剩下链式时间消耗都可以接受。
两层足够了。如果想任意层,用b树。 时冰蓝 1小时前 0条评论
0 赞 0 踩
首先,题主你要好好学学算法,好好读书,书上这种例子很多,不要把百晓知道当成百度知道。
其次,我可以给你几个思路:
1、你这个程序,耗内存的原因之一是指针太多,如果你的单词本里短单词太多的话,仅仅指针一项就消耗大量的内存,并且由于内存申请需要对齐,导致内存碎片特别多。
2、对于小规模的单词本,比如单词本小于1G的这种,你完全可以申请一个巨大的连续的内存块然后自己来维护内存并且把所有的单词都保存进去,不用链表而是用哈希索引,大概的结构是:
struct node {int num; char * ptr; int hash}; 其中ptr指向的就是大内存块的字符串,用哈希索引,速度不会太慢。(你可以进一步优化,我只帮你到这一步,优化空间还很大)。
3、或者,因为你的内存都是一次申请知道最后才释放了,即使你把所有的东西都放到大内存块里,你最终消耗的内存都比零散申请要小。
4、检查一下是否有内存泄露,如果不是字典的特性问题,那么不排除你代码哪里写错了。
5、可以把数据存到文件里,反正你不涉及数据删除。
以上仅供参考,好久不练习算法了,手生,等高手给更好的信息 北极 1小时前 0条评论
其次,我可以给你几个思路:
1、你这个程序,耗内存的原因之一是指针太多,如果你的单词本里短单词太多的话,仅仅指针一项就消耗大量的内存,并且由于内存申请需要对齐,导致内存碎片特别多。
2、对于小规模的单词本,比如单词本小于1G的这种,你完全可以申请一个巨大的连续的内存块然后自己来维护内存并且把所有的单词都保存进去,不用链表而是用哈希索引,大概的结构是:
struct node {int num; char * ptr; int hash}; 其中ptr指向的就是大内存块的字符串,用哈希索引,速度不会太慢。(你可以进一步优化,我只帮你到这一步,优化空间还很大)。
3、或者,因为你的内存都是一次申请知道最后才释放了,即使你把所有的东西都放到大内存块里,你最终消耗的内存都比零散申请要小。
4、检查一下是否有内存泄露,如果不是字典的特性问题,那么不排除你代码哪里写错了。
5、可以把数据存到文件里,反正你不涉及数据删除。
以上仅供参考,好久不练习算法了,手生,等高手给更好的信息 北极 1小时前 0条评论
0 赞 0 踩
登录后可回答 提交回答
关键词 :
- 上一个:一个平凡二按照的英语专业女生,应有继续考研吗?
- 下一个:全日制大专毕业生如何获得研究生学历?
推荐资讯
点击排行