超大文件创建索引问题

lg_asus 2012-02-11 10:00:54
题目:假如有一个1TB大小的文件,每行的格式如下:
323828328,李武,男,广州市
323232332,小四,女,三藩市
.....
(1)请编写一个程序(假设名字是不重复的),得到一个索引文件,并且要保证这个索引文件尽量小,前提是内存只有1G的大小。
(2)请利用你的所得到的索引的文件,根据名字(假设名字是不重复的)搜索出该名字所对应的信息

...全文
332 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
boxer_tony 2012-03-02
  • 打赏
  • 举报
回复
如果一行的内容就是如下的话“323828328,李武,男,广州市”
那么1TB内容的东西里面,光存储名字就要上百个GB,一个索引文件能解决问题吗?
showjim 2012-02-16
  • 打赏
  • 举报
回复
索引文件尽量小 有什么意义?
lg_asus 2012-02-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 just_swizard 的回复:]

构建一个字典树作为索引,把树保存到文件就是索引文件了
[/Quote]

看了trie树,但不知道如何保存,可以详细说下保存后的文件格式吗?
just_swizard 2012-02-16
  • 打赏
  • 举报
回复
构建一个字典树作为索引,把树保存到文件就是索引文件了
foreverlin1204 2012-02-15
  • 打赏
  • 举报
回复
利用名字的特性,构造一颗汉语字典树,字典树请问度娘,为提高内存利用率,兄弟节点均采用hash_map来映射,考虑到中文名字的特殊性,实际该树的高度<=3且常用字不超过2000,于是名字中字的重复率是很高的,那么最终树中每个节点可广义上看成是一个二维配对pair,$1代表当前名字在字典中的状态(可以理解为常用字典中第几页第几行),$2代表该名字在文件中的所在行所对应的磁盘物理偏移,理论内存不超过2^32*2.5*2 实际远远小于这个数字,(例小李,小王,实际只存了小,李,王)
cnmhx 2012-02-15
  • 打赏
  • 举报
回复
构造一个由姓名按位运算计算出的地址决定的一系列文件和文件记录。
将姓名转化为一个不重复的2^31(31字节,甚至更大)的整数(这个方法有很多,有的效率很高的)。
然后按照姓名对应的整数,按照位运算法则,直接得到生成两个整数。
其中前一个由高位字节产生——用于生成一系列文件的标识——文件名。
第二个整数由余下的低位字节生成——用于标识该姓名在指定的文件中的记录位置。
lg_asus 2012-02-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kamo54 的回复:]

名字不重复的话,按名字排序,省去相同字节后索引文件最小。
[/Quote]

按名字排序?文件太大,怎么可能排序?

后面那句没看懂什么意思,请详细说下
网迷 2012-02-13
  • 打赏
  • 举报
回复
名字不重复的话,按名字排序,省去相同字节后索引文件最小。
lg_asus 2012-02-11
  • 打赏
  • 举报
回复
我想到方法:
按姓氏创建多个索引文件,索引文件中的内容是 姓氏 前面内容的字节数
在搜索姓名的时候,根据姓去相应的索引文件中找,得到字节数,然后去那个大文件中直接跳过这些字节数,得到相应的那一行数据

另外问下:汉字的Unicode码是不是按汉字的首字母来分类的,如卫 未 魏 这些字的Unicode码是不是在一起的?

33,008

社区成员

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

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