vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« : Февраль 15, 2007, 10:45:44 » |
|
Написать подпрограмму, вычисляющую количество единиц в бинарном представлении целого числа, например в числе 6 две единицы (6 = 0110bin), в числе 7 три единицы (7 = 0111bin).
Условия: Реализацию этого алгоритма можно предложить на любом языке программирования. Мой ответ на ANSI С.
Будет защитан только самый быстрый алгоритм, т.е. подпрограмма должна быть оптимизирована по времени.
|
|
« Последнее редактирование: Февраль 22, 2007, 08:34:02 от vimmax »
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
BODROV
Mодератор
Доцент
Карма: +37/-1
Offline
Пол:
Сообщений: 550
хде я?
|
|
« Ответ #1 : Февраль 15, 2007, 03:14:31 » |
|
mov bx, x mov ax, 0 mov cx, 16 m: rcl bx, 1 adc ax, 0 loop m
в результате в ax кол-во единиц. но что-то мне подсказыавет, что это не самый лучший вариат....
|
|
|
Записан
|
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #2 : Февраль 15, 2007, 04:12:13 » |
|
BODROV - Ответ #1 - вау, скока программистов на асме нашлось!!!! Ответ хороший, но не самый быстрый. Фишка данной задачи в том, что ответ можно реализовать на любом языке программирования. Хотя ответ немного абсурдный.....но самый быстрый.
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
Archangel
Профессор
Карма: +17/-2
Offline
Пол:
Сообщений: 999
|
|
« Ответ #3 : Февраль 16, 2007, 11:59:01 » |
|
Ставишь мультиплексоры, а после них счетчики:). Работать будет быстрее всего остального.
|
|
|
Записан
|
Птицей Гермеса меня называют. Крылья свои пожирая, сам я себя укрощаю.
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #4 : Февраль 16, 2007, 01:42:07 » |
|
Archangel - Ответ #3 - Может быть и быстрее, но сейчас тема "Искусство программирования", а не "Искусство схемотехники" )))
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #5 : Февраль 16, 2007, 05:10:44 » |
|
Такс,....ну что товарисчи ?? Даже никто и не пытается? В общем даю подсказку: Оптимизация программ обычно ведется в одном из двух направлений: 1.оптимизация по скорости с увеличением занимаемой памяти 2.оптимизация по занимаемой памяти в ущерб скорости.
В данной задаче время выполнения алгоритма уменьшается за увеличения занимаемой памяти...
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
BODROV
Mодератор
Доцент
Карма: +37/-1
Offline
Пол:
Сообщений: 550
хде я?
|
|
« Ответ #6 : Февраль 16, 2007, 05:27:29 » |
|
создать массив скажем из 65535 элементов, где заведомо указать в i-том элементе количество единиц числа i
|
|
|
Записан
|
|
|
|
Sochin
Злой модератор
Декан
Карма: +108/-6
Offline
Пол:
Сообщений: 1518
|
|
« Ответ #7 : Февраль 16, 2007, 05:37:00 » |
|
создать массив скажем из 65535 элементов, где заведомо указать в i-том элементе количество единиц числа i А для оптимизации по времени поиска элемента использовать хеш-таблицу или двоичное дерево.
|
|
|
Записан
|
Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #8 : Февраль 16, 2007, 05:46:51 » |
|
BODROV, Sochin - Все бы хорошо, но приведите пример кода, можно без компиляции и без лишних элементов. Хоть пару строк....
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
BODROV
Mодератор
Доцент
Карма: +37/-1
Offline
Пол:
Сообщений: 550
хде я?
|
|
« Ответ #9 : Февраль 16, 2007, 06:00:09 » |
|
const a: array [0..65535] of integer = (0,1,1,2,1,2,2,3,1,2 ...и так далее... 16); var z: word; begin readln(z); writeln('код-во единиц: ', a[z]); end.
|
|
|
Записан
|
|
|
|
vimmax
Модератор
Декан
Карма: +42/-3
Offline
Пол: Награды:
Сообщений: 1713
♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪
|
|
« Ответ #10 : Февраль 16, 2007, 06:07:00 » |
|
BODROV - Ответ#9 - Правильный ответ, самый быстрый. Скорость в ущерб памяти +1. Sochin - Ответ #7 - интересно было-бы посмотреть реализацию с хеш-таблицами и бинарным деревом.
|
|
|
Записан
|
♪♪ ♫ LET FOREVER BE ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
|
|
|
BODROV
Mодератор
Доцент
Карма: +37/-1
Offline
Пол:
Сообщений: 550
хде я?
|
|
« Ответ #11 : Февраль 16, 2007, 06:11:30 » |
|
BODROV - Ответ#9 - Правильный ответ, самый быстрый. Скорость в ущерб памяти +1. супер!!! в ущерб не только памяти, но психичекого состояния программера... я б после заполнения матрицы а точно двинулся бы вообже такой вариант еще вчера появлялся, но я его отбросил, как ответ абсурдней абсурдного
|
|
|
Записан
|
|
|
|
Sochin
Злой модератор
Декан
Карма: +108/-6
Offline
Пол:
Сообщений: 1518
|
|
« Ответ #12 : Февраль 17, 2007, 03:58:40 » |
|
Sochin - Ответ #7 - интересно было-бы посмотреть реализацию с хеш-таблицами и бинарным деревом.
Вот так с помощью хэша можно искать для целых или скажем для строк(C#): public class BitCounter { static BitCounter() { hash.Add(0, 0); hash.Add(1, 1); hash.Add(2, 1); hash.Add(3, 2); ... hash.Add(65535, 16); hash.Add("0", 0); hash.Add("1", 1); hash.Add("2", 1); hash.Add("3", 2); ... hash.Add("65535", 16); }
static Hashtable hash = new Hashtable();
public static int Count(object x) { if (hash.Contains(x)) return (int) hash[x]; return 0; } }
class Program { static void Main(string[] args) { Console.WriteLine("Кол-во единиц: {0:D}", BitCounter.Count(3)); Console.WriteLine("Кол-во единиц: {0:D}", BitCounter.Count("3")); Console.ReadLine(); } } Кстати насчет абсурдности идеи как таковой, индексы в СУБД MS SQL Server предназначены для ускорения поиска и представляют собой ничто иное как сбалансированные деревья.
|
|
|
Записан
|
Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил... 壯鎭
|
|
|
mars
Магистр
Карма: +10/-0
OfflineНаграды:
Сообщений: 221
|
|
« Ответ #13 : Февраль 27, 2007, 12:56:33 » |
|
Ставишь мультиплексоры, а после них счетчики:). Работать будет быстрее всего остального.
Очень хотелось бы схемку с мультиплексором увидеть .... хе-хе
|
|
|
Записан
|
Мне говорили: «Ты злой», и я соглашался. Мне говорили: «Ты не злой», и я не находил возражений. Сам-то я не хотел ни добра, ни зла и даже не думал об этом. Я просто шел своим Путем, а люди потом подбирали названия для моих поступков. М.Симонс
|
|
|
|