Другой способ показать это - использовать алгебру XOR;вам не нужно ничего знать об отдельных битах.
Для любых чисел x, y, z:
XOR коммутативно: x ^ y == y ^ x
XOR ассоциативно: x ^ (y ^ z) == (x ^ y) ^ z
Идентификация: 0: x ^ 0 == x
Каждый элемент имеет свой обратный: x ^ x == 0
Учитывая это, легко доказать указанный результат.Рассмотрим последовательность:
a ^ b ^ c ^ d ...
Поскольку XOR коммутативен и ассоциативен, порядок не имеет значения.Так что сортируйте элементы.
Теперь любые смежные идентичные элементы x ^ x
можно заменить на 0
(свойство самообращения).И любой 0
может быть удален (потому что это личность).
Повторите как можно дольше.Любое число, которое появляется четное число раз, имеет целое число пар, поэтому все они становятся 0 и исчезают.
В конечном счете, у вас остается только один элемент, который является нечетным числом раз.Каждый раз, когда он появляется дважды, эти двое исчезают.В конечном итоге вы остаетесь с одним случаем.
[обновление]
Обратите внимание, что для этого доказательства требуются только определенные предположения об операции.В частности, предположим, что набор S с оператором .
имеет следующие свойства:
Ассоциативность: x . (y . z) = (x . y) . z
для любых x
, y
и z
в S.
Идентичность: существует один элемент e
, такой, что e . x = x . e = x
для всех x
в S.
Закрытие: Для любых x
и y
в S, x . y
также находится вS.
Самообращенный: Для любого x
в S, x . x = e
Как оказалось, нам не нужно предполагать коммутативность;мы можем доказать это:
(x . y) . (x . y) = e (by self-inverse)
x . (y . x) . y = e (by associativity)
x . x . (y . x) . y . y = x . e . y (multiply both sides by x on the left and y on the right)
y . x = x . y (because x . x = y . y = e and the e's go away)
Теперь я сказал, что «вам не нужно ничего знать об отдельных битах».Я думал, что любой группе, удовлетворяющей этим свойствам, будет достаточно, и что такая группа не обязательно должна быть изоморфна целым числам в XOR.
Но @Steve Jessup доказал, что я не прав в комментариях.Если вы определите скалярное умножение на {0,1} как:
0 * x = 0
1 * x = x
... тогда эта структура удовлетворяет всем аксиомам векторного пространства над целыми модулями 2.
Таким образом, любая такая структура изоморфна набору векторов битов при компонентном XOR.