2006年09月11日 星期一 22:56
ÛiÿùÞÁǧ¶êòr©º×«²wþèç-³úÛ¶·Ù¥~º&D;ëy覦íDârئ¦í©Ý¢ih« z¹hÊ'²^´A'-ÊÊÚÚ&©Ý¢g诧©à{]4ÓG诧쬼
2006年09月12日 星期二 07:34
在 06-9-11,LianQiao<lianqiao at gmail.com> 写道: > BTW: vc7自带stl的hash实现是很蠢,不过python得好像还可以。 你研究过vc7的STL源码吗?你凭什么说它的实现蠢?你以为你比P.J牛多少倍啊?有本事你写个STL该叫微软使用。不过我倒承认,STL里面的string的确有点……难怪有那么多的开源软件比如clucene都不使用它。
2006年09月12日 星期二 14:22
试着从大文件每次读入一个记录,比如一行就是一个记录吧?...。然后对每一个记录做一次哈西取值。就是用hash()函数,这样返回一个整数值。小文件同样用这种方法,得到所有记录内容的哈希值。然后再对所得的哈希值排序。这样再使用二分查找,速度就很快了。整个查找过程只需要各遍历大文件和小文件一次。另外,也许存储哈希值的表格也不小,内存上注意一点,或者干脆把获得的哈希值存储到另外一个随机文件/数据库中。 注意,这里的哈希值并不是哈西函数,两者有很大的区别。哈希值可以理解为报文摘要,通过一个很小的数字就可以区别出各个报文之间的区别。 当然,两个不同的记录拥有相同的哈希值还是有可能的,所以你只要用这个哈希值作为哈希表的键名,再用记录的文件指针位置作为哈希表的值,存储一下,这样一旦发现两个相同的键名出现,就可以直接查找文件中的对应记录,看看是否相同了。 哈西函数可以对原报文的一点点改变都做出很大的不同,如下的两个例子: C:\Documents and Settings\harry>python ActivePython 2.4.3 Build 12 (ActiveState Software Inc.) based on Python 2.4.3 (#69, Apr 11 2006, 15:32:42) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> a='ajeigjaew' >>> hash(a) -218920356 >>> a='aaabbb' >>> b='aaabbb' >>> c='aaaabb' >>> hash(a) -1590267375 >>> hash(b) -1590267375 >>> hash(c) 509872510 >>> -- 从前有一只很冷的毛毛虫,他想获得一点温暖。而获得温暖的机会只有从树上掉下来,落进别人的领口。 片刻的温暖,之后便失去生命。而很多同类却连这片刻的温暖都没有得到就.. 我会得到温暖么?小心翼翼的尝试,却还是会受到伤害。 我愿为那一刻的温暖去拼,可是谁愿意接受? 欢迎访问偶的博客: http://blog.csdn.net/gashero
Zeuux © 2025
京ICP备05028076号