Код Хэмминга: количество бит четности

Я пытаюсь написать метод в Java, который будет принимать любые цифры от 0 до 1 и выводить эту строку после кодирования с кодом Хемминга.

Мне удалось написать код, зная количество цифр на входе (в данном случае 16), потому что, зная количество цифр на входе, я сразу знаю, какое количество бит четности нужно добавить (5 в этом регистр) до 21 цифры в конечном выводе. Я работаю с массивами int, поэтому мне нужно вначале объявить размер, и мой код работает на основе этих точных размеров.

Можете ли вы, ребята, придумать какой-нибудь способ / алгоритм, который может дать мне количество цифр, которые будут иметь выходные данные (после добавления соответствующих цифр четности к числу входных цифр), основываясь исключительно на количестве входных цифр?

Или я должен решать эту проблему совершенно по-другому? Какие-либо предложения? Заранее спасибо!

Ура!

2 ответа

Решение

Насколько я понимаю, вы получаете ваш 6-й бит четности при 32-битных входных данных, 7-й при 64-х и т. Д. floor(lg(n)) + 1, который в Java вы можете получить с помощью 32 - Integer.numberOfLeadingZeros(n),

Предполагая, что ваш вход полностью состоит из 0 и 1, вы должны сделать

int parityDigits = 32 - Integer.numberOfLeadingZeros(input.length());

Ваш вход - строка или отдельные биты? Если вы вводите в виде строки, вы можете преобразовать каждый символ в бит, а длина строки даст вам длину массива.

Если вам нужно вводить биты по одному, сохраните их в ArrayList. Когда все биты введены, вы можете легко преобразовать свой список в массив или использовать размер списка и т. Д.

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