Название: Количество единиц в байте Отправлено: OKTA от Май 26, 2014, 12:57 Товарищи, есть задача посчитать количество 1-ц в последовательности. В итоге все сводится к подсчету единиц в каждом отдельном байте. Так вот вопрос, как будет быстрее? Побитовым сдвигом или логическим И, используя шабоны байт с единицей в разных местах?
Название: Re: Количество единиц в байте Отправлено: alex312 от Май 26, 2014, 13:13 Я думаю, самый быстрый способ - это табличный. Когда позиция в массиве будет хранить количество единиц в байте, соответствующем позиции.
Название: Re: Количество единиц в байте Отправлено: OKTA от Май 26, 2014, 14:14 Я думаю, самый быстрый способ - это табличный. Когда позиция в массиве будет хранить количество единиц в байте, соответствующем позиции. Не очень понял)) Название: Re: Количество единиц в байте Отправлено: Bepec от Май 26, 2014, 14:21 Я думаю битовым будет быстрее. Хотя тут уже в реализацию надо смотреть.
Название: Re: Количество единиц в байте Отправлено: Old от Май 26, 2014, 14:24 Думаю, быстрее табличного не найти.
Название: Re: Количество единиц в байте Отправлено: OKTA от Май 26, 2014, 15:53 Спасибо за ответы! Попробую так и так для эксперимента ;)
Название: Re: Количество единиц в байте Отправлено: Vamireh от Май 26, 2014, 17:23 int a[255] = {n0, n2, n3.... n254}, где nX - количество единиц в числе X.
for (byte : all) sum += a[byte] быстрее вряд ли что-то будет Название: Re: Количество единиц в байте Отправлено: Old от Май 26, 2014, 17:44 int a[255] = {n0, n2, n3.... n254}, где nX - количество единиц в числе X. Таблица должна быть длиной 256 байт: от 0 до 255.Название: Re: Количество единиц в байте Отправлено: OKTA от Май 26, 2014, 17:49 Да, этот метод гораздо быстрее работает! На 50 КБ данных как минимум в 4 раза быстрее!
Спасибо! Название: Re: Количество единиц в байте Отправлено: kamre от Май 26, 2014, 18:06 http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetNaive
Название: Re: Количество единиц в байте Отправлено: Vamireh от Май 26, 2014, 18:15 int a[255] = {n0, n2, n3.... n254}, где nX - количество единиц в числе X. Таблица должна быть длиной 256 байт: от 0 до 255.Да-да. Давайте не будем к цифрам придираться? Все всё поняли. Название: Re: Количество единиц в байте Отправлено: Vamireh от Май 26, 2014, 18:19 Хотя может будет быстрее, если по два байта, например проверять:
Код: *reinterpret_cast<short*>(&buffer[i]) количество байт нужно учесть. Название: Re: Количество единиц в байте Отправлено: Old от Май 26, 2014, 20:56 Да-да. Давайте не будем к цифрам придираться? Все всё поняли. Ну вообще то, все всё поняли после первого же ответа в теме. :)А если вы решили "разжевать" с примерами, то это не плохо делать без ошибок. ;) Название: Re: Количество единиц в байте Отправлено: OKTA от Май 26, 2014, 21:03 Дальнейшее ускорение уже не столь важно в моей задачке, но с шортами попробую ради интереса. ;)
Название: Re: Количество единиц в байте Отправлено: Igors от Май 27, 2014, 06:25 Хороший пример premature optimisation - оптимизации того что узким местом не будет. Ну так, из любви к искусству :)
|