一:異或的含義
或在數學中的含義:一個元素在集合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
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!