Количество двоичных совпадений на двоичных числах фиксированной длины на python - PullRequest
0 голосов
/ 20 октября 2018

Итак, мне нужна функция python для подсчета двоичного числа, совпадающего по двум числам, записанным в двоичном, но с фиксированной, известной длиной.Например, если n = 8 - двоичная длина, то:

a = 0011 0110
b = 0101 1111
--------------
c = 1001 0110 -> 4

Должен получить результат 4.каждый 0 на c не является совпадением, а каждый 1 означает совпадение.Поскольку c имеет 4 единицы, то результат равен 4.

Мне нужно, чтобы он был как можно быстрее .

1 Ответ

0 голосов
/ 20 октября 2018

Это было мое окончательное решение, которое я считаю довольно эффективным:

bin(a ^ b)[2:].zfill(n).count("0")

Объяснение Логика заключалась в том, чтобы использовать xor для получения количества совпадений.С помощью XOR я на самом деле получаю обратное к примеру, приведенному в вопросе, поскольку совпадение будет означать 0, а несовпадение будет означать 1.Поэтому мне придется отрицать это, но перед этим я должен сделать число размером n, потому что ответ на самом деле 110 1001, и поэтому я получу ответ 3 вместо 4.

...