Там есть группа:Как найти y, когда x задан, и список точек?
S = {(xi,yi)|1 ≤ i ≤ n}
из п точек. Нет 2 балла (xi,yi) (xj,yj) where xi = xj and yi = yj
. Это означает, что значения x и y уникальны. Мне нужно найти структуру данных, которая поддерживает следующие функции:
- Принято x, возвращает значение y, где (x, y) находится в S. Если оно не существует, возврат «не существует».
- Учитывая y, верните значение x, где (x, y) находится в S. Если он не существует, возврат «не существует».
Простым решением будет создание двух отсортированных массивов (один из которых сортируется в соответствии со значениями x, а второй сортируется в соответствии с значениями y). Чтобы найти y с заданным x, возьмет O(logn)
, используя двоичный поиск. То же самое для нахождения x.
Я не могу использовать более одного массива (из n элементов), и каждый элемент является точкой. Мне нужно найти эффективную структуру данных, которая может делать эти действия в оптимальное время. Мне нужно найти:
T(first function)+T(second action)
.
Какая структура данных является наиболее эффективной в этом случае?
спасибо.
может быть только несколько значений x для некоторого y и наоборот. Например: (1, 1) (1, 3), у вас будет две записи в 'mapYtoX' и только одна в' mapXtoY'. – Assaf
Использование определенного вопроса в вопросе (например, «Учитывая y, return ** ** значение x») исключает этот случай. –
ОК, хорошая точка. OP использует «BiMap» – Assaf