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

Python列表赋值时间复杂度疑问:SparseVector初始化为何是O(n)?

关于稀疏向量初始化时间复杂度的疑问解答

先看你提供的代码实现:

class SparseVector:
    def __init__(self, nums):
        self.array = nums

    def dotProduct(self, vec):
        result = 0
        for num1, num2 in zip(self.array, vec.array):
            result += num1 * num2
        return result

你判断的没错——就这段代码里的__init__方法来说,self.array = nums只是把传入的列表引用直接赋值给实例变量,本质上是引用的复制操作,时间复杂度确实是O(1),完全不需要遍历整个数组。

答案里提到初始化是O(n),大概率是两种原因:

  • 它混淆了「稀疏向量的标准优化实现」和这段代码的简易实现:真正的稀疏向量为了节省存储空间,初始化时会遍历原数组,只保留非零元素的索引和对应值,这个遍历过程的时间复杂度是O(n);但你贴的代码是简化版,直接存储了整个原数组,没有利用稀疏性做优化。
  • 或者答案默认初始化时需要拷贝整个数组(比如写成self.array = nums.copy()),这种情况下时间复杂度才是O(n),但代码里并没有执行拷贝操作。

简单说:这段代码的__init__时间复杂度确实是O(1),答案的表述要么是针对通用的稀疏向量实现,要么是和当前代码不匹配的错误表述。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:03:23