Перечислите целые числа по весу Хэмминга, сдвиг по модулю
Мне нужно выбрать целые числа из упорядоченного массива, описанного ниже.
Позволять 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 ответ
Я разобрался с ответом на этот вопрос, на случай, если это кому-нибудь понадобится.
Получив запись, добавьте второй младший бит и продолжите. Если это уменьшает вес Хэмминга, поместите необходимое количество единиц, начиная со второй наименее значимой позиции.