算法小碎片(一)

来源:互联网 发布:学佛软件下载 编辑:程序博客网 时间:2024/05/17 04:36

简单了解空间复杂度(Space complexity)


空间复杂度(Space complexity)=指令空间(instruction space)+数据空间(data space)+环境栈空间(environment stack space)


指令空间(instruction space)的决定因素:编译器、编译器配置、目标机。编译器是决定代码最终占用存储空间多少的一个最为重要的因素。编译器在配置为优化模式下和非优化模式下,产生的结果也是不同的。目标机的不同也会对编译结果有影响(例如是否具有浮点处理单元)。


数据空间(data space)包括:常量和简单变量占用空间、动态数组及动态实例占用空间,两个部分。大多数编译器对于变量的存储空间都有定义,但不一定相同。


环境栈空间(environment stack space)是一个常不被人熟知部分,或许和人们不曾关注函数调用及调用结束时期的细节有关?实际上,在此过程中环境栈起着保存数据的重要作用。通常被保存的数据包括:返回地址和当前调用的函数的全部局部变量以及形式参数。环境栈空间(environment stack space)中的递归栈空间(recursion stack space)尤其值得关注。递归栈空间(recursion stack space)和递归函数的局部变量占用空间、形式参数占用空间以及递归调用深度密切相关。通常把尾递归(tail recursion)转化为迭代可以起到优化作用。


总的来说:占用空间= 固定空间+可变空间。
固定空间= 指令空间+简单变量空间+常量空间
可变空间= 动态分配空间+递归栈空间
原创粉丝点击