我4年前做SP的时候,那时候需要过滤一些手机号码的黑名单,黑名单包括手机号码段,手机号码,黑名单大慨有300多万,过滤500多万的号码,包括了从文件载入和过滤后写入文件,只用了近10秒的时间,减去载入和写入IO的时间,过滤只需不到1秒的时候,过滤手机号码是当手机号码在黑名单中过滤掉,如果号码在黑名单的号码段中也被过滤掉,那时其他的同行是用数据库去过滤的,过滤这种数量的黑名单都要几个小时的时间
例如黑名单中包括
13560374
135603111
13570966914
13570961914
13570962914
待过滤的号码有
13560374123
13560374124
13560374125
13560311111
13560311112
13570966914
13570961914
13570962914
13570962915
13570962916
被过滤后的号码
13570962915
13570962916大家发表一下算法
例如黑名单中包括
13560374
135603111
13570966914
13570961914
13570962914
待过滤的号码有
13560374123
13560374124
13560374125
13560311111
13560311112
13570966914
13570961914
13570962914
13570962915
13570962916
被过滤后的号码
13570962915
13570962916大家发表一下算法
int形储存不了11位长的数字,你用的ht5应该是指待过滤的表吧,因为待过滤的号码都是11位的,因为是手机号码,所以"遍历ht5将ht1包含号码段的移除",这就是多余的了,因为ht1里的是8位的,ht5都是11位,这里不可能有任何一个是相同的,
"然后ht2、ht3(用比较大小的方法:比如8位就*1000补足11位和ht5比较)",这里不能够用单单大小比较的方法,例如号码
13560471
补充11位为135604710000
跟135604710001比较是对的但135604720000用你的方法比较就会得到错的还有一点,需说黑名单中有号码段,但大部分黑名单肯定是号码,即11位,8到10位的只是少数,可能有几个位左右吧