数据结构——空间复杂度

1. 什么是空间复杂度?

空间复杂度是指算法在运行时,额外创建的变量占用的空间大小。原本存在的变量占用的空间不算入空间复杂度。

2. 如何计算空间复杂度?

空间复杂度和时间复杂度一样采用O()表示,如果算法运行时额外创建N个变量,则空间复杂度为O(N);若创建常数个变量,则空间复杂度为O(1)。 

空间复杂度示例: 

 1. 计算冒泡排序的空间复杂度?

void BubbleSort(int* a, int n)
{
    assert(a);
    for (size_t end = n; end > 0; --end)
    {
    int exchange = 0;
    for (size_t i = 1; i < end; ++i)
    {
        if (a[i-1] > a[i])
        {
            Swap(&a[i-1], &a[i]);
            exchange = 1;
        }
    }
    if (exchange == 0)
        break;
    }
}

 算法执行时额外创建的变量有end,exchange,i,一共有常数个变量,所以空间复杂度为O(1)。

 2. 计算递归Fac的空间复杂度?

long long Fac(size_t N)
{
    if(N == 0)
        return 1;
     
    return Fac(N-1)*N;
}

算法执行时同时调用了Fac函数N次,每调用一次Fac函数时的空间复杂度为O(1),所以该算法空间复杂度为O(N)。

3. 计算斐波那契递归的空间复杂度? 

long long Fib(size_t N)
{
    if(N < 3)
        return 1;
 
    return Fib(N-1) + Fib(N-2);
}

算法执行时首先调用Fib(N),当函数执行到最后return语句时会先调用Fib(N-1),然后在Fib(N-1)里面再调用Fib(N-2),一直调用到Fib(1)。在这个过程中函数Fib被同时调用了N次,每次调用的空间复杂度为O(1),所以这个过程的空间复杂度为O(N)。仅当Fib(N-1)分支计算完成之后才会执行Fib(N-2),因此,整个过程可以看做是在同一块空间里反复进行计算。所以该算法的空间复杂度为O(N)。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值