Скачиваний:
89
Добавлен:
10.05.2014
Размер:
11.4 Mб
Скачать

9. Перемешанная таблица, использующая перемешивание сложением: определение, основные операции, особенности их реализации.

(Алгоритмы и структуры данных, лекция 14.04.2004)

Перемешивание сложением:

Учитывает порядок поступления элементов в таблицу. Шаг перемешивания - сложение индексов с каким-то шагом.

Шаг перемешивания и размер таблицы должны быть взаимно простыми числами. Желательно:

h = N2 , где h - шаг перемешивания, N - размер таблицы.

Свойства:

1.Вся перемешанная таблица отображается вектором;

2.Размер таблицы (вектора) должен быть достаточным для размещения всех элементов таблицы и отображения их ключей (так как значение ключа отображается в индекс вектора);

3.Разделение таблицы на две области является весьма условным и зависит от конкретных значений ключей включаемых в таблицу элементов (в одной ситуации

некоторый элемент вектора может быть отнесен к основной области, в другой

этот же элемент принадлежит области переполнения).

 

Особенности:

 

1.Вся таблица - вектор

2.Чем более разреженная таблица, тем легче и быстрее поиск.

3.При поиске и при вставке алгоритм перемешивания одинаков!

4.При вставке разливают свободную позицию и удалённую

5.Алгоритм поиска может быть модифицирован (?).

Основные операции: добавление, поиск, удаление элемента.

1) Добавление элемента (особенности реализации):

Пусть функция расстановки I(k)=k%10, и набор данных 12, 48, 3, 5, 7, 63, 15, 202, 103, 188, 30, 43, 6, 18, 19. При занесении элемента в таблицу, прежде всего, вычисляется производный ключ и анализируется позиция таблицы (определяемая значением производного ключа):

Если эта позиция свободна, элемент заносится в таблицу (в основную область), и для занесения потребуется только одно обращение к таблице.

Если позиция таблицы занята, тогда начинается процесс перемешивания: последовательно выбираются следующие позиции таблицы с целью найти свободную. В результате в общем случае для занесения элемента в таблицу

требуется несколько обращений.

Определение "открытое перемешивание" обусловлено тем свойством, что элементы таблицы, просматриваемые, начиная с конкретной позиции, являются открытыми для ключей, отображаемых в другие позиции. Как только свободная позиция будет найдена, элемент записывается в нее, и эта позиция считается принадлежащей области переполнения.

Если же при поиске свободной позиции мы возвращаемся в исходную точку, значит в таблице нет свободного места.

12

 

 

 

63

 

 

202

 

 

 

 

I(k)

 

Ключ Информация

I(k)

 

Ключ Информация

I(k)

 

Ключ Информация

0

 

 

0

 

 

0

30

...

 

1

 

 

15

1

 

 

 

1

18

...

 

 

 

 

 

 

 

 

2

12

...

I(k)

2

12

...

19

2

12

...

 

3

3

...

3

3

...

 

3

3

...

48

 

 

4

 

 

 

4

63

...

I(k)

4

63

...

 

 

 

 

I(k)

5

5

...

 

5

5

...

 

5

5

...

6

 

 

 

6

15

...

 

6

15

...

 

7

7

...

 

7

7

...

 

7

7

...

 

8

48

...

 

8

48

...

 

8

48

...

 

9

 

 

 

9

202

...

 

9

202

...

 

10

 

 

 

10

 

 

 

10

103

...

 

11

 

 

 

11

 

 

 

11

188

...

 

12

 

 

 

12

 

 

 

12

43

...

 

13

 

 

 

13

 

 

 

13

6

...

 

 

 

a)

 

 

 

b)

 

 

 

c)

Важный результат, который всегда необходимо учитывать при построении функции расстановки, состоит в том, что для случайных записей средняя длина поиска минимизируется, если функция расстановки отображает одинаковое количество ключей на все позиции таблицы-вектора от 1 до M.

При занесении элементов в таблицу нужно иметь возможность определять, занята позиция таблицы или свободна. Для этого достаточно включить в элемент таблицы дополнительное поле занятости. Структура элемента таблицы может быть представлена

