КИТА unofficial
Ноябрь 22, 2024, 10:06:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   ПРАВИЛА Помощь WIKI PDA Войти Регистрация  


Страниц: [1]   Вниз
  Печать  
Автор Тема: "Искусство программирования" (задача 3)  (Прочитано 11300 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline 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 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 Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #2 : Февраль 15, 2007, 04:12:13 »

BODROV - Ответ #1 - вау, скока программистов на асме нашлось!!!!
Ответ хороший, но не самый быстрый. Фишка данной задачи в том, что ответ можно реализовать на любом языке программирования. Хотя ответ немного абсурдный.....но самый быстрый.
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
Archangel
Профессор
****

Карма: +17/-2
Offline Offline

Пол: Мужской
Сообщений: 999



« Ответ #3 : Февраль 16, 2007, 11:59:01 »

Ставишь мультиплексоры, а после них счетчики:). Работать будет быстрее всего остального.
Записан

Птицей Гермеса меня называют. Крылья свои пожирая, сам я себя укрощаю.
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #4 : Февраль 16, 2007, 01:42:07 »

Archangel - Ответ #3 - Может быть и быстрее, но сейчас тема "Искусство программирования", а не "Искусство схемотехники" )))
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #5 : Февраль 16, 2007, 05:10:44 »

Такс,....ну что товарисчи ?? Даже никто и не пытается? В общем даю подсказку:
Оптимизация программ обычно ведется в одном из двух направлений: 1.оптимизация по скорости с увеличением занимаемой памяти 2.оптимизация по занимаемой памяти в ущерб скорости.

В данной задаче время выполнения алгоритма уменьшается за увеличения занимаемой памяти...
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
BODROV
Mодератор
Доцент
*****

Карма: +37/-1
Offline Offline

Пол: Мужской
Сообщений: 550


хде я?


« Ответ #6 : Февраль 16, 2007, 05:27:29 »

создать массив скажем из 65535 элементов, где заведомо указать в i-том элементе количество единиц числа i   rofl
Записан
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline Offline

Пол: Мужской
Сообщений: 1518



« Ответ #7 : Февраль 16, 2007, 05:37:00 »

создать массив скажем из 65535 элементов, где заведомо указать в i-том элементе количество единиц числа i   rofl
А для оптимизации по времени поиска элемента использовать хеш-таблицу или двоичное дерево. rofl
Записан

Говорят, когда компьютер сгорает, перед взором микропроцессора за долю секунды проносятся все операции, которые он когда-либо совершил...
壯鎭
vimmax
Модератор
Декан
*****

Карма: +42/-3
Offline Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #8 : Февраль 16, 2007, 05:46:51 »

BODROV, Sochin - Все бы хорошо, но приведите пример кода, можно без компиляции и без лишних элементов. Хоть пару строк....
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
BODROV
Mодератор
Доцент
*****

Карма: +37/-1
Offline 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 Offline

Пол: Мужской
Награды:
лучшая гитара мира
Сообщений: 1713


♪♪ ♫ ♪♪ ♫ ♪♪ ♫ ♪♪


« Ответ #10 : Февраль 16, 2007, 06:07:00 »

BODROV - Ответ#9 - Правильный ответ, самый быстрый. Скорость в ущерб памяти Улыбка    +1.

Sochin - Ответ #7 - интересно было-бы посмотреть реализацию с хеш-таблицами и бинарным деревом.
Записан

♪♪ ♫  LET FOREVER BE  ♫ ♪♪ ♫ ♪♪ ♪♪ ♫
BODROV
Mодератор
Доцент
*****

Карма: +37/-1
Offline Offline

Пол: Мужской
Сообщений: 550


хде я?


« Ответ #11 : Февраль 16, 2007, 06:11:30 »

BODROV - Ответ#9 - Правильный ответ, самый быстрый. Скорость в ущерб памяти Улыбка    +1.
rofl
супер!!! в ущерб не только памяти, но психичекого состояния программера... я б после заполнения матрицы а точно двинулся бы Смеющийся
вообже такой вариант еще вчера появлялся, но я его отбросил, как ответ абсурдней абсурдного  Строит глазки
Записан
Sochin
Злой модератор
Декан
*****

Карма: +108/-6
Offline 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 Offline

Награды:
За III место в фотоконкурсе \
Сообщений: 221



« Ответ #13 : Февраль 27, 2007, 12:56:33 »

Ставишь мультиплексоры, а после них счетчики:). Работать будет быстрее всего остального.
Очень хотелось бы схемку с мультиплексором увидеть ....
хе-хе
Записан

Мне говорили: «Ты злой», и я соглашался. Мне говорили: «Ты не злой», и я не находил возражений. Сам-то я не хотел ни добра, ни зла и даже не думал об этом. Я просто шел своим Путем, а люди потом подбирали названия для моих поступков. М.Симонс
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Penguins Counter Powered by MySQL Powered by PHP Powered by SMF 1.1.8 | SMF © 2006-2008, Simple Machines LLC Valid XHTML 1.0! Valid CSS! Internetmap
Страница сгенерирована за 0.139 секунд. Запросов: 33.