|
0 / 0 / 1
Регистрация: 27.11.2013
Сообщений: 8
|
||||||
Быстрый подсчет количества бит27.11.2013, 10:08. Показов 7229. Ответов 22
Метки нет (Все метки)
Нужно подсчитать количество бит, равных единице в int32, использую статический массив, в котором заранее подсчитаны значения для 0x0000 - 0xFFFF
. Может, кто-то сталкивался с подобным, и есть идеи по увеличению скорости, или тут предел?
0
|
||||||
| 27.11.2013, 10:08 | |
|
Ответы с готовыми решениями:
22
Подсчет количества бит
|
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
||||||
| 27.11.2013, 13:17 | ||||||
1
|
||||||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
|
|||||||
| 27.11.2013, 13:51 | |||||||
|
причем здесь массив? вот простой цикл
0
|
|||||||
|
0 / 0 / 1
Регистрация: 27.11.2013
Сообщений: 8
|
||
| 27.11.2013, 15:19 [ТС] | ||
|
CheshireCat , это реально круто
![]() Спасибо! Добавлено через 1 минуту
0
|
||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
|
|||||||
| 27.11.2013, 15:50 | |||||||
|
может быть зато все на виду ну вот побыстрее
если число типа 1 то вообще 1 итерация если 0 то ни одной
1
|
|||||||
|
0 / 0 / 1
Регистрация: 27.11.2013
Сообщений: 8
|
|
| 27.11.2013, 16:00 [ТС] | |
|
ValeryS, Все верно, но в моей задаче число единиц и нулей ожидаются примерно равными, и итераций будет близко к тридцати. При измерении быстродействия на реальных данных способ с массивами самым быстрым оказался
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
|
||
| 27.11.2013, 16:06 | ||
|
там используются битовые маски не спорю для реальных данных способ быстрей но не такой очевидный
0
|
||
|
0 / 0 / 1
Регистрация: 27.11.2013
Сообщений: 8
|
|
| 27.11.2013, 16:22 [ТС] | |
|
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
|
|||||||||||||||||||
| 27.11.2013, 16:49 | |||||||||||||||||||
|
ну могу показать табличный способ, он будет самый быстрый правда памяти будет жрать ![]() честно говоря я так и не понял твой способ он вроде табличный но каждый раз вызывается вот это с массивом на 16 элементов массив забивается на этапе компиляции
но расплата память в идеале вообще таблица размером в 4294967296 самая быстрая но где столько памяти взять
1
|
|||||||||||||||||||
|
0 / 0 / 1
Регистрация: 27.11.2013
Сообщений: 8
|
|||||||
| 27.11.2013, 16:56 [ТС] | |||||||
0
|
|||||||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
|
|||
| 27.11.2013, 17:09 | |||
|
так инициализируй массив сразу как запустил программу, до всех расчетов
0
|
|||
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
||||||
| 27.11.2013, 17:51 | ||||||
|
Ну можно еще попытаться замутить что-нибудь вида
0
|
||||||
|
|
|
| 27.11.2013, 18:23 | |
|
Не забывайте, что массив для 0x0000 - 0xFFFF (т.е. в нём 65536 элементов)
На пример из поста #12 в теории могут сказать, что он ednian-зависимый (если преподаватель вообще знает, что это такое). На это можно ответить, что от перестановки порядка байт количество единиц в них не поменяется
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
|
||||||
| 27.11.2013, 18:39 | ||||||
![]() у меня он хоть и в глобальной области Добавлено через 1 минуту
0
|
||||||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
|
|
| 27.11.2013, 18:46 | |
|
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,867
|
|||
| 27.11.2013, 18:53 | |||
![]() ![]() как то нужно было выделить 512 скроллеров ( окна такие) так прога рухнула не успев запустится не помню статик объявлял или нет(давно было) т.е данные в стеке или в глобальной области но с тех пор как то при больших размерах динамику предпочитаю
0
|
|||
|
0 / 0 / 1
Регистрация: 27.11.2013
Сообщений: 8
|
||||||
| 28.11.2013, 08:35 [ТС] | ||||||
|
Вот окончательный вариант моего класса. Убрал лишние вложенные вызовы функций, и теперь BitCount() приблизился по скорости к &= , SetBit() и прочим. А быстрее всего работает автогенерированный operator=() - вот что значит оптимизация компилятора! Думаю, тут только на asm можно что-то существенно оптимизировать.
Может, код пригодится кому-то.
0
|
||||||
| 28.11.2013, 08:35 | |
|
Помогаю со студенческими работами здесь
20
Подскажите быстрый поиск количества интервалов в отрезке Быстрый алгоритм для подсчета количества делителей числа Быстрый подсчет A^B mod C или "Алгоритм русского крестьянина" Подсчет количества слов Подсчет количества слов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|