Перечислите целые числа по весу Хэмминга, сдвиг по модулю

Мне нужно выбрать целые числа из упорядоченного массива, описанного ниже.

Позволять k быть положительным целым числом.

  • Все записи являются неотрицательными целыми числами в [0,2^k)

  • Список начинается с 0

  • Далее следуют все (увеличивающиеся) целые числа с весом Хэмминга 1 по модулю сдвига битов (т.е. умножения на 2).
  • Все (увеличивающиеся) целые числа с весом Хэмминга 2 по модулю сдвига битов, следуют и так далее.

Массив для k=5 выглядит так:

        0 ( weight 0 )
        1 ( weight 1 )
       11 ( weight 2 )
      101
     1001
    10001
      111 ( weight 3 )
     1011
     1101
    10011
    10101
    11001 

В частности, учитывая запись в списке, я хотел бы вывести следующую запись алгоритмически.

Я знаю, что это можно сделать несколькими способами (см., Например, этот вопрос). Для полноты картины вот как выглядят эти другие массивы, в отличие от приведенного выше:

        0 ( weight 0 )
        1 ( weight 1 )
       10
      100
     1000
    10000 
       11 ( weight 2 )
      101
      110
  ... etc

1 ответ

Я разобрался с ответом на этот вопрос, на случай, если это кому-нибудь понадобится.

Получив запись, добавьте второй младший бит и продолжите. Если это уменьшает вес Хэмминга, поместите необходимое количество единиц, начиная со второй наименее значимой позиции.

Другие вопросы по тегам