Да, обычно вы можете эффективно инвертировать справочную таблицу (линейное время), , предполагая, что функция является биекцией . Если ваша справочная таблица отображает два разных ключа на одно и то же значение, то нет прямого способа инвертировать таблицу, потому что в конечном итоге вам понадобится значение, сопоставленное двум разным ключам. Если вы согласны с этим, это нормально, хотя может возникнуть вопрос, почему вы пытаетесь построить обратную карту.
Если вы знаете, что каждое значение уникально, вы можете построить таблицу обратного просмотра следующим образом. Сначала создайте структуру данных для хранения сопоставления значений и ключей - возможно, хеш-таблицы, сбалансированного двоичного дерева или необработанного массива, если значения представляют собой маленькие целые числа. Затем выполните итерацию по каждой паре ключ / значение из таблицы поиска, затем вставьте значение отображения & rarr; ключ в новую таблицу поиска. Это можно сделать за линейное время плюс время, необходимое для вставки значений в новый контейнер.