Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
1

Работа с хэш-таблицами

11.11.2013, 22:03. Показов 1081. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте,прошу вашей помощи в написании программы на тему "Работа с хэш-таблицами". У меня такое задание-нужно для разрешения конфликтов использовать метод открытого перемешивания.

Первичный индекс вычислять с помощью функции расстановки :
Метод свертки
Ключ разбивается на несколько частей, которые затем суммируются таким образом, чтобы сформировать число в требуемом диапазоне. Например, если восьмизначный ключ нужно отобразить в трехзначный номер, то можно поступить так:

f(97434658) = 658 +434+97= 1189 =>189, i=189;
f(31269857) = 857+269+31 = 1157 =>157, i=157;
f(97658434) = 434 +658+97= 1189 =>189, i=189 ‑ коллизия!

Здесь сложение выполняется по модулю 1000, так как нужно получить трехзначный номер. Если же реальное количество записей не превышает, например, 500, то нужно складывать по mod 500.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
Function Convol(key:longint; n: integer):integer;
{метод свертки: преобразование восьмизначного ключа в трехзначный номер; размер  таблицы [1. . n], где n - трехзначное число}
var s:longint;
begin
s:=0;
while key>0 do
begin
s:=s+(key mod 1000);
key:=key div 1000
end;
s:=s mod n+1; 
Convol:=s;
end;

Для определения вторичного индекса использовать метод линейных проб с простым шагом p.

Есть наработки , но я в ступоре не знаю как написать процедуру "Метод свертки"
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
program Hashtablici;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils,CRT32;
const N=100;
      p=97;
type
   rec=record
        key:string;{ключ}
        inf:Integer;
     end;
 htab=array [1..N] of rec;
var t:htab;{основная таблица}
   ch:Char;
    i:Integer;
    s:string;
    i_p:Integer;
    i_vt:integer;
function hfunc (s:string; n:Integer) : Integer;
{Функция расстановки}
var len:Integer;
      i:Integer;
      k:Integer;
      sum:Integer;
begin
  k:=Length(S) div 2;
  sum:=ord (s[k])+ord(s[k+1]) mod n+1;
  hfunc:=sum;
end;
procedure add_rec(var t:htab;i:Integer);
{Занесение записи в хэш таблицу}
var r:rec;
    chislo:Integer;
    j:Integer;
 
begin
   Writeln('Vvedite chislo zapisej : ');
   Readln(chislo);
   while (j<chislo) do
  begin
   Writeln('Vvedite kluch dobabljaemoj zapisi : ');
   Readln(r.key);
   Writeln('Vvedite inform.pole : ');
   Readln(r.inf);
  {Вычисление функции расстановки}
    i:=hfunc(r.key,n);
   {Попытка занесения в таблицу}
   while t[i].key=' ' do
     begin
     t[i]:=r;
     Writeln('Zapis'' pomeshena v poziciju ',i);
     i_p:=i;
     Writeln('i pervichnoe :  ',i_p);
     end;
  end;
   {else
     if(i=i_p)  then
       {Выполняется метод открытого перемешивания. Для определения
       вторичного индекса используется метод линейных проб с простым шагом p}
       {begin
        Writeln('Pozicija zanyata !!!');
        i_vt:=(i_p+p)mod n + 1;
        Writeln('i vtorichnoe : ',i_vt);
        i:=i_vt;
        T[i]:=r;
        Writeln('Zapis'' dobavlena v poziciju ',i_vt);
       end;}
end;
 
begin
  for i:=1 to n do
    t[i].key:=' ';
  {Основной цикл программы}
  repeat
     ClrScr;
     Writeln('1-Zanesenije zapisi v hash-tablicu : ');
     Writeln('2-Poisk zapisi v hash-tablice : ');
     Writeln('--------------------------------------');
     Writeln('0.Vihod');
     Writeln;
     Write('Vash vibor : ');
     ch:=ReadKey;
     Writeln(ch);
     Writeln;
     case ch of
         '1':begin
               add_rec(t,i);
               //Writeln('Najmite ljubuju klavishu');
               ReadKey;
             end;
          '2': begin
                 Writeln('Vvedite kluch iskomoj zapisi : ');
                 Readln(s);
                 find_rec(t,s);
               end;
     end;
  until ch='0';
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2013, 22:03
Ответы с готовыми решениями:

Работа с таблицами
Здравствуйте! На MYSQL есть база с одинаковыми по структуре таблицами но последние столбцы...

Работа с таблицами
Помогите сделать таблицу, как в ворде, только в делфи. Я пыталась, но не могу понять как умножать...

Работа с таблицами
Есть stringgrid1 и stringgrid2,надо из первой таблицы перенести значения во вторую Вроде...

Работа с таблицами
Добрый вечер. Необходима помощь!!!!! Имеется формы: 1,5, изготовитель. Форма 5 используется для...

3
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
14.11.2013, 20:29  [ТС] 2
подскажите
0
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
17.11.2013, 20:20  [ТС] 3
help
0
4 / 4 / 2
Регистрация: 17.10.2012
Сообщений: 176
24.11.2013, 21:10  [ТС] 4
хелп
0
24.11.2013, 21:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.11.2013, 21:10
Помогаю со студенческими работами здесь

Работа с хэш-таблицей
Здравствуйте, получил данные из AD о пользователи, потом сделал хэш-таблицу и пытаюсь по полученной...

Работа с таблицами
Есть база данных - &gt; Таблица(user_foto)-&gt;колонки(id_foto, title_foto, url_foto) Нужно сделать так...

Работа с таблицами
Дана таблица в exel, я переделал её в формат матлаб с помощью Import data. Как исключить из таблицы...

Работа с таблицами
Как сделать так, чтобы textView или IMageView занимали место в ячейке ровно столько, сколько ему...

Работа с таблицами
помогите реализовать эти задания в икселе

Работа с таблицами
Есть 2 файла. они по отдельности хорошо работают. У меня проблема с переменными. Как эти 2 файла...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru