Я читаю о некоторых проблемах, связанных с подходами к оптимизации.
В задаче о том, как сортировать числа в определенном диапазоне, решением является использование растрового изображения. И если число может появиться, например. до 10 раз используйте полубайты для отображения чисел и в качестве счетчиков для представления количества вхождений.
Концепция, которую я хорошо понимаю. Моя проблема заключается в том, как реализовать это на Java простым способом.
Я застрял на битовых операциях.
Например, для первой части увеличения счетчика на 1 я мог подумать о следующем:
Найдите байт
Например. bitValue[i]
Затем выполните byte tmp = bitValue[i] & 0x0F
, чтобы получить младшие биты (если счетчик является младшим счетчиком).
Затем выполните tmp = tmp + 1
, чтобы увеличить значение на 1.
Затем выполните bitValue[i] >> 2
, чтобы очистить младшие биты, и затем bitValue[i] <<2
, чтобы восстановить. Теперь у нас те же старшие биты, что и в оригинале, а младшие биты очищены.
Затем выполните bitValue[i] |= tmp
, чтобы установить младшие биты.
Теперь bitValue
счетчик младших битов увеличен на 1. Правильно?
Для старшего бита это будет тот же процесс, но для старших битов.
Затем, когда я должен проверить, что такое номер счетчика.
Я решил использовать битовые маски:0x0
0x1
0x2
и т. д. и использовать OR
для проверки текущего номера счетчика.
Все это кажется слишком сложным. Я на правильном пути? Как эти операции лучше всего решаются в Java-кодировании?
Любой вклад, руководство по этому вопросу приветствуется.