Подсчитать количество единиц в двоичном представлении - PullRequest
69 голосов
/ 15 января 2012

Эффективный способ подсчета числа 1 с в двоичном представлении числа в O (1), если у вас достаточно памяти для игры.Это вопрос интервью, который я нашел на онлайн-форуме, но на него не было ответа.Может кто-нибудь что-то предложить, я не могу придумать, как это сделать за O (1) раз?

Ответы [ 21 ]

0 голосов
/ 17 января 2012

Я на самом деле сделал это, используя небольшую ловкость рук: одной справочной таблицы с 16 записями будет достаточно, и все, что вам нужно сделать, это разбить двоичный повтор на кусочки (4-битные кортежи).Сложность на самом деле O (1), и я написал шаблон C ++, который специализировался на размере целого числа, которое вы хотели (в # битах) ... делает его константным выражением вместо неопределенного.

Между прочим, вы можетеиспользуйте тот факт, что (i & -i) вернет вам однобитный LS и просто зациклите, удаляя lsbit каждый раз, пока целое число не станет равным нулю - но это старый трюк контроля четности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...