Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Количество бит в байте


Страницы:   1 2 3 4 5

Kerk ©   (2007-10-04 15:47:00) 

Прислали тут тестовое задание.. и есть там вот этот пунктик:

3. Напишите функцию, которая принимает на вход байт и возвращает кол-во установленных в нем битов.
  Сделайте несколько вариантов функции:
  а) Оптимизированной по скорости
  б) Оптимизированной по памяти
  в) Компромиссный вариант
----

Вижу оптимальным такой вариант:

function BitsInByte(B: Byte): Integer;
begin
 Result := 0;
 while B > 0 do
 begin
    Result := Result + (B and 1);
    B := B shr 1;
 end;
end;


Это видимо оптимизировано по памяти.. еще меньше памяти использовать невозможно. Какой же тогда оптимизированный по скорости? Ну можно забить массив (1, 2, 4, 8 .... ) и по нему в цикле пробивать and'ом. Это памяти ест чуть больше, но не факт, что работает быстрее моего первого варианта. А компромиссный-то вариант какой? Что-то я запутался. Хелп плиз.


sniknik   (2007-10-04 16:04:00) [81]

> в) Компромиссный вариант
function BitsInByte(B: Byte): Integer;
begin
 result:= byte(b and 1 > 0) + byte(b and 2  > 0) + byte(b and 4 > 0) + ...;
end;


Сергей М.   (2007-10-04 16:01:00) [82]

Удалено модератором


Kerk   (2007-10-04 15:59:00) [83]


> sniknik ©   (04.10.07 15:56) [5]

Да да.. Я в [2] про это и сказал :)
Осталось компромиссный придумать


Kerk   (2007-10-04 15:58:00) [84]

Удалено модератором


sniknik   (2007-10-04 15:56:00) [85]

> Какой же тогда оптимизированный по скорости?
function BitsInByte(B: Byte): Integer;
const
 mas: array[0.. ] of integer = (0, 1, ... );
begin
result:= mas[b];
end;


Сергей М.   (2007-10-04 15:55:00) [86]


> по скорости - использовать таблицу


Емли xlat поможет, тот правильно подсказывают.


> компромиссный какой?


Смотря что подразумевать под "оптимизированный по памяти)..


shuang   (2007-10-04 15:55:00) [87]

>А компромиссный-то вариант какой?
с постоянной маской и рекурсией


Kerk   (2007-10-04 15:52:00) [88]

Как мне тут верно подсказывают, по скорости - использовать таблицу. :)
А компромиссный какой? :)


Сергей М.   (2007-10-04 15:50:00) [89]

По-моему, в строчке


> Result := Result + (B and 1);


ты нарисовал полную хню)


> Какой же тогда оптимизированный по скорости?


MBo(c) неоднократно предлагал такой вариант.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо