复杂的应用(算法相关) 
有这么一个表 a(username, firstname,secondname, email, address, time, code,country, state) 
现在要找出近似度比较高的用户, 从接到这个case发现有史以来难度最大的sql,直觉就是一个算法问题。 当前的近似度如下 
username  20 
firstname   
secondname   (firstname和secondname联合20) 
email   20  
address  20  
time    0 
code    10 
country   8 
state    2 
这是近似度指标值, 例如几个用户如果username都相同,那么这个几个用户都得到20分。如果还是这几个用户的firstname和secondname也都相同,那么他们继续得到20分。如果state都同再得2分。 
下面给一个例子 
  分数  username, firstname,secondname, email,      address, time, code,country,  state 
1 100  li        li        hai      [email protected]  aaa            1    china    shanghai 
2  90    li        li        hai      [email protected]  aaa            2    china    shanghai 
3  58    li        li        long      [email protected]    aa            1    china      beijing 
4  50      li        li        hai      [email protected]  b              1    England    london 
这个例子是我结合需求实现的, 就是将这几个分成一组,id=1 可以看到他的所有值都能在同组记录里找到重复值。 
id=2的code=2是在这个组里是找不到的哦,所以减去10分得到90分。 
id=3的firstname和secondname联合在这个组里是无法找到重复值,所以先去20分,address再减去20,state再减去2分,最后58; 
id=4的同理得到50分。 这个表当前几万条记录,首先必须确定分组标准。 (这个标准如何定,算法总体如何设计??) 
之后如何实现,开始准备用sql,后来改用临时表存储过程。(实际情况更复杂,是多表关联,我这里大大简化问题)。 
还是没有头绪??

解决方案 »

  1.   

    解决这个问题我会先把这个表排序,用最关注的信息比如邮箱做主排序,次要关注的做次要排序,之后再次要排序……。遍历出重复最多的邮箱,之后再在这个邮箱的范围内再遍历出次要值重复较多的,之后再缩小范围……
    结果就出来了,迭代的时候用Map计数,key=变量,value=出现次数。
    不知道实际数据情况,不知道可不可行
      

  2.   

    与我的思路接近, 早上用聚类算法累得要命,还不能看到结果
    现在想明白了,这个应用关键看到结果(网上速度有一定要求)。
    所以现在我决定不用算法  , 用sql + java 代码来实现。楼上“遍历出重复最多的邮箱,之后再在这个邮箱的范围内再遍历出次要值重复较多的,之后再缩小范围…… 
    结果就出来了,迭代的时候用Map计数,key=变量,value=出现次数。”---提供新的思路
    非常感谢现在发现数学+算法是很重要的