确定程序的整体空间复杂性

时间:2014-09-08 09:35:49

标签: 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(max(k + M,2M) 或者只是O(M)?

请帮忙。

2 个答案:

答案 0 :(得分:0)

如果M总是大于K,则O(K + M)为O(M)。因此,最终结果为O(M)。

第一部分:O(k + M)不正确,只是O(M)

第二部分:O(2M)不正确,因为我们没有按顺序使用常数所以正确的是O(M)

总体O(M)+ O(M)==> O(M)。

答案 1 :(得分:0)

两种情况都是正确的。但是从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)) iff 存在x0cx>x0暗示g(x) >= c.f(x)