问题描述:
为两百万的客户在基于一百万的恐怖分子名单中计算其是恐怖分子的可能性有多大,做报表列出可能性较大的客户。
现在的具体做法是:把数据传到应用程序端,将两百万跟一百万一对一的通过规则计算匹配的可能性,如果达到某个匹配度(比如0.9)后,退出并进行下一个客户的计算。最坏的情况是:我必须计算2,000,000*1,000,000次,耗时巨大。也考虑过在数据库端实现,但是数据库单很难实现姓名的相似度计算,即使实现了,在数据查询中必须以function计算的结果做为联接条件,优化空间也很小,依然要运行很久很久,估计为两年:(。 请问大家有什么好的解决方案吗?谢谢!
数据库可以的,有多种算法可以计算相似度,然后根据给定的相似度权重匹配数据,比如将"IBM"和"International Business Machine"匹配;"J. Doe"和"Jane Doe"匹配等等
想办法把复杂度降下来。把O(N2)变成O(N)或者O(1)。
可以将一百万的恐怖分子的特征进行与运算。将其变成一个特征库,然后将2百万的客户与之进行匹配。
这样就降低了一百万倍的运算了。
中情局的?借走娟用一用,相信很快可以搞定!哈哈,玩笑
算吧,只要姓名相似度算法做得好,多开些线程,再找个处理速度快的机器应该也不会太慢,注意IO尽量减少
不光有速度问题还有逻辑问题。
我想现实情况是:
1、一个恐怖分子有可能与几个客户对应。Axx 对应有几个身份的客户(Axx,supperAxx....)
2、而一个客户对应几个恐怖分的情况不应该出现:因为是根据名字来算的就算这个客户帐号几个恐怖分子都能用(他们一起建了一个号~~)那也很难做几个人组合的匹配。。。
比如说Axx,Bxx,Cxx 一起用一个客户ABC或AxxBxxCxx。。。
你最后需要的应该是一个单子(每个客户名对应最有可能匹配的几个恐怖分子及匹配度)
同意West的做法。比匹配到0.9就退出的方法要严谨,不会丢掉匹配100%的~
只是一百万恐怖分子做成的特征库应该也不小,每次进行匹配计算的时间会增长。实际中肯定不会达到降低100万倍速的效果。
类似于搜索引擎,将恐怖分子名单建立一个索引文件。以每个客户的信息为搜索条件在这个索引中查找匹配的结果。
xuexi
。。。想想它的乘方就头大。。。好像不那么简单吧。。。。厉害!