两个求字符串集合并集大小的算法的效率比较问题!
/// <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#