Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Oleg Khrulev                         2:5020/175.2   02 Jul 2003  17:16:42
 To : Alexey V. Skoufyin
 Subject : Хэш функция
 -------------------------------------------------------------------------------- 
 
 Wed Jul 02 2003 15:58, Alexey V. Skoufyin wrote to All:
 
  AVS> From: "Alexey V. Skoufyin" <skuf@cps.tver.ru>
 
  AVS> Hарод! Подскажите хэш-функцию для строк (длина строки не более 100
  AVS> символов), дающую более-менее равномерное распределение ключа в
  AVS> интервале 0..n-1, n < 1024
 
 ==========================================================================
 static int IdentLength;
 static unsigned int HashValue;
 
 //  maxHashTable
 //  ------------
 //  Максимальное значение хэша ( а также размер хэш-таблицы )
 
 // Здесь просто берешь любое простое число меньше 1024  
 const int  maxHashTable  = ... 
 const int  maxHashTable2 = 1;
 
 //  Identifier
 //  ----------
 //  Массив для текущего идентификатора или служебного слова.
 const unsigned int sizeArrIdentifier=100;
 static char Identifier[ sizeArrIdentifier ];
 
 static char* CurrIdent;  // текущий указатель в этом массиве 
 
 //  static void  Hash ( char*& Source )
 //               ----
 //  Функция вычисляет два значения: хэш-значение и длину 
 //  идентификатора и присваивает их глобальным переменным.
 //  Параллельно функция копирует идентификатор в гобальный
 //  буфер.
 //  Символы берет прямо из исходного текста.
 //  Заметим, что функция модифицирует указатель Source.
 //  Перед выходом функции Source указывает на первый символ
 //  за идентификатором.
 void  Hash(char*& Source)
 {
     const int MachWord=32;           // Константа для хэш
     const int HashMask=0xf0000000;
     unsigned long g,key;
     char S;
     IdentLength=0;
     CurrIdent=Identifier;
 
     for(key=0; S=*Source,isalnum(S)||S=='_'; IdentLength++,Source++)
     {
   key=(key<<4)+S;
   if ((g=key&HashMask)!=0)
   {
       key=key^(key>>(MachWord-8));
       key=key^g;
   }
   *CurrIdent++=S;
     }
     HashValue=key%maxHashTable;
     *CurrIdent='\0';
 }
 ==========================================================================
 
 Oleg
 
 --- ifmail v.2.15dev5
  * Origin: FidoNet Online - http://www.fido-online.com (2:5020/175.2)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Хэш функция   Alexey V. Skoufyin   02 Jul 2003 15:58:17 
 Re: Хэш функция   Nick Ivanych Kovaliov   02 Jul 2003 17:00:41 
 Хэш функция   Oleg Khrulev   02 Jul 2003 17:16:42 
 Re: Хэш функция   Dmitriy Iassenev   02 Jul 2003 18:07:43 
 Re: Хэш функция   Oleg Khovayko [SPAM trap - don\'t re   10 Jul 2003 05:06:04 
Архивное /ru.algorithms/3300c0b6ce8c.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional