Инвертированные списки
Основной список не изменяется. Строятся индексы в нужном количестве. В индекс включаются все значения соответствующего вторичного ключа, а также все ссылки на элементы основного списка с данным значением вторичного ключа.
Например, пусть основной список показан в таблице 23. Соответствующие индексы показаны в таблицах 38 – 40:
Таблица 38 Таблица 39 Таблица 40
№ п/п | Шифр учебной группы | Ссылки | № п/п | Дисциплина | Ссылки | № п/п | Оценка | Ссылки | ||
01-АС | Информатика | 1,3 | ||||||||
01-ИЭ | 1,3,5 | Программирование | 2,4 | 2,5 | ||||||
02-ВТ | Физика | 1,4 |
Расположение всех ссылок для некоторого вторичного ключа в одном поле позволяет исключить перебор элементов в цепочке элементов при их поиске.
Рассмотрим, как выполняется задача просмотра.
Пример 16. Пусть надо просмотреть список всех студентов, сдававших информатику, т.е. qпросмотр = (Дисциплина = Информатика, ФИО студента), где Кдоступ = Информатика. Поиск осуществляется последовательным выполнением шагов:
1. по индексу для ключа Дисциплина(таблица 39) находится соответствующий элемент: это первый элемент в списке;
2. выбираются ссылки для этого элемента: это множество {1, 3};
3. по основному списку(таблица 23)выбираются последовательно элементы с номерами 1 и 3 и выводится содержимое поля ФИО студента для этих элементов; получаем список - Иванов И.И. и Сидоров С.С. Работа алгоритма закончена.
Рассмотрим, как решается задача добавления.
Пример 17. Пусть к основному списку надо добавить элемент со структурой:
ФИО студента | Шифр учебной группы | Дисциплина | Оценка |
Ковалев К.К. | 02-ВТ | Программирование |
т.е. qдобавление = (ФИО студента= Ковалев К.К., Шифр учебной группы = 02-ВТ, Дисциплина = Программирование, Оценка = 2), где Кдоступ = Ковалев К.К.
Модифицированный основной список показан в таблице 41, а три индекса - в таблицах 42 – 44. Измененные значения ссылок, а также новый элемент в одном из индексов выделены заливкой; новый элемент в основном списке выделен полужирным шрифтом:
Таблица 41
№ п/п | ФИО студента | Шифр учебной группы | Дисциплина | Оценка |
Иванов И.И. | 01-ИЭ | Информатика | ||
Ковалев К.К. | 02-ВТ | Программирование | ||
Петров П.П. | 02-ВТ | Программирование | ||
Сидоров С.С. | 01-ИЭ | Информатика | ||
Федоров Ф.Ф. | 01-АС | Программирование | ||
Яковлев Я.Я. | 01-ИЭ | Физика |
Таблица 42 Таблица 43 Таблица 44
№ п/п | Шифр учебной группы | Ссылки | № п/п | Дисциплина | Ссылки | № п/п | Оценка | Ссылки | ||
01-АС | Информатика | 1,4 | ||||||||
01-ИЭ | 1,4,5 | Программирование | 2,3,5 | |||||||
02-ВТ | 2,3 | Физика | 3,6 | |||||||
1,5 |
Дата добавления: 2015-03-03; просмотров: 670;