《编程之美》读书笔记-1.5快速找出机器故障

题目:假设一个机器只存储一个标号为ID的记录,假设每份数据保存2个备份,这样就有2个机器存储了相同的数据。其中ID是小于10亿的整数

问题1、在某个时间,如果得到一个数据文件ID的列表。是否能够快速的找到这个表中仅出现一次的ID?即快速找出出现故障的机器存储的数据ID。

问题2、如果有两台机器死机呢?(假设同一个数据的俩个备份不会同时丢失,即列表中缺少的是两个不等的ID)

---------------------------------------------------------------------------------------------------------------------

一份数据拥有一个独一无二的ID,备份数据的ID与原始数据的ID相同,备份数据与原始数据存储在不同的机器上。文件列表中的ID包含了两个机器的信息,所以如果某个机器坏掉,文件列表当中这存在一个关于数据的ID



对于问题1,最直观的方法就是遍历文件列表,技术每一个数据文件出现的次数。此时时间复杂度为O(n),由于要存储每一个ID的计数信息所以空间复杂度也为O(n)。


       优化程序一般从时间复杂度和空间复杂度来考虑,很显然本题的时间复杂度没法再优化,只能尽可能优化空间复杂度。所以可以考虑用动态数组的方法,当遍历数据列表时,如果ID不在数组中就添加进去,如果数组中已存在对应的ID则从数组中删除相应的ID。这样空间复杂度就相应的减少了。这样就可以找出所有丢失的ID


      假设只有一个ID丢失,现在想要从中找出丢失的ID,利用异或方法(x^x=0,x^0=x,x^y=0),因为对应其他的ID数组中都有两个相同的值,异或运算满足交换律,结合律,所以对数组中的所有的ID进行异或运算,相同的ID异或后为0,则最后剩下的就是丢失的ID。

   

public static void second()
	{
		int[]  id = {1,2,3,1,2};
		int result = 0;
		for(int i = 0;i < id.length;i++)
		{
			result = result^id[i];
		}
		System.out.print(result);
	}
当有两个不同的ID丢失后,如何才能分别这两个ID,因为所有的ID异或之后得到的数是这两个丢失的ID异或而得到的。设x,y分别为丢失的ID,x与y异或的得到z(X^Y=Z),根据 Z的二进制表示从右到左第一个为1的位置b将所有的ID分成两类,一类为b位为1的一类为b位为0的,然后对两个类进行异或,得到x,y

//找出数组中仅出现一次的两个数
	public static void thrid()
	{
		int[]  id = {1,2,3,4,5,7,1,2,3,4};
		int result = 0;
		for(int i = 0;i < id.length;i++)
		{
			result = result^id[i];
		}
		int temp = result&1;
		int count = 0;
		while(temp == 0)
		{
			count++;
			result = result>>1;
		    temp = result&1;
		}		
		int i=0,j=0;
		for(int k = 0;k<id.length;k++)
		{
			int ptr = id[k]>>count;
		    if((ptr&1) == 0)
		    {
		    	i = i^id[k];
		    }
		    else
		    {
		    	j = j^id[k];
		    }
		}
		System.out.println(i);
		System.out.println(j);	
	}




考虑可再生能源出力不确定性的商业园区用户需求响应策略(Matlab代码实现)内容概要:本文围绕“考虑可再生能源出力不确定性的商业园区用户需求响应策略”展开,结合Matlab代码实现,研究在可再生能源(如风电、光伏)出力具有不确定性的背景下,商业园区如何制定有效的需求响应策略以优化能源调度和提升系统经济性。文中可能涉及不确定性建模(如场景生成与缩减)、优化模型构建(如随机规划、鲁棒优化)以及需求响应机制设计(如价格型、激励型),并通过Matlab仿真验证所提策略的有效性。此外,文档还列举了大量相关的电力系统、综合能源系统优化调度案例与代码资源,涵盖微电网调度、储能配置、负荷预测等多个方向,形成一个完整的科研支持体系。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及从事能源系统规划与运行的工程技术人员。; 使用场景及目标:①学习如何建模可再生能源的不确定性并应用于需求响应优化;②掌握使用Matlab进行商业园区能源系统仿真与优化调度的方法;③复现论文结果或开展相关课题研究,提升科研效率与创新能力。; 阅读建议:建议结合文中提供的Matlab代码实例,逐步理解模型构建与求解过程,重点关注不确定性处理方法与需求响应机制的设计逻辑,同时可参考文档中列出的其他资源进行扩展学习与交叉验证。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值