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

两个求字符串集合并集大小的算法的效率比较问题!

        /// <summary>
        /// 求两个集合并集的大小
        /// </summary>
        /// <param name="setA">集合A</param>
        /// <param name="setB">集合B</param>
        /// <returns>集合setA与集合setB并集的大小</returns>
        private int UnionSetSize(List<string> setA, List<string> setB)
        {
            int retUnionSize = 0;
            setA.AddRange(setB);
            setA.Sort();
            for (int index = 1; index < setA.Count; index++)
            {
                if (setA[index] == setA[index - 1])
                {
                    retUnionSize = retUnionSize + 1;
                }
            }
            return retUnionSize;
        }

        /// <summary>
        /// 求两个集合并集的大小
        /// </summary>
        /// <param name="setA">集合A</param>
        /// <param name="setB">集合B</param>
        /// <returns>集合setA与集合setB并集的大小</returns>
        private int UnionSetSize(List<string> setA, List<string> setB)
        {
            int retUnionSetSize = 0;
            foreach (string tmpElem in setA)
            {
                if (setB.Contains(tmpElem))
                {
                    retUnionSetSize = retUnionSetSize + 1;
                }
            }
            return retUnionSetSize + 1;
        }

为什么第二个算法会比第一个算法还要快?
C#2.0里面没有Union,顺便请教下C#2.0下实现该功能的高效算法,或C#3.0中List.Union的实现方法! --------------------编程问答-------------------- 这个是并集的大小?怎么感觉是交集啊... --------------------编程问答-------------------- 这个是并集的大小?怎么感觉是交集啊... --------------------编程问答-------------------- setA.Sort();排序的过程就有循环比较了,而且排序直接有AddRange操作,
所以慢,还不如直接写两层循环快


 /// <summary>
  /// 求两个集合并集的大小
  /// </summary>
  /// <param name="setA">集合A</param>
  /// <param name="setB">集合B</param>
  /// <returns>集合setA与集合setB并集的大小</returns>
  private int UnionSetSize(List<string> setA, List<string> setB)
  {
  int retUnionSetSize = 0;
  foreach (string tmpElem in setA)
  {
    foreach(string tmpB in setB)
    {
      if (tmpB == tmpElem)
      {
       retUnionSetSize = retUnionSetSize + 1;
      }
    }
  }
  return retUnionSetSize + 1;
  }

--------------------编程问答-------------------- LINQ Intersect(交集),Except(差集). 
stringp[ arr= A.Except(B).ToArray();
--------------------编程问答--------------------
  private int UnionSetSize(List<string> setA, List<string> setB)
  {
  int retUnionSize = 0;
  setA.AddRange(setB);
  return setA.Distinct().Count();
  }
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,