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'ом. Это памяти ест чуть больше, но не факт, что работает быстрее моего первого варианта. А компромиссный-то вариант какой? Что-то я запутался. Хелп плиз.


Германн   (2007-10-08 01:26:00) [1]


> Kerk ©   (08.10.07 01:23) [88]

Ты всех заразил "сотрясением мозгов" :-)


Kerk   (2007-10-08 01:23:00) [2]

Ну вы блин даете :)


Германн   (2007-10-06 01:41:00) [3]

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


Anatoly Podgoretsky   (2007-10-06 01:25:00) [4]

> guestfromwww  (06.10.2007 01:24:25)  [85]

Вопрос весьма интересный, только к теме не имеет отношения.


guestfromwww   (2007-10-06 01:24:00) [5]

Кто, где и какую берёт траву?


Anatoly Podgoretsky   (2007-10-06 00:37:00) [6]

> homm  (06.10.2007 00:34:23)  [83]

Я еще молчу про оперирования тиками, да на разных процессорах, хотя тесты на РСДН четко показали как меняются результаты при смене процессора.
Если уж мерить, то в тактах процессора, и не в циклах, а однократное прохождение теста, цикл только для перебора параметров.


homm   (2007-10-06 00:34:00) [7]

> [82] Anatoly Podgoretsky ©   (06.10.07 00:18)
> один байтами оперирует, а другой кардиналами

А нужно скальпелем ;)


Anatoly Podgoretsky   (2007-10-06 00:18:00) [8]

> Суслик  (06.10.2007 00:14:21)  [81]

Вот вот, один байтами оперирует, а другой кардиналами.


Суслик   (2007-10-06 00:14:00) [9]

не братцы, давайте 4х байтовые числа использовать.
тут я круче буду


oxffff   (2007-10-05 23:09:00) [10]


> на равномерном диапазоне 0..255:


Это как?


Leonid Troyanovsky   (2007-10-05 23:09:00) [11]


> homm ©   (05.10.07 22:40) [78]

> Какой может быть характер у данных при тупом переборе значений
> от 0 до 255 ???

Характер же зашел дальше, т.е. вплоть до MAXINT.

--
Regards, LVT.


homm   (2007-10-05 22:40:00) [12]

> [77] Anatoly Podgoretsky ©   (05.10.07 22:25)

Какой может быть характер у данных при тупом переборе значений от 0 до 255 ???


Anatoly Podgoretsky   (2007-10-05 22:25:00) [13]

Все эти тесты показывают их непредсказуемость, зависимость от характера данных. Я уже давно, зная эту особенность, не обращаю на них внимания. Всегда можно написать тест, который покажет превосходство.


homm   (2007-10-05 22:15:00) [14]

на равномерном диапазоне 0..255:
953
2907
453

Jeer всех сделал.


REA   (2007-10-05 15:13:00) [15]

Asm BT еще вроде есть, но это в лоб


Jeer   (2007-10-05 15:00:00) [16]


> oxffff ©   (05.10.07 14:35) [72]


> Давайте пригласим независимых тестеров. :)


Да тут целый форум бездельников - пробуйте, тем более - тяпница.:)


oxffff   (2007-10-05 14:38:00) [17]


> Leonid Troyanovsky ©   (05.10.07 14:30) [71]
>
> > Суслик ©   (05.10.07 13:40) [69]
>
> > может суслик (лень проверять, если честно)
>
> Раз в 10 суслик быстрее oxffff.
> На диапазоне 0..MAXINT
>
> --
> Regards, LVT.


Да ладно вам.
На "неплотных" единичках bsf сделает свое дело.  
А плотных согласен с вами будет быстрее.


oxffff   (2007-10-05 14:35:00) [18]


> Jeer ©   (05.10.07 14:21) [70]
> Какие-то неправильные у вас компьютеры:


Давайте пригласим независимых тестеров. :)


Leonid Troyanovsky   (2007-10-05 14:30:00) [19]


> Суслик ©   (05.10.07 13:40) [69]

> может суслик (лень проверять, если честно)

Раз в 10 суслик быстрее oxffff.
На диапазоне 0..MAXINT

--
Regards, LVT.


Jeer   (2007-10-05 14:21:00) [20]

Какие-то неправильные у вас компьютеры:

0:
1172
881
881

128:
6740
1993
1842

31:
4246
7551
1833

255:
6660
11717
1832


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

Наверх

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