异或运算剖析

异或运算

本质:无进位相加

		100110
		110011
		010101
  1. 0异或任何数都等于自身:0^x=x
  2. 任何数与自身异或都等于0 :x^x=0
  3. 异或运算满足交换律结合律
  4. 不额外申请临时变量空间,实现a=x,b=y的交换
a=a^b;
b=a^b;
a=a^b;

证明:
a=a^b: a=x ^ y ,b=y
b=a^b: a=x ^ y,b=x ^ y ^ y=x
a=a^b: a=x ^ y ^ x=y,b=x




经典面试题


5.一个数组,只有一个数出现了奇数次,其他都出现了偶数次,要求只用O(1)额外空间,返回这个数

void odd(const vector<int>& arr,int& ans){//用0去异或数组每个数,最后的结果就是这个频次为奇数的数
	int tmp=0;
	for(auto k:arr)tmp=tmp^k;
	ans=tmp;
}

6.一个数组,只有两个数a,b出现了奇数次,其他都出现了偶数次,要求只用O(1)额外空间,返回这两个数

void odd(const vector<int>& arr,int& ans1,int& ans2){
	int eor1=0;
	for(aoto k:arr)eor1^=k;//用0异或数组每一个数,得到了a^b
	//a^b!=0,则a^b肯定有至少一个二进制位为1
	//我们提取出最右位1
	int rightOne=eor1 & (~eor1+1);
	//再次用0去异或数组中最右位1为rightOne的数,得到a
	int eor2=0;
	for(auto k:arr){
		if(k&rightOne!=0)eor2^=k;
	}
	ans1=eor2;
	ans2=eor1^ans1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BP神经网络算法可以用于解决分类和回归问题。下面是BP算法实现异或运算的步骤和代码: 1.问题: 我们需要训练一个BP神经网络来实现异或运算,即输入两个二进制数,输出它们的异或结果。 2.分析: 我们可以使用一个包含两个输入节点、两个隐藏节点和一个输出节点的三层神经网络来解决这个问题。我们需要使用反向传播算法来训练神经网络,以便它可以正确地计算异或运算。 3.代码: ```python import numpy as np # 定义sigmoid函数 def sigmoid(x): return 1 / (1 + np.exp(-x)) # 定义sigmoid函数的导数 def sigmoid_derivative(x): return x * (1 - x) # 定义BP神经网络类 class NeuralNetwork: def __init__(self, x, y): self.input = x self.weights1 = np.random.rand(self.input.shape[1], 2) self.weights2 = np.random.rand(2, 1) self.y = y self.output = np.zeros(self.y.shape) def feedforward(self): self.layer1 = sigmoid(np.dot(self.input, self.weights1)) self.output = sigmoid(np.dot(self.layer1, self.weights2)) def backprop(self): d_weights2 = np.dot(self.layer1.T, (2 * (self.y - self.output) * sigmoid_derivative(self.output))) d_weights1 = np.dot(self.input.T, (np.dot(2 * (self.y - self.output) * sigmoid_derivative(self.output), self.weights2.T) * sigmoid_derivative(self.layer1))) self.weights1 += d_weights1 self.weights2 += d_weights2 def train(self, epochs): for i in range(epochs): self.feedforward() self.backprop() def predict(self, x): self.input = x self.feedforward() return self.output # 训练数据 X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) y = np.array([[0], [1], [1], [0]]) # 创建神经网络对象并训练 nn = NeuralNetwork(X, y) nn.train(10000) # 预测新数据 x_test = np.array([[0, 1]]) print(nn.predict(x_test)) # 输出:[[0.99676596]] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值