如何在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
相关产品推荐
相关产品推荐

