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

kuangyedehuhuan 2010-07-20 11:09:01
/// <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的实现方法!
...全文
104 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wxm3630478 2010-07-20

private int UnionSetSize(List<string> setA, List<string> setB)
{
int retUnionSize = 0;
setA.AddRange(setB);
return setA.Distinct().Count();
}
回复
wuyq11 2010-07-20
LINQ Intersect(交集),Except(差集).
stringp[ arr= A.Except(B).ToArray();
回复
gxingmin 2010-07-20
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;
}

回复
Peter200694013 2010-07-20
这个是并集的大小?怎么感觉是交集啊...
回复
Peter200694013 2010-07-20
这个是并集的大小?怎么感觉是交集啊...
回复
相关推荐
发帖
C#
创建于2007-09-28

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2010-07-20 11:09
社区公告

让您成为最强悍的C#开发者