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