18 个解决方案
#1
没有内存是有限制,我可直接往内存里装了 =w=b
#2
和硬件有关,这个竞赛开展不起来
#3
用哈希表如何处理冲撞的?
#4
可惜我的内存只有1G 估计光IO就是瓶颈
直接每行md5算了
直接每行md5算了
#5
要用哈希表处理这个问题,不考虑冲撞根本就不能保证结果的准确性。md5还不一样是哈希,只不过冲撞几率小点。
#6
可以专门建一个哈希表的文件
比如 每行都这样的格式
开始位置 结束位置 md5值
然后排下序,把相同部分读原文件直接比较
比如 每行都这样的格式
开始位置 结束位置 md5值
然后排下序,把相同部分读原文件直接比较
#7
......冲撞处理呢?
#8
hash处理的话,俺怎么认为可以忽略hash的时间,只认为: 处理时间 = 读文件的时间N + N * 0.01
过滤完,再写入到另一文件,就要费点时间了。
过滤完,再写入到另一文件,就要费点时间了。
#9
hash冲突的话你得回头,当然如果都装内存里这个问题就不大了。可另一方面如果内存够大,trie没什么特殊情况会比hash快不少。
#10
有没有人可以提供一个效率高点的代码啊,也让大家学习一下。除了哈希表还有什么好的办法吗》如果内存有限制的话,又该怎么办呢
#11
不是说不能用哈希表,而是使用哈希表就必须考虑冲撞处理。不考虑冲撞处理得出的结果是不可信的。此外,你没有具体描述文件的情况,也就不可能选择适合的哈希函数来完成这个任务。所以我认为你那半小时的计算做的只是无用功。
仅仅简单的说句:“内容随机”是不够的。文件中包含哪些字符?英文的还是中文的?仅仅常用字符还是带有其它字符?词汇量多还是少?重复行出现频繁吗?大致会占据多少比例?
想要得到优化的结果,没这些信息是无法做到的。软件开发并不是简单的学会语言和算法,需要了解的知识还有很多很多。
仅仅简单的说句:“内容随机”是不够的。文件中包含哪些字符?英文的还是中文的?仅仅常用字符还是带有其它字符?词汇量多还是少?重复行出现频繁吗?大致会占据多少比例?
想要得到优化的结果,没这些信息是无法做到的。软件开发并不是简单的学会语言和算法,需要了解的知识还有很多很多。
#12
我做的思路是读一行字符串,然后通过哈希函数计算出关键值,这样遍历一遍,没有考虑冲突,全部计算。然后是根据关键值进行排序,最后遍历一遍把关键值相等的用strcmp比较一样的则删除。这样效率确实很低,但不知道怎么用哈希表快速删除重复的行。
#13
文本内容有汉字,字母,数字,标点
#14
哈西表正好不适合干这事......哈希值不等那倒是没问题,一相等了哈希算法的毛病就钻出来了。
#15
那要删除一个文件中重复的行,应该怎么办呢。总不能第一句和之后的句子比较,然后再第二句和之后的比较吧。大神有什么好的方法吗
#16
要快很简单,别局限于比较,比较只是一部分,其他比如文本加载,信息记录等都有速度提升的空间
#17
英文的话还好想办法,汉字就比较麻烦了。汉字信息量太大了。
#18
如果重复行非常少的话也可以用哈希表来加速,选择冲撞率尽量小的哈希函数就好了。冲撞低了处理起来也就快。
如果词汇量很小的话选择trie就会很快,但要是词汇量太大内存就装不下了。
如果词汇量很小的话选择trie就会很快,但要是词汇量太大内存就装不下了。
#1
没有内存是有限制,我可直接往内存里装了 =w=b
#2
和硬件有关,这个竞赛开展不起来
#3
用哈希表如何处理冲撞的?
#4
可惜我的内存只有1G 估计光IO就是瓶颈
直接每行md5算了
直接每行md5算了
#5
要用哈希表处理这个问题,不考虑冲撞根本就不能保证结果的准确性。md5还不一样是哈希,只不过冲撞几率小点。
#6
可以专门建一个哈希表的文件
比如 每行都这样的格式
开始位置 结束位置 md5值
然后排下序,把相同部分读原文件直接比较
比如 每行都这样的格式
开始位置 结束位置 md5值
然后排下序,把相同部分读原文件直接比较
#7
......冲撞处理呢?
#8
hash处理的话,俺怎么认为可以忽略hash的时间,只认为: 处理时间 = 读文件的时间N + N * 0.01
过滤完,再写入到另一文件,就要费点时间了。
过滤完,再写入到另一文件,就要费点时间了。
#9
hash冲突的话你得回头,当然如果都装内存里这个问题就不大了。可另一方面如果内存够大,trie没什么特殊情况会比hash快不少。
#10
有没有人可以提供一个效率高点的代码啊,也让大家学习一下。除了哈希表还有什么好的办法吗》如果内存有限制的话,又该怎么办呢
#11
不是说不能用哈希表,而是使用哈希表就必须考虑冲撞处理。不考虑冲撞处理得出的结果是不可信的。此外,你没有具体描述文件的情况,也就不可能选择适合的哈希函数来完成这个任务。所以我认为你那半小时的计算做的只是无用功。
仅仅简单的说句:“内容随机”是不够的。文件中包含哪些字符?英文的还是中文的?仅仅常用字符还是带有其它字符?词汇量多还是少?重复行出现频繁吗?大致会占据多少比例?
想要得到优化的结果,没这些信息是无法做到的。软件开发并不是简单的学会语言和算法,需要了解的知识还有很多很多。
仅仅简单的说句:“内容随机”是不够的。文件中包含哪些字符?英文的还是中文的?仅仅常用字符还是带有其它字符?词汇量多还是少?重复行出现频繁吗?大致会占据多少比例?
想要得到优化的结果,没这些信息是无法做到的。软件开发并不是简单的学会语言和算法,需要了解的知识还有很多很多。
#12
我做的思路是读一行字符串,然后通过哈希函数计算出关键值,这样遍历一遍,没有考虑冲突,全部计算。然后是根据关键值进行排序,最后遍历一遍把关键值相等的用strcmp比较一样的则删除。这样效率确实很低,但不知道怎么用哈希表快速删除重复的行。
#13
文本内容有汉字,字母,数字,标点
#14
哈西表正好不适合干这事......哈希值不等那倒是没问题,一相等了哈希算法的毛病就钻出来了。
#15
那要删除一个文件中重复的行,应该怎么办呢。总不能第一句和之后的句子比较,然后再第二句和之后的比较吧。大神有什么好的方法吗
#16
要快很简单,别局限于比较,比较只是一部分,其他比如文本加载,信息记录等都有速度提升的空间
#17
英文的话还好想办法,汉字就比较麻烦了。汉字信息量太大了。
#18
如果重复行非常少的话也可以用哈希表来加速,选择冲撞率尽量小的哈希函数就好了。冲撞低了处理起来也就快。
如果词汇量很小的话选择trie就会很快,但要是词汇量太大内存就装不下了。
如果词汇量很小的话选择trie就会很快,但要是词汇量太大内存就装不下了。