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

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

Пусть 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

person Tal-Botvinnik    schedule 20.09.2018    source источник


Ответы (1)


Я нашел ответ на это, если кому-то это нужно.

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

person Tal-Botvinnik    schedule 21.09.2018