zoukankan      html  css  js  c++  java
  • 空间复杂度(Space Complexity)

    空间复杂度(Space Complexity)

    算法得存储量包括:

      1.程序本身所占空间。

      2.输入数据所占空间。

      3.辅助变量所占空间。

    输入数据所占空间只取决于问题本身,和算法无关,则只需分析除输入和程序之外得辅助变量所占额外空间。

    空间复杂度是对一个算法在运行过程中临时占用得存储空间大小的量度,一般也作为问题规模n得函数,以数量级形式给出,记作:

      S(n) = O(g(n))

    g(n)的计算规则和时间复杂度一致

    空间复杂度分析1:

    1 int fun(int n){   
    2     int i,j,k,s; 
    3         s=0;
    4         for (i=0;i<=n;i++)           
    5                for (j=0;j<=i;j++)      
    6                        for (k=0;k<=j;k++)     
    7                           s++; 
    8         return(s);
    9 }

    由于算法中临时变量得个数与问题规模n无关,所以空间复杂度均为

      S(n) = O(1)

    空间复杂度分析2:

     1 void fun(int a[],int n,int k) 
     2    //数组a共有n个元素
     3  {    int i;
     4     if (k==n-1)
     5        for (i=0;i<n;i++)  
     6            printf(“%d
    ”,a[i]);  //执行n次
     7     else
     8     {  for (i=k;i<n;i++)
     9         a[i]=a[i]+i*i;      //执行n-k次
    10        fun(a,n,k+1);
    11     }
    12  } 

      S(n) = O(g(1*n))

    此方法属于递归算法,每次调用本身都要分配空间,fun(a,n,0)的空间复杂度为O(n)。

    注意:

      1.空间复杂度相比时间复杂度分析要少。

      2.对于递归算法来说,代码一般都比较简短,算法本身所占用的存储空间较少,但运行时需要占用较多的临时工作单元。

    若写成非递归算法,代码一般可能比较长,算法本身占用的存储空间较多,但运行时将可能需要较少的存储单元。

  • 相关阅读:
    ORACLE错误笔记
    SQL-考试各科目的成绩以及各科目的参与考试次数
    MySql有几条更新sql不能执行时的解决方案
    面试中常遇到的算法面试题
    MySql绿色版安装教程
    Javaweb
    关于JavaWeb不使用框架上传文件的简单实现
    SSM框架
    数据库
    J2SE
  • 原文地址:https://www.cnblogs.com/zang1998/p/11552931.html
Copyright © 2011-2022 走看看