следующим образом: struct Item{

int

busy;

/* признак занятости позиции таблицы */

int

key;

 

Type info;

 

};

2) Поиск:

Поиск элемента осуществляется по такому же правилу: вычисляется производный ключ и анализируется позиция таблицы, которая определяется значением производного ключа.

1.Если искомый ключ находится в этой позиции, поиск завершен успешно, причем потребовалось только одно обращение к таблице.

2.Если позиция свободна, поиск заканчивается не успешно – в таблице нет элемента с искомым ключом.

3.Если позиция таблицы занята, но ключи не совпадают, выбирается и анализируется следующий элемент таблицы (с учетом используемого шага перемешивания).

3)Удаление элемента:

Если для таблицы определена операция удаления элемента (только для динамических таблиц), нужно иметь в виду следующее:

1.При удалении элемента нельзя перемещать информацию в таблице, так как это может привести к нарушению пути доступа к элементу, и элемент, занесенный в таблицу до выполнения операции удаления, в дальнейшем может быть не найден. Достаточно отметить найденную позицию, в которой находится удаляемый элемент, как удаленную.

2.При занесении в таблицу нового элемента удаленная позиция должна рассматриваться как свободная.

3.При поиске элемента удаленная позиция не должна рассматриваться ни как свободная (иначе нельзя будет найти элементы, занесенные в таблицу перед удалением элемента и расположенные после него), ни как занятая; она должна просто пропускаться.

Недостатки:

В приведенном выше примере скопление записей образовалось после третьей позиции, в результате чего для занесения элемента с ключом 202 потребовалось 8 обращений к таблице. Подобное скопление неизбежно при использовании открытого перемешивания. Можно несколько улучшить результаты, если переопределить понятие следующей позиции таблицы. В общем случае использование открытого перемешивания при определении следующей позиции требует увеличения индекса элемента на некоторую величину h, называемую шагом перемешивания (другими словами, значение индекса складывается с шагом перемешивания; поэтому открытое перемешивание называют еще перемешиванием сложением). Значение шага перемешивания может быть любым, но обязательно взаимно простым с величиной, определяющей размер таблицы, чтобы обеспечить просмотр всех ее позиций (например, для таблицы размером 14 элементов можно использовать шаг перемешивания 3 или 5, но нельзя 2 или 6). Выбор шага перемешивания может повлиять на количество обращений к таблице.

10. Перемешанная таблица, использующая перемешивание сцеплением: определение, основные операции, особенности их реализации.

(Алгоритмы и структуры данных, лекция 14.04.2004)

Перемешивание сцеплением:

Область переполнения представлена семейством списков. Свойства таблицы при использовании перемешивания сцеплением:

1.Таблица явно разделяется на 2 области - основную и областьпереполнения.

2.Основная область таблицы представлена вектором, размер которого должен быть достаточен для отображения всех значений ключей.

3.Область переполнения представляет собой семейство списков - отдельный список для каждой области.

Структура элемента. Элемент перемешанной таблицы, использующей перемешивание сцеплением, должен иметь ещё одно поле: поле связи с элементами из области переполнения:

Основная область

 

Область переполнения

 

 

ключ

информация

 

ключ

информация

0

 

 

 

 

0

 

 

 

 

 

 

 

 

ключ

информация

 

 

 

...

...

0

 

 

ключ

информация

0

 

 

0

 

 

 

 

 

На практике отображающий вектор (основную область таблицы) можно представить только массивом указателей на элементы таблицы, а все записи включать в область переполнения. В этом случае все операции с таблицей сначала осуществляют выбор необходимого списка (элемента массива указателей), а затем реализуется требуемая операция со списком (соответствующие операции со списками были рассмотрены ранее). При такой организации таблицы минимальная длина доступа будет равна 2, так как всегда требуется, по крайней мере, одно дополнительное обращение к области переполнения. С другой стороны, выполнение операций вставки и удаления при такой

Соседние файлы в папке docs