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

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

Хеш-функция.


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

Владислав ©   (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.


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

Наверх

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