ВУЗ:
Составители:
Рубрика:
50
взгляд.  Приведем,  например,  упоминаемую  в  начале  пункта  хеш-функцию  для 
английского словаря, вырезающую из любого слова первую букву: 
function Hash(s: string): integer; 
begin 
  if Length(s)=0 then 
    Result:=0 
  else Result:=Ord(s[1]) mod 26;  
end; 
Эта  хеш-функция  неудачна  по  двум  причинам.  Во-первых,  количество  слов,  на-
чинающихся на разные буквы, существенно различается, т.е. не соблюдается ос
-
новной принцип хеширования – перемешивание. Во-вторых, при хранении боль-
шого  количества  строк  в  хеш-таблице  значения N=26 уже  недостаточно.  Более 
удачной является хеш-функция, учитывающая все символы строки, например, та-
кая: 
function Hash(s: string): integer; 
var i: integer; 
begin 
  Result:=0; 
  for i:=1 to Length(s) do 
     Result:=(Result*17+Ord(s[i])) mod N; 
end; 
Литература 
1.  Зеленяк  О.  Практикум  программирования  на Turbo Pascal / О.  Зеленяк. – М.: 
DiaSoft, 2002. – 310 с. 
2. Ставровский А. Турбо Паскаль 7.0 / А.Ставровский. – Киев: BHV, 2001. – 400 с. 
3. Вирт Н. Алгоритмы и структуры данных / Н. Вирт. – М.: Мир, 1989. – 360 с. 
