Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие(А4).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
3.19 Mб
Скачать

6.3.2 Нелинейные списковые структуры данных

Нелинейный список — множество элементов, каждый из которых может быть либо записью, либо списком.

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

Перечисление всех списков из записей а1, а2, .... aN, образующих множество L0, сводится к следующему. Обозначим через Li' множество всех кортежей с элементами из Li. Введем последовательность множеств:

L1 = L0' + L0;

L2 = L1' + L1;

L3 = L2' + L2,

где «+» — это знак объединения множеств.

Все списки содержатся в множестве L = L0 + L1 + …Li+...

Пусть L0 = {a, b}. Тогда, например,

L1 = {(a, b), (a), (b), a, b}

L2°= {((а, b), (a), (b), a, b), ((a, b), (a), (b), a), ... } и т.д.

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

Все линейные списки содержатся в множестве L0. Записи, входящие в список, могут занимать произвольные участки в памяти компьютера.

Однонаправленный вариант списка ((a, b), b, ((c), c)) показан на рис. 6.11.

Адреса связи, принадлежащие каждой записи, образуют звено связи. В звене связи однонаправленного списка два адреса: первый указывает на следующий элемент списка, второй — на подсписок или запись. В звене связи двунаправленного списка четыре адреса связи: два из них обеспечивают прямое и обратное направление в списке, третий и четвертый адресуют начало и конец подсписка. Списковые структуры данных могут иметь два вида представления: с помощью аналитической записи и графической интерпретации структуры списка.

Рис. 6.11 — Представление списка ((a, b), b, ((c), c)) в памяти компьютера с подробными комментариями всех элементов списков

Аналитическая запись списковой структуры строится по следующим правилам:

  • в качестве элемента сложного списка может выступать список любой структуры, который может являться подсписком данного списка;

  • каждый подсписок заключается в круглые скобки;

  • элементы списка записываются последовательно один за другим согласно порядку их следования и отделяются друг от друга запятыми;

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

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

Рассмотрим пример более сложной списковой структуры:

((a, (b, ( )), b), (b, (a)), b).

По заданной аналитической записи списка необходимо построить её графическую интерпретацию. Следует выполнить следующие действия:

  • отбросить внешние скобки;

  • найти в списке количество глобальных элементов (которые могут быть сложными или простыми).

Первый элемент — сложный (подсписок 1) — (a, (b, ( )), b).

Второй элемент — сложный (подсписок 2) — (b, (a)).

Третий элемент — простой b.

При графической интерпретации структуры списка на 1-ом уровне задаются указатели (звенья связи) для глобальных элементов (в данном случае — трех) (см. рис. 6.12).

Рис. 6.12 — Представление списка ((a, (b, ( )), b), (b, (a)), b)

в памяти компьютера

На 2-ом уровне задаётся структура подсписков (подсписок 1, подсписок 2), из которых состоят глобальные элементы, и так далее.

Подсписок 1 (a, (b, ( )), b) состоит из трех элементов:

  • простой элемент a;

  • сложный элемент (подсписок 3);

  • простой элемент b.

Подсписок 2 (b, (a)) состоит из двух элементов:

  • простой элемент b;

  • сложный элемент (подсписок 4).

Подсписок 3 (b, ( )) состоит из двух элементов:

  • простой элемент b;

  • сложный элемент (подсписок 5) —

  • незаполненный (пустой подсписок);

Подсписок 4 (a) содержит простой элемент a.

Для задания однонаправленной списковой структуры необходима следующая ассоциативная информация:

  • указатель списка, в котором задаётся адрес расположения первого элемента списка;

  • указатели элементов:

а) для простого элемента этот указатель содержит информацию о расположении следующего элемента и информацию о расположении значения данного элемента (идентификатора);

б) для сложного элемента в этом указателе находится информация о расположении первого элемента, относящегося к данному подсписку.

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

Имеет смысл задача выбора лучшей организации данных. В табл. 6.3 представлены оценки методов организации данных по наиболее важным критериям, что позволяет сделать ряд выводов.

Критерии

оценки

Организация данных

последовательная

списковая

бинарное

дерево

Время формирования

~ M(log2M)

~ M(log2M)

~ М(1оg2М)

Время поиска

~ log2M

~ М

~ log2M

Время корректировки

~ М

~ М

~ log2M

Объем дополнительной памяти

0

~ М

~ М

Таблица 6.3 — Оценки методов организации данных

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

Это объясняется необходимостью пересылки записей в процессе сортировки последовательного массива, а в массиве и бинарном дереве при формировании пересылаются адреса связи, а не целые записи.

По времени поиска последовательный массив и бинарное дерево предпочтительнее списка. Минимальное время корректировки характерно для бинарного дерева, а минимальный объем дополнительной памяти — для последовательного массива.

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