zoukankan      html  css  js  c++  java
  • 269.算法的存储空间需求

      例如,有以下算法,其中临时空间为变量i、maxi占用的空间。

    所以,空间复杂度是对一个算法在运行过程中临时占用的存储空间大小的量度,一般也作为问题规模n的函数,以数量级形式给出,记作:
    S(n)=O(g(n))、Ω(g(n))或Θ(g(n))
    其中渐进符号的含义与时间复杂度中的含义相同。

    int max(int a[],int n)
    {   int i,maxi=0;
        for (i=1;i<=n;i++)
        if (a[i]>a[maxi])
             maxi=i;
        return a[maxi];
    }
    函数体内分配的变量空间为临时空间,不计形参占用的空间,
    这里的仅计i、maxi变量的空间,其空间复杂度为O(1)。

    • 算法的存储量包括:
      • 1.输入数据所占空间
      • 2.程序本身所占空间
      • 3.辅助变量所占空间
    【例1.9】分析例1.6算法的空间复杂度。  
    void func(int n)
    {   int i=1,k=100;
        while (i<=n)
        {      k++;
          i+=2;
        }
    }
      解:该算法是一个非递归算法,其中只临时分配了i、k两个变量的空间,它与问题规模n无关,所以其空间复杂度均为O(1),即该算法为原时工作算法。
    【例1.10】有如下递归算法,分析调用
        maxelem(a,0,n-1)
        的空间复杂度。
    int maxelem(int a[],int i,int j)
    {   int mid=(i+j)/2,max1,max2;
        if (i<j)
        {    max1=maxelem(a,i,mid);
           max2=maxelem(a,mid+1,j);
        return (max1>max2)?max1:max2;
        }
        else return a[i];
    }
       解:执行该递归算法需要多次调用自身,每次调用只临时分配3个整型变量的空间(O(1))。
       设调用maxelem(a,0,n-1)的空间为S(n),有:
    S(n)=O(1)            当n=1
    S(n)=2S(n/2)+O(1)        当n>1     o(1)是int mid=(i+j)/2,max1,max2;常量空间
    则:
    S(n) 
    = 2S(n/2)+1=2[2S(n/22)+1]+1=22S(n/22)+1+21
    = 23S(n/23)+1+21+22
    = …
    = 2kS(n/2k)+1+21+22+…+2k-1(设n=2k,即k=log2n)
    = n*1+2k-1 = 2n-1 
    = O(n)

    1.3注意

      为什么算法占用的空间只考虑临时空间,而不必考虑形参的空间呢?这是因为形参的空间会在调用该算法的算法中考虑,例如,以下maxfun算法调用max算法:

    void maxfun()
    {   int b[]={1,2,3,4,5},n=5;
      printf("Max=%d
    ",max(b,n));
    }
    int max(int a[],int n)
    {   int i,maxi=0;
        for (i=1;i<=n;i++)
        if (a[i]>a[maxi])
             maxi=i;
        return a[maxi];
    }

    maxfun算法中为b数组分配了相应的内存空间,其空间复杂度为O(n),如果在max算法中再考虑形参a的空间,这样重复计算了占用的空间。

  • 相关阅读:
    spring3.1, hibernate4.1 配置备份,struts2.2.1,sitemesh 2.4.2
    java 动态AOP
    制作可以执行的 JAR 文件包及 jar 命令详解
    struts result Annotation 参考
    Android线段与矩形碰撞检测函数
    防止aspxspy木马列服务 iis信息 执行命令提权等操作
    博客园申请及页面定制CSS
    C# 中将月份格式化为英语缩写格式
    通过Web Service获取天气预报并朗读
    windows下html/javascript调用可执行程序
  • 原文地址:https://www.cnblogs.com/ZanderZhao/p/11490742.html
Copyright © 2011-2022 走看看