相识度算法

xiangzaopao 2011-12-01 07:21:31
兴趣爱好有:音乐,爬山,上网,喝酒,读书,逛街,旅游

比如一个人的兴趣爱好是:音乐,上网,读书
有什么比较好的算法来匹配最接近这个人的兴趣爱好。

比如:A君兴趣爱好是:上网,逛街,旅游
B君兴趣爱好是:音乐,读书,喝酒

那匹配出来的结果排序是 B,A
...全文
181 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZHUKY 2011-12-02
  • 打赏
  • 举报
回复
冇识,路过顶下↑↑↑
c02645 2011-12-02
  • 打赏
  • 举报
回复
用二维数组,第一维是序号,第二维是爱好名
那样就简单了
a157147899 2011-12-02
  • 打赏
  • 举报
回复
来个牛叉的 呵呵
http://www.cnblogs.com/ivanyb/archive/2011/11/25/2263356.html
a157147899 2011-12-02
  • 打赏
  • 举报
回复
这个是以前写的

可以把 数组 换成Dictionary 提高一下性能
a157147899 2011-12-02
  • 打赏
  • 举报
回复
每个人的兴趣都做一个数组 然后计算 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
winner2050 2011-12-02
  • 打赏
  • 举报
回复
用linq出动的话,Intersect 就可以求出交集。
交集就有大小了,就可以排序了嘛!
阿非 2011-12-02
  • 打赏
  • 举报
回复
应该给爱好设置一个权重值

然后根据爱好获取权重值,之后比对权重值就能得出相似度了
CalvinR 2011-12-02
  • 打赏
  • 举报
回复

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