为了账号安全,请及时绑定邮箱和手机立即绑定

映射O(1)搜索键和值

映射O(1)搜索键和值

慕婉清6462132 2021-04-05 12:28:30
考虑我有一堂课:data class User(val userId: String, val roles: List<String>)另外,我有一些字符串sessionId,我需要O(1)时间通过sessionId和来检索数据userId。我认为BiMap<String, User>能解决我的问题,但通过用户的搜索是不是O(1)因为我要投User给userId第一。另一个解决方案是覆盖User仅userId考虑到哈希码/等式,但这是一个肮脏的技巧。
查看完整描述

1 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

User转换userIdO(1)。如果您要进行复杂度分析,则只需要取指数最大的术语,其余的取而代之。

如果您执行相同的操作1000次,O(1)则始终始终执行1000次操作仍然会如此。如果运算的数量是恒定的,并且不取决于输入的大小,则说明您具有O(1)复杂性,但是具有较高的恒定因子

至于你的问题:

您可以使用任意数量的Maps来查找Users,它仍然是O(1)

val sessionLookup = mapOf<String, User>()
val userIdLookup = mapOf<String, User>()

在这里,您有两个Map,用于将会话ID和用户ID映射到User自身。

在这里重要的是,您为s创建查找(例如,userId-UsersessionId-之间的映射User),User通过其sessionId或userId获取用户的操作是O(1)因为您不必搜索。您可以将空间复杂度(的大小Map)与时间复杂度(将O(n)搜索转换为O(1)查找)进行权衡。

如果您真的想进行渐进复杂性分析,建议您本书


查看完整回答
反对 回复 2021-04-28
  • 1 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信