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

 

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

  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.

 

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

 








Дата добавления: 2016-01-29; просмотров: 1257;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.003 сек.