異或 轉載

一:異或的含義
或在數學中的含義:一個元素在集合A中或在集合B中,或的維恩圖如下:

而異或是不允許共存的,所以 A ^ B 的維恩圖如下:

同理對於 A ^ B ^ C 維恩圖:

 

異或運算{\displaystyle A\oplus B} 的真值表如下:F表示false,T代表true

A    B    ⊕
F    F    F
F    T    T
T    F    T
T    T    F
 

二、異或的性質:滿足交換律和結合律
 交換律:A ^ B = B ^ A;
 結合律:A ^ (B ^ C) = (A ^ B) ^ C;
恆等律:X ^ 0 = X;
歸零律:X ^ X = 0;
自反:A ^ B ^ B = A ^ 0 = A;
 對於任意的 X: X ^ (-1) = ~X;
 如果 A ^ B = C 成立,那麼 A ^ B = C,B ^ C = A;
 

三、異或的應用
1. 1-1000放在含有1001個元素的數組中,只有唯一的一個元素重複,找出這個重複的數字。要求不能使用輔助存儲空間並且數組的每個元素只能訪問一次。

解法一:將這1001個元素加起來的和減去1+2+……+1000,所得的值就是重複的數字(數據過大容易溢出)。

解法二:異或

將1001個數全部異或得到的值再與1^2^……^1000的結果再次異或,這樣就避免了數據過大溢出的情況。

首先,異或運算滿足交換律和結合律,即a^b = b^a,(a^b)^c = a^(b^c)。令重複的數字爲n:

所以1 ^ 2 ^ … ^ n ^ n ^ … ^ 1000 = 1 ^ 2 ^ … ^ 1000 ^ (n ^ n) = 1 ^ 2 ^ … ^ 1000 ^ 0 = 1 ^ 2 ^ … ^ 1000(即序列中除了重複數字 n 以外所有數的異或。

如果令1 ^ 2 ^ … ^ 1000(序列中不包含n)的結果爲T,那麼1 ^ 2 ^ … ^ 1000(序列中包含n)的結果就是 T^n,T ^ (T ^ n) = n。

 

2. 變形:一個數組存放若干整數,一個數出現奇數次,其餘數均出現偶數次,找出這個出現奇數次的數。

解法與上面的解法二相同。
--------------------- 
作者:AmosMeer 
來源:CSDN 
原文:https://blog.csdn.net/Jasmineaha/article/details/81412711 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章