You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在O(1)时间复杂度下从Python集合中检索指定Person对象?

如何以O(1)时间复杂度查找指定姓名的Person实例

要实现O(1)时间复杂度的查找,核心是利用**字典(dict)**的键值对快速访问特性——字典的键查找操作时间复杂度为O(1)。具体做法是把Person实例的姓名作为字典的键,实例本身作为对应的值,这样就能直接通过姓名定位到目标实例。

修改后的实现代码

from dataclasses import dataclass

@dataclass
class Person:
    name: str
    age: int
    
    def __str__(self):
        return self.name

# 创建Person实例
john = Person('john', 20)
jack = Person('jack', 25)
peter = Person('peter',30)

# 构建姓名到Person实例的映射字典(核心优化点)
people_map = {person.name: person for person in [john, jack, peter]}

# O(1)时间获取peter实例
print(people_map['peter'])

关键说明

  • 原代码用集合存储Person实例,集合的查找只能针对实例本身,无法直接通过姓名索引,遍历筛选的时间复杂度是O(n),不符合需求。
  • 字典的键使用姓名字符串(本身具备可哈希特性,无需额外修改Person类的__hash__方法),值对应Person实例,通过people_map['peter']就能直接定位到目标实例,操作时间复杂度为O(1)。
  • 因为题目明确所有Person对象的姓名唯一,所以不用担心键冲突问题,每个姓名对应唯一的实例。

内容的提问来源于stack exchange,提问作者meg hidey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:25:23