Программа курса:
Разбор задачи: Дистанция заклинивания
Предложенный нами код решения:
def hamming_distance(x, y):
"""
:param x: первое целое число
:param y: второе целое число
:return: расстояние Хэмминга между x и y
"""
# XOR между x и y для определения отличий
xor_result = x ^ y
# Подсчет количества единиц в результате XOR
distance = bin(xor_result).count('1')
return distanceШаги решения:
- Идея использования XOR:
- В языке Python оператор
^выполняет побитовую операцию XOR (исключающее ИЛИ). - XOR между двумя числами возвращает новое число, в котором биты равны
1, если соответствующие биты двух исходных чисел отличаются. Например:Для чисел
x=1(0 0 0 1) иy=4(0 1 0 0):x ^ y = 0 1 0 1 (в десятичной системе: 5)- В результате, в числе 5 биты на позициях 1 и 3 равны
1, так как биты в этих позициях различаются у чиселxиy.
- В языке Python оператор
- Конвертация результата XOR в двоичное представление:
Функция
bin()преобразует целое число в строку двоичного представления. Например:bin(5) # возвращает '0b101'- Префикс
0bуказывает на двоичную систему.
- Подсчет количества единиц:
- Используя метод строки
.count('1'), мы считаем количество единиц в двоичном представлении результата XOR, что и соответствует расстоянию Хэмминга.
- Используя метод строки
Код пошагово:
def hamming_distance(x, y):
"""
:param x: первое целое число
:param y: второе целое число
:return: расстояние Хэмминга между x и y
"""
# XOR между x и y для определения отличий
xor_result = x ^ y
- На этом шаге вычисляется результат XOR для чисел
xиy.
# Подсчет количества единиц в результате XOR
distance = bin(xor_result).count('1')
- Результат
xor_resultпреобразуется в двоичный вид с помощьюbin(). - Затем мы подсчитываем количество битов, равных
1, с помощью.count('1').
return distance
- Возвращаем вычисленное расстояние Хэмминга.
Пример выполнения:
Пример 1:
- Ввод:
x = 1, y = 4 Выполнение:
xor_result = 1 ^ 4 # 5 (в двоичном: '0b101') distance = bin(5).count('1') # 2- Вывод:
2
Пример 2:
- Ввод:
x = 3, y = 1 Выполнение:
xor_result = 3 ^ 1 # 2 (в двоичном: '0b10') distance = bin(2).count('1') # 1- Вывод:
1
Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии