Я сделал наивную реализацию Rice декодера (и кодер):Эффективное осуществление декодирования Райс
void rice_decode(int k) {
int i = 0
int j = 0;
int x = 0;
while(i < size-k) {
int q = 0;
while(get(i) == 0) {
q++;
i++;
}
x = q<<k;
i++;
for(j=0; j<k; j++) {
x += get(i+j)<<j;
}
i += k;
printf("%i\n", x);
x = 0;
}
}
с size
размером входного битового множества, get(i)
примитивный возвращая i
-й бит BitSet, и k
параметр Rice. Поскольку я занимаюсь выступлениями, я также сделал более сложную реализацию с предварительной оценкой, которая выполняется быстрее. Однако, когда я включаю флаг -O3
в gcc
, наивная реализация фактически превосходит последнюю.
Мой вопрос: знаю любую существующую эффективную реализацию Rice кодера/декодера (я больше озабочен с декодированием), что тарифы лучше, чем это (те, которые я смог найти либо медленнее или сравнимы)? В качестве альтернативы, есть ли у вас какая-нибудь умная идея, которая могла бы ускорить декодирование, отличную от предвычисления?
вы уверены, что вы не измеряя производительность 'printf'? –
@JacobParker хорошая точка, но я на самом деле добавил printf для ясности. Я измерил характеристики без этого. – doc
Что случилось с таблицей поиска (предварительная компиляция)? –