Несмотря ни на что, кажется, что каждый байт должен быть
- считан из памяти,
- изменен каким-то образом и
- записан обратно впамять.
Вы можете сэкономить бит (без каламбура) времени с помощью , работая с несколькими байтами за раз , например, выполнив операцию XOR для 4 или даже8-байтовые целые числа, следовательно, деление служебной информации, связанной с управлением циклом, на примерно , с коэффициентом 4 или 8, но это улучшение, скорее всего, не приведет к значительному увеличению общего алгоритма.
Дополнительные улучшения можно найти, заменив «родные» битовые операции (XOR, Shift, Rotations и т. П.) Процессора / языка, читая предварительно вычисленные значения в таблице.Однако помните, что эти нативные операции обычно довольно оптимизированы, и что вы должны быть очень прилежны при разработке эквивалентных операций извне и точно измерять относительную производительность этих операций.
Редактировать: К сожалению, я только что отметил тег [Python]
, а также ссылку на numpy в другом ответе.
Осторожно ... хотя предложение по битовому массиву Numpy правдоподобно, все зависит от фактических параметров рассматриваемой проблемы.Например, значительное количество времени может быть потеряно при выравнивании базовых массивов, подразумеваемых побитовой функцией numpy.См. Этот вопрос переполнения стека , который представляется весьма актуальным.Сосредоточив внимание на операции XOR, этот вопрос предоставляет довольно много полезных советов как для улучшения циклов и т. Д., Так и для профилирования в целом.