复杂的应用(算法相关)
有这么一个表 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,后来改用临时表存储过程。(实际情况更复杂,是多表关联,我这里大大简化问题)。
还是没有头绪??
有这么一个表 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,后来改用临时表存储过程。(实际情况更复杂,是多表关联,我这里大大简化问题)。
还是没有头绪??
结果就出来了,迭代的时候用Map计数,key=变量,value=出现次数。
不知道实际数据情况,不知道可不可行
现在想明白了,这个应用关键看到结果(网上速度有一定要求)。
所以现在我决定不用算法 , 用sql + java 代码来实现。楼上“遍历出重复最多的邮箱,之后再在这个邮箱的范围内再遍历出次要值重复较多的,之后再缩小范围……
结果就出来了,迭代的时候用Map计数,key=变量,value=出现次数。”---提供新的思路
非常感谢现在发现数学+算法是很重要的