Приведение User
к userId
равно O(1)
. Если вы выполняете анализ сложности, вам нужно только взять термин с наибольшим показателем и отбросить остаток.
Если вы выполняете одну и ту же операцию 1000 раз, она все равно будет O(1)
, если вы всегда выполняете ровно 1000 операций. Если количество операций является постоянным и не зависит от размера ввода, у вас есть O(1)
сложность, но у вас есть высокие постоянные коэффициенты .
Что касается вашей проблемы:
Вы можете иметь любое число Map
s, которое будет использоваться для поиска ваших User
s, оно все равно будет O(1)
:
val sessionLookup = mapOf<String, User>()
val userIdLookup = mapOf<String, User>()
Здесь у вас есть два Map
, которые сопоставляют идентификаторы сеансов и идентификаторы пользователей с самим User
.
Здесь важно то, что вы создаете поиски (например, отображение между userId
- User
и sessionId
- User
) для ваших User
с и операция , чтобы получить пользователя с помощью его sessionId или userId равен O(1)
, потому что вам не нужно искать. Вы изменяете сложность пространства (размер Map
с) на сложность времени (преобразовывая поиск O(n)
в поиск O(1)
.
Если вы действительно хотите приступить к анализу асимптотической сложности, я бы предложил эту книгу .