![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| creation |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Нужно создать быстрый алгоритм для подсчета числа 1 и 0 в десятичном числе...
Т. е. есть число, например, 8 - в двоичном виде это 1000 И надо определить число 1 и 0 в двоичном виде... Т. е. одна единица три нуля. Самый первый, который пришел в голову - это в цикле делать смещение бита на первое место (правое), обнулять остальные биты и проверять что получили 1 или 0 и считать... Но алгоритм медленный - проход в цикле... Есть еще какие более простые? |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
для 8битного числа возврашает кол-во единиц.
Добавлено через 57 секунд за сегодня третий вопрос по битовым операциям.. )) Добавлено через 2 минуты и 28 секунд название у темы крутое..такое понятное и ясное.. аж на душе приятно Добавлено через 3 минуты и 14 секунд а вообше попробуй пользоваться поиском - найдешь много чего интересного |
||||
|
|||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
самый простой и быстрфй способ - задать массив нужной величины и занести в него подсчитанное значение для каждого числа, используя число как индекс. Потом просто по индексу доставать нужный результат |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
http://forum.vingrad.ru/forum/topic-210832/view-all.html
с помощью одного из тех вариантов решения, думаю, можно ускорить решение mes'а Добавлено @ 18:12 для инта жесткий массив будет лучше уж по байтам разбивать число и массив из 256 элементов Добавлено @ 18:13 представил, как программер вводит значения для массива на 4 мильярда элементов Это сообщение отредактировал(а) Alek86 - 4.6.2008, 18:13 |
|||
|
||||
| creation |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Спасибо mes!
Но это тот же алгоритм, что и мой... У тебя цикла нет, просто... Насчет занести в массив числа с нужным количеством 1 и 0 хорошая идея, но ресурсоемкая, так как массивы будут очень большие... Нужен быстрый способ, расчета на лету... В целом понимаю, что скорее всего придеться использовать то, что в голову самому и пришло и что тоже самое немного по другому оформил mes... Я думал есть какая нибудь одна формула, которая сможет выдать число единиц... |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
если по байтам разбить, то в самый раз |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
bitset, vector<bool>
|
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 2 Всего: 95 |
Качаем книгу Алгоритмические трюки для программистов и читаем главу 5 "Подсчет битов" до просветления
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| creation |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 20.10.2007 Репутация: нет Всего: нет |
Уже прочитал, уже реализовал... Всем спасибо! |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот противопример : size_t func (int16 source ) { static size_t bits4count[] = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3, 4 }; return bits4count[bits4count[ ( source) & 0xff ] ) +bits4count[bits4count[ ( source >>4) & 0xff ] ) +bits4count[bits4count[ ( source >> 8) & 0xff ] ) +bits4count[bits4count[ ( source >>12) & 0xff ] ); } Добавлено через 6 минут и 56 секунд но решение приведенное в книжке более эффективное - тка как не обрашается к памяти .. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |