相识度算法
兴趣爱好有:音乐,爬山,上网,喝酒,读书,逛街,旅游比如一个人的兴趣爱好是:音乐,上网,读书
有什么比较好的算法来匹配最接近这个人的兴趣爱好。
比如:A君兴趣爱好是:上网,逛街,旅游
B君兴趣爱好是:音乐,读书,喝酒
那匹配出来的结果排序是 B,A --------------------编程问答-------------------- --------------------编程问答-------------------- 应该给爱好设置一个权重值
然后根据爱好获取权重值,之后比对权重值就能得出相似度了 --------------------编程问答-------------------- 用linq出动的话,Intersect 就可以求出交集。
交集就有大小了,就可以排序了嘛! --------------------编程问答-------------------- 每个人的兴趣都做一个数组 然后计算 2个数组的交集 判断数组长度 就知道相似度了。
给个方法
--------------------编程问答-------------------- 这个是以前写的
#region 计算两个字符串数组之间交集或差集
/// <summary>
/// 计算两个数组之间交集或差集
/// </summary>
/// <param name="arrA">数组A</param>
/// <param name="arrB">数组B</param>
/// <param name="IntersectionOrExcept">要返回交集还是差集(0:交集,1:差集)</param>
/// <returns>返回数组中是数组A里的元素</returns>
static public string[] ReturnIntersectionOrExcept(string[] arrA, string[] arrB, int IntersectionOrExcept)
{
ArrayList arrC = new ArrayList();
bool Flag = false;//是否相等标识
if (arrA.Length > 0)
{
if (IntersectionOrExcept == 0)//交集
{
for (int i = 0; i < arrA.Length; i++)
{
for (int j = 0; j < arrB.Length; j++)
{
if (arrA[i] == arrB[j])
{
arrC.Add(arrA[i]);
break;
}
}
}
}
else if (IntersectionOrExcept == 1)//差集
{
for (int i = 0; i < arrA.Length; i++)
{
for (int j = 0; j < arrB.Length; j++)
{
if (arrA[i] == arrB[j])
{
Flag = true;
break;
}
else
{
Flag = false;
}
}
if (!Flag)
{
arrC.Add(arrA[i]);
}
}
}
}
return (string[])arrC.ToArray(typeof(String));
}
#endregion
可以把 数组 换成Dictionary 提高一下性能 --------------------编程问答-------------------- 来个牛叉的 呵呵
http://www.cnblogs.com/ivanyb/archive/2011/11/25/2263356.html
--------------------编程问答-------------------- 用二维数组,第一维是序号,第二维是爱好名
那样就简单了 --------------------编程问答-------------------- 冇识,路过顶下↑↑↑
补充:.NET技术 , ASP.NET