Разбор задачи: Дистанция заклинивания

Предложенный нами код решения:

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

Шаги решения:

  1. Идея использования 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.
  2. Конвертация результата XOR в двоичное представление:
    • Функция bin() преобразует целое число в строку двоичного представления. Например:

      bin(5)  # возвращает '0b101'
      
    • Префикс 0b указывает на двоичную систему.
  3. Подсчет количества единиц:
    • Используя метод строки .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

 



Вы должны Войти или Зарегистрироваться чтобы оставлять комментарии