Открыть сервис

Двунаправленное отображение

Двунаправленное отображение (англ. bidirectional mapping, также взаимно однозначное соответствие, биекция) — в математике и информатике отношение между двумя множествами, при котором каждому элементу первого множества соответствует ровно один элемент второго множества, и наоборот, каждому элементу второго множества соответствует ровно один элемент первого. В отличие от обычного (однонаправленного) отображения, двунаправленное отображение является обратимым: для него существует обратное отображение, которое восстанавливает исходный элемент. В программировании двунаправленные отображения реализуются в виде структур данных, поддерживающих поиск как по ключу, так и по значению, а также синхронизацию изменений в обоих направлениях.

Математическое определение

Формально двунаправленное отображение — это биективная функция \( f: A \to B \) между множествами \( A \) и \( B \). Для любого \( a \in A \) существует единственный \( b \in B \) такой, что \( f(a) = b \), и для любого \( b \in B \) существует единственный \( a \in A \) такой, что \( f^{-1}(b) = a \). Обратная функция \( f^{-1}: B \to A \) также является биекцией. Таким образом, двунаправленное отображение устанавливает взаимно однозначное соответствие между элементами двух множеств, что позволяет выполнять операции вставки, удаления и поиска с обеих сторон.

В отличие от сюръекции (отображения «на») и инъекции (вложения), биекция требует одновременного выполнения обоих свойств. Например, отображение \( f(x) = x^2 \) из множества целых чисел в множество неотрицательных целых чисел не является биективным, так как разным \( x \) может соответствовать одно и то же значение (например, \( f(-2) = f(2) = 4 \)).

Виды двунаправленных отображений

В математике

В информатике

Устройство и реализация

Принцип работы

Двунаправленное отображение строится на основе двух обычных однонаправленных отображений (словарей), хранящих пары «ключ — значение» и «значение — ключ». При вставке нового элемента (ключ, значение) проверяется уникальность как ключа, так и значения. Если одно из них уже существует, операция либо отвергается, либо заменяет старую пару. При удалении по ключу автоматически удаляется соответствующая запись в обратном отображении.

Сложность операций

Ограничения

Применение

В программировании

В базах данных

В математике и физике

В лингвистике и обработке естественного языка

Примеры

Пример 1: Двунаправленное отображение в Python (библиотека bidict)

```python from bidict import bidict

Создание двунаправленного отображения

b = bidict({'a': 1, 'b': 2, 'c': 3})

Поиск по ключу

print(b['a']) # 1

Поиск по значению

print(b.inv[2]) # 'b'

Вставка нового элемента

b['d'] = 4 print(b.inv[4]) # 'd'

Попытка вставить дублирующее значение вызовет исключение

b['e'] = 1 # ValueError: '1' уже существует

```

Пример 2: Биекция в математике

Функция \( f(x) = 2x \) на множестве действительных чисел является биекцией. Обратная функция \( f^{-1}(y) = y/2 \) также определена и однозначна.

Критика и ограничения

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →