![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Количество бит в байте
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