问题描述
兴趣爱好有:音乐,爬山,上网,喝酒,读书,逛街,旅游比如一个人的兴趣爱好是:音乐,上网,读书有什么比较好的算法来匹配最接近这个人的兴趣爱好。比如:A君兴趣爱好是:上网,逛街,旅游B君兴趣爱好是:音乐,读书,喝酒那匹配出来的结果排序是B,A
解决方案
解决方案二:
解决方案三:
应该给爱好设置一个权重值然后根据爱好获取权重值,之后比对权重值就能得出相似度了
解决方案四:
用linq出动的话,Intersect就可以求出交集。交集就有大小了,就可以排序了嘛!
解决方案五:
每个人的兴趣都做一个数组然后计算2个数组的交集判断数组长度就知道相似度了。给个方法#region计算两个字符串数组之间交集或差集///<summary>///计算两个数组之间交集或差集///</summary>///<paramname="arrA">数组A</param>///<paramname="arrB">数组B</param>///<paramname="IntersectionOrExcept">要返回交集还是差集(0:交集,1:差集)</param>///<returns>返回数组中是数组A里的元素</returns>staticpublicstring[]ReturnIntersectionOrExcept(string[]arrA,string[]arrB,intIntersectionOrExcept){ArrayListarrC=newArrayList();boolFlag=false;//是否相等标识if(arrA.Length>0){if(IntersectionOrExcept==0)//交集{for(inti=0;i<arrA.Length;i++){for(intj=0;j<arrB.Length;j++){if(arrA[i]==arrB[j]){arrC.Add(arrA[i]);break;}}}}elseif(IntersectionOrExcept==1)//差集{for(inti=0;i<arrA.Length;i++){for(intj=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
解决方案八:
用二维数组,第一维是序号,第二维是爱好名那样就简单了
解决方案九:
冇识,路过顶下↑↑↑