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

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

Количество элементов в множестве [D7, WinXP]


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

JanMihail ©   (2008-07-02 15:08:00) 

Как рационально узнать количество элементов в множестве?
Например:
[1..7]      - 7
[1, 3..5]  - 4


Sapersky   (2008-07-02 17:32:00) [41]

Ну вот ещё вариант моего телепатора:

function GetElementCount(pSet : PByte; ByteSize : Integer): Integer;
Const BitCnt : array[ 0..255 ] of Byte =
(
 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
);
Var n : Integer;
begin
Result := 0;
For n := 0 to ByteSize-1 do begin
 Inc(Result, BitCnt[pSet^]);
 Inc(pSet);
end;
end;

Использовать:
Cnt := GetElementCount(@aSet, SizeOf(aSet));

Идея утащена отсюда:
http://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetTable


Johnmen   (2008-07-02 16:46:00) [42]


> Leonid Troyanovsky ©   (02.07.08 16:29) [5]
> Или я чего-то не понял.

Просто телепаторы у всех по-разному срабатывают :)


Anatoly Podgoretsky   (2008-07-02 16:34:00) [43]

> Игорь Шевченко  (02.07.2008 15:26:03)  [3]

Спорно, но имеет право на жизнь, если обоснуешь.


Leonid Troyanovsky   (2008-07-02 16:29:00) [44]


> Игорь Шевченко ©   (02.07.08 15:26) [3]

> Johnmen ©   (02.07.08 16:05) [4]

Это ж не открытый массив. Или я чего-то не понял.

--
Regards, LVT.


Johnmen   (2008-07-02 16:05:00) [45]

Ord(High)+1


Игорь Шевченко   (2008-07-02 15:26:00) [46]

High - Low + 1


Правильный-Вася   (2008-07-02 15:22:00) [47]

перебором?
несчетные множества дельфи вроде не поддерживает


Сергей М.   (2008-07-02 15:19:00) [48]

Точно так же, как нерационально


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

Наверх

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