用c# 采用BIT-map 方式,从一堆数据中,找出不重复的

本文介绍了如何利用Bit-Map算法优化数据存储与操作效率,并通过C#代码实例展示了实现过程。重点阐述了如何在数组中使用位运算进行数据设置与获取,以及如何通过位图快速查找只出现过一次的数。




采用的是bit-map算法,关于什么是bit-map,百度一下;

直接上一段代码,用C#改写的!

如下:

 class Program
    {
        private static int[] flags = new int[1000000];
        private static DateTime starttime = new DateTime();
        private static int  get_val( int idx)
        {
            int i = idx/4;
            int j = idx%4;
            int ret = (flags[i]&(0x3<<(2*j)))>>(2*j);  
  
            return ret;
        }


        private static int set_val(int idx,int val) 
        {
            int i = idx / 4;
            int j = idx % 4;
            int tmp = (flags[i] & ~((0x3 << (2 * j)) & 0xff)) | (((val % 4) << (2 * j)) & 0xff);
            flags[i] = tmp;
            return 0;
        }


        private static int add_one(int idx)
        {
            if (get_val(idx) >=2 )
            {
                return 1;
            }
            else
            {
                set_val(idx,get_val(idx)+1);
                return 0;
            }
        }


        
        static void Main(string[] args)
        {
            int[] value={10,5,392,49,24,0,95,20,9098,20340,900934,290390,5,95,20340,29039,5};
            Console.WriteLine("原数组!");
            foreach (int item in value)
            {
                Console.Write(item+" ");
                add_one(item);
            }
            Console.WriteLine("\n\n只出现过一次的数是:");
            starttime = DateTime.Now;
            for (int i = 0; i < 1000000; ++i)
            {
                if (get_val(i)==1)
                {
                    Console.WriteLine(i);
                }
            }
            string processTimet = ExecDateDiff(starttime, DateTime.Now);
            Console.WriteLine("共用时{0}",processTimet);
             


            Console.Read();
        }
        /// <summary>
        /// 计算两个时间之间的差值。
        /// </summary>
        /// <param name="dateBegin"></param>
        /// <param name="dateEnd"></param>
        /// <returns></returns>
        public static string ExecDateDiff(DateTime dateBegin, DateTime dateEnd)
        {
            TimeSpan ts1 = new TimeSpan(dateBegin.Ticks);
            TimeSpan ts2 = new TimeSpan(dateEnd.Ticks);
            TimeSpan ts3 = ts1.Subtract(ts2).Duration();
            //你想转的格式
            return ts3.TotalMilliseconds.ToString() + "毫秒";
        }
    }



运行结果如下:



【最优潮流】直流最优潮流(OPF)课设(Matlab代码实现)内容概要:本文档主要围绕“直流最优潮流(OPF)课设”的Matlab代码实现展开,属于电力系统优化领域的教学与科研实践内容。文档介绍了通过Matlab进行电力系统最优潮流计算的基本原理与编程实现方法,重点聚焦于直流最优潮流模型的构建与求解过程,适用于课程设计或科研入门实践。文中提及使用YALMIP等优化工具包进行建模,并提供了相关资源下载链接,便于读者复现与学习。此外,文档还列举了大量与电力系统、智能优化算法、机器学习、路径规划等相关的Matlab仿真案例,体现出其服务于科研仿真辅导的综合性平台性质。; 适合人群:电气工程、自动化、电力系统及相关专业的本科生、研究生,以及从事电力系统优化、智能算法应用研究的科研人员。; 使用场景及目标:①掌握直流最优潮流的基本原理与Matlab实现方法;②完成课程设计或科研项目中的电力系统优化任务;③借助提供的丰富案例资源,拓展在智能优化、状态估计、微电网调度等方向的研究思路与技术手段。; 阅读建议:建议读者结合文档中提供的网盘资源,下载完整代码与工具包,边学习理论边动手实践。重点关注YALMIP工具的使用方法,并通过复现文中提到的多个案例,加深对电力系统优化问题建模与求解的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值