Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СТА (лекции+лабы) / СТА Лекция 4.docx
Скачиваний:
46
Добавлен:
16.03.2016
Размер:
37.26 Кб
Скачать

20

Ста: Лекция №4 - Отображения и множества

Версия 2.01, 09 декабря 2014г.

(С) 2012-2014, Зайченко Сергей Александрович, к.т.н, ХНУРЭ, доцент кафедры АПВТ

Отображения и множества

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

  1. Отображения (MAP), или словари (DICTIONARY), реже - таблицы символов (SYMBOL TABLE).

  2. Множества (SET).

Отображения представляют собой хранилища элементов-значений (values), идентифицируемых по данным-ключам (keys). Целью поиска является отыскание элементов-значений по заданному ключу. Такой способ организации данных для поиска также называют ассоциативной памятью.

Отображения напоминают обычные унарные функции (аргумент-ключ, возврат - хранимый элемент), однако функции, такие как SQUARE(X) = X * X , реализуются при помощи вычисляющих инструкций, а отображения предполагают хранение готовых данных-результатов в памяти и поиск в хранилище по аргументу-ключу вместо непосредственного вычисления результата.

Среди основных операций АТД отображение:

  • CLEAR( m ) - полная очистка отображения;

  • IS_EMPTY( m ) : bool - определяет является ли отображение пустым;

  • INSERT ( m, key, value ) - вставка в отображение значения value с ключом key;

  • HAS_KEY ( m, key ): bool - тестирование наличия в отображении элемента с ключом key

  • FIND( m, key ): value - поиск элемента по ключу key;

  • REMOVE_KEY( m, key ) - удаление элемента с ключом key.

Ключи и значения могут быть как одинакового типа, так и разного. Распространенная комбинация - в качестве ключа используется строка (название или уникальное имя), а в качестве значения - указатель на некоторую структуру.

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

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

  • CLEAR( s ) - очищает множество;

  • INSERT( s, key ) - вставка ключа key;

  • HAS_KEY( s, key ): bool - тестирования наличия ключа key внутри множества;

  • REMOVE_KEY( s, key ) - удаление ключа лун из множества;

  • UNION ( s1, s2 ): s - объединение с другим множеством;

  • INTERSECTION( s1, s2 ) : s - пересечение с другим множеством;

  • DIFFERENCE( s1, s2 ) : s - разница с другим множеством;

  • SYMMETRIC_DIFFERENCE( s1, s2 ) : s - объединение разницы s1 и s2 с разницей s2 и s1.

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

Соседние файлы в папке СТА (лекции+лабы)