位图求交集
2012-04-26 23:00 yuejianjun 阅读(426) 评论(4) 编辑 收藏 举报位图求交集
View Code
public class 位图求交集
{
/// <summary>
/// 排序数组
/// </summary>
/// <param name="list">排序数组</param>
/// <param name="MaxNumber"></param>
/// <returns></returns>
public static List<int> BitList(List<List<int>> list)
{
int count=list.Count;
int minInt = 0, maxInt = 0;
for (int i = 0; i < list.Count; i++)
{
minInt = minInt < list[i][0] ? minInt : list[i][0];
maxInt = maxInt > list[i][list[i].Count - 1] ? maxInt : list[i][list[i].Count - 1];
}
List<int> result = new List<int>();
int[] DataForStore = new int[maxInt+1];
for (int i = 0; i < list.Count; i++)
{
for (int j = 0; j < list[i].Count; j++)
{
DataForStore[list[i][j]]++;
}
}
for (int m = minInt; m < DataForStore.Length; m++)
{
if (DataForStore[m] == count)
{
result.Add(m);
}
}
return result;
}
/// <summary>
/// 非排序数组
/// </summary>
/// <param name="list">非排序数组</param>
/// <param name="MaxNumber"></param>
/// <returns></returns>
public static List<int> BitList(List<List<int>> list, int MaxNumber)
{
List<int> result = new List<int>();
int[] DataForStore = new int[MaxNumber];
for (int i = 0; i < list.Count; i++)
{
for (int j = 0; j < list[i].Count; j++)
{
DataForStore[list[i][j]]++;
}
}
int length = list.Count;
for (int m = 0; m < DataForStore.Length; m++)
{
if (DataForStore[m] == length)
{
result.Add(m);
}
}
return result;
}
{
/// <summary>
/// 排序数组
/// </summary>
/// <param name="list">排序数组</param>
/// <param name="MaxNumber"></param>
/// <returns></returns>
public static List<int> BitList(List<List<int>> list)
{
int count=list.Count;
int minInt = 0, maxInt = 0;
for (int i = 0; i < list.Count; i++)
{
minInt = minInt < list[i][0] ? minInt : list[i][0];
maxInt = maxInt > list[i][list[i].Count - 1] ? maxInt : list[i][list[i].Count - 1];
}
List<int> result = new List<int>();
int[] DataForStore = new int[maxInt+1];
for (int i = 0; i < list.Count; i++)
{
for (int j = 0; j < list[i].Count; j++)
{
DataForStore[list[i][j]]++;
}
}
for (int m = minInt; m < DataForStore.Length; m++)
{
if (DataForStore[m] == count)
{
result.Add(m);
}
}
return result;
}
/// <summary>
/// 非排序数组
/// </summary>
/// <param name="list">非排序数组</param>
/// <param name="MaxNumber"></param>
/// <returns></returns>
public static List<int> BitList(List<List<int>> list, int MaxNumber)
{
List<int> result = new List<int>();
int[] DataForStore = new int[MaxNumber];
for (int i = 0; i < list.Count; i++)
{
for (int j = 0; j < list[i].Count; j++)
{
DataForStore[list[i][j]]++;
}
}
int length = list.Count;
for (int m = 0; m < DataForStore.Length; m++)
{
if (DataForStore[m] == length)
{
result.Add(m);
}
}
return result;
}
Test
View Code
两个时间差不多,1000000 数据 非排序的性能还要略微好点,都是40-50毫秒左右,性能至于最大的值有关,与每个数组的长度没关系