Algorithm 确定程序的总体空间复杂度
在一个程序中,我使用两种数据结构 1:大小为k的指针数组,每个指针指向一个链接列表(因此,总的“k”列表)。所有列表中的节点总数=M…(类似于使用单独链接的哈希,k是固定的,M可以变化) 2:另一个大小为M的整数数组(其中M=上面的节点数)Algorithm 确定程序的总体空间复杂度,algorithm,Algorithm,在一个程序中,我使用两种数据结构 1:大小为k的指针数组,每个指针指向一个链接列表(因此,总的“k”列表)。所有列表中的节点总数=M…(类似于使用单独链接的哈希,k是固定的,M可以变化) 2:另一个大小为M的整数数组(其中M=上面的节点数) 问题是:该项目的总体空间复杂度是多少?是下面这样的吗 第一部分:O(k+M)或仅仅是O(M)…我想两者都是正确的 第二部分:O(2M)或仅仅O(M)…两者都正确吗 总体O(k+M)+O(2M)==>O(最大k+M,2M) 还是仅仅是O(M) 请帮助。O(K+
问题是:该项目的总体空间复杂度是多少?是下面这样的吗 第一部分:O(k+M)或仅仅是O(M)…我想两者都是正确的 第二部分:O(2M)或仅仅O(M)…两者都正确吗 总体O(k+M)+O(2M)==>O(最大k+M,2M) 还是仅仅是O(M) 请帮助。O(K+M)是O(M),如果M总是大于K。因此,最终结果是O(M) 第一部分:O(k+M)不正确,它只是O(M) 第二部分:O(2M)不正确,因为我们不按顺序使用常数,所以正确的是O(M)
总的O(M)+O(M)==>O(M)。在这两种情况下都是正确的。但是由于
O(k+M)=O(M)
,假设k
常数,每个人都会使用最简单的符号,即O(M)
对于第二部分,单个数组是O(M)
总的来说,它将是O(k+M+M)=O(max(k+M,2M))=O(M)
(我们可以“忘记”大O符号中的乘法和加法常数-除非你的时间是常数)
作为提醒,g(x)=O(f(x))
如果存在x0
和c
,则x>x0
意味着g(x)>=c.f(x)