火影 发表于 7 天前

《空间复杂度(C语言)》

前言

当你写出一段能“跑得起来”的C语言程序时,也许你会觉得:“OK,搞定了!”
但你有没有想过:


[*]这段程序在处理大数据量时,会不会把内存撑爆?
[*]有没有可能用了太多没必要的变量和数组,浪费了资源?
[*]假如要在嵌入式系统或内存有限的装备上跑,它还能正常运行吗?
这时,我们就得引入另一个告急的概念 —— 空间复杂度(Space Complexity)。
空间复杂度,简朴来说,就是分析你的程序到底“吃”了多少内存。它不但能帮助我们优化程序服从,也能制止内存泄漏、程序崩溃等一系列标题。
https://i-blog.csdnimg.cn/direct/f8c87f5ea89c449a9f3684dc20caf598.jpeg#pic_center
一、什么是空间复杂度?

在学习编程时,我们经常关心程序运行的速度,而空间复杂度关注的则是程序运行时**“占用了多少内存”**。
举个例子:
假如你写了一个程序,它在处理数据时必要开辟额外的数组、结构体、变量等存储信息,那么这些就算作了额外空间。空间复杂度就是用来权衡这部分空间使用情况的。
普通理解:

你可以把程序比作一个人在做题:


[*]他面前的试卷是输入数据(这些不算在空间复杂度里)
[*]他额外准备的草稿纸、笔、盘算器就是辅助空间(这些要算)
空间复杂度,关注的就是:这个人必要准备多少张草稿纸?
二、空间复杂度的数学定义

空间复杂度一般用大写的 O 符号表示,例如:


[*]O(1):常数空间,只用很少的变量
[*]O(n):线性空间,比如要开一个数组来存储 n 个元素
[*]O(n^2):平方空间,常见于二维数组或矩阵标题
我们不关心精确的字节数,只看输入规模 n 增加时,额外内存的增长趋势。
三、常见空间复杂度举例(含C语言代码)

页: [1]
查看完整版本: 《空间复杂度(C语言)》