代码改变世界

位图求交集

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;
        }

 

Test

 

View Code 

 

两个时间差不多,1000000 数据 非排序的性能还要略微好点,都是40-50毫秒左右,性能至于最大的值有关,与每个数组的长度没关系