![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Lamak |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 204 Регистрация: 8.5.2005 Где: Украина,Одесса Репутация: нет Всего: 7 |
Написать функцию которая возвращает кол-во бит установленных в 1(например в переменной типа int).
Я предложил следующее решение:
скорость этого алгоритма пропорциональна 32 Вопрос: Как увеличить скорость алгоритма? --------------------
Роботы - это интересно и увлекательно! |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
Это сообщение отредактировал(а) Fazil6 - 2.10.2007, 13:52 |
|||
|
||||
Lamak |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 204 Регистрация: 8.5.2005 Где: Украина,Одесса Репутация: нет Всего: 7 |
Fazil6, скорость твоего алгоритма тоже пропорциональна 32
ты просто избавился от переменной i Добавлено через 1 минуту и 55 секунд хотя согласен на некоторых примерах он быстрее --------------------
Роботы - это интересно и увлекательно! |
|||
|
||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
такой алгоритм не требует обязательных 32-х итераций Добавлено через 7 минут и 17 секунд http://infolab.stanford.edu/~manku/bitcount/bitcount.html |
|||
|
||||
Lamak |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 204 Регистрация: 8.5.2005 Где: Украина,Одесса Репутация: нет Всего: 7 |
Fazil6, +
да я уже понял! спасибо за оперативный ответ! Добавлено через 12 минут и 54 секунды спасибо за ссылку! --------------------
Роботы - это интересно и увлекательно! |
|||
|
||||
xvr |
|
||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
2 варианта:
Второй вариант:
|
||||||||
|
|||||||||
Fazil6 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
самый быстрый вариант - использовать предподсчет. Есть в ссылке выше
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
Это сообщение отредактировал(а) MAKCim - 10.10.2007, 18:06 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
_Michael |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 23.6.2007 Где: з полонини Репутация: нет Всего: 6 |
MAKCim, а можеш немного прокомментировать твой ответ? Как оно работает?
![]() Это сообщение отредактировал(а) _Michael - 10.10.2007, 17:58 -------------------- ...не убивайся ни о чем - все временно, хоть ночь темна но светлым днем беременна... Саади |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
_Michael,
сдвигаем искомое число на 1 бит вправо флаг CF принимает значение сдвинутого бита инструкцией
увеличиваем (или не изменяем (в зависимости от CF)) общее количество единичных битов все это в цикле из 32-х итераций -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
_Michael |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 23.6.2007 Где: з полонини Репутация: нет Всего: 6 |
Спасибо, все равно темний лес для меня. Как я понимаю %2 ето типа второй парметр или как?
Но ето уже надо синтаксис смотреть как в сишке асм пользовать -------------------- ...не убивайся ни о чем - все временно, хоть ночь темна но светлым днем беременна... Саади |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
В книге Генри Уоррена "Алгоритмические трюки для программистов" вроде есть функция для вычисления этого без всяких ветвлений (то есть нету if, while, else, ну и соответственно jnz). xvr, вроде её и привёл во втором варианте, но возможно там есть и другие варианты
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |