当前位置:编程学习 > C#/ASP.NET >>

相识度算法

兴趣爱好有:音乐,爬山,上网,喝酒,读书,逛街,旅游

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

比如: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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,