![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хеш-функция.
Владислав © (2006-01-24 11:44:00)Приветствую, Мастера.
Ситуация такая. Есть коллекции элементов, по которым производиться поиск элемента в коллекции по строке-идентификатору. Эти строки состоят из последовательностей символов с кодами #$30-#$39 (т.е. цифры).
Просьба, собственно, такая. Подскажите хеш-функцию, которая давала бы равномерное распределение значений хеша в достаточно большом диапазоне значений.
P.S. До этого строка-идентификатор могла содержать любые символы латинского алфавита, цифры и некоторые другие символы. Простой xor всех символов в строке давал достаточно равномерное распределение хеш значений от 0 до 127. А как теперь поступить с цифрами?..
Владислав (2006-01-24 13:37:00) [41]
> Reindeer Moss Eater © (24.01.06 12:25) [3]
> Double на клиенте для всех NUMBER Oracle.
>
> Везде и всегда.
Не годится.
procedure TfrmMain.Button4Click(Sender: TObject);
var
Val1: Double;
Val2: Double;
begin
Val1 := -1E38;
while Val1 < 1E38 do
begin
Val2 := Val1;
Val1 := Val1 + 1;
if Val1 = Val2 then
begin
ShowMessage('Приплыли');
Break;
end;
end;
end;
Владислав (2006-01-24 13:19:00) [42]
> Leonid Troyanovsky © (24.01.06 13:07) [4]
>
> И какой диапазон оно представляет? 2^38?
> И как оно попадает в строку.
Диапазон NUMBER, в принципе, 1 x 10^-130 - 9.99 x10^125. Диапазон значений, которые теоретически могут встретиться в поле, с которым я работаю, от -10^38 + 1 до 10^38 - 1.
Строку возвращают компоненты DOA.
> Reindeer Moss Eater © (24.01.06 12:25) [3]
> Double на клиенте для всех NUMBER Oracle.
>
> Везде и всегда.
Сейчас подумаю...
Leonid Troyanovsky (2006-01-24 13:07:00) [43]213.234.193.250
> Владислав © (24.01.06 12:22) [2]
> Было бы замечательно, но эта строка - поле таблицы Oracle
> NUMBER(38).
И какой диапазон оно представляет? 2^38?
И как оно попадает в строку.
--
Regards, LVT.
Reindeer Moss Eater (2006-01-24 12:25:00) [44]Double на клиенте для всех NUMBER Oracle.
Везде и всегда.
Владислав (2006-01-24 12:22:00) [45]
> Leonid Troyanovsky © (24.01.06 11:57) [1]
>
> Я бы заменил такую строку на поле Longint, и искал бы по
> ней,
> возможно, что даже без хеш-функции.
Было бы замечательно, но эта строка - поле таблицы Oracle NUMBER(38). Не придумали такой тип целочисленный в Delphi, чтобы такие значения хранить.
Есть еще мысли?
Leonid Troyanovsky (2006-01-24 11:57:00) [46]
> Владислав © (24.01.06 11:44)
> Ситуация такая. Есть коллекции элементов, по которым производиться
> поиск элемента в коллекции по строке-идентификатору. Эти
> строки состоят из последовательностей символов с кодами
> #$30-#$39 (т.е. цифры).
Я бы заменил такую строку на поле Longint, и искал бы по ней,
возможно, что даже без хеш-функции.
--
Regards, LVT.