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