Простой вызов Python: быстрый побитовый XOR для буферов данных - PullRequest
51 голосов
/ 22 января 2010

Задача:

Выполнить побитовое XOR на двух буферах одинакового размера. Буферы должны быть типа python str, поскольку это традиционно тип буферов данных в python. Вернуть результирующее значение как str. Сделайте это как можно быстрее.

Входными данными являются две строки размером 1 мегабайт (2 ** 20 байт).

Задача состоит в том, чтобы существенно победить мой неэффективный алгоритм с использованием Python или существующих модулей Python сторонних производителей (упрощенные правила: или создать свой собственный модуль.) Маргинальные увеличения бесполезны.

from os import urandom
from numpy import frombuffer,bitwise_xor,byte

def slow_xor(aa,bb):
    a=frombuffer(aa,dtype=byte)
    b=frombuffer(bb,dtype=byte)
    c=bitwise_xor(a,b)
    r=c.tostring()
    return r

aa=urandom(2**20)
bb=urandom(2**20)

def test_it():
    for x in xrange(1000):
        slow_xor(aa,bb)

Ответы [ 11 ]

0 голосов
/ 22 января 2010

Вы можете попробовать симметричную разницу битовых наборов sage.

http://www.sagemath.org/doc/reference/sage/misc/bitset.html

...