一.有关上篇博客空间复杂度的补充
//空间复杂度由低到高排序:O(1)<O(logN)<O(N)<O(N*logN)<O(N^2)<O(2^N)<O(N!)
//计算机写法
三种写法均表示以二为底N的对数。
二.空间复杂度
空间复杂度与时间复杂度是相同的,都是一种函数式。
空间复杂度并不计算占用多少字节的空间(不同计算机不同软件设置的默认对齐数是不相同的),而是计算算法运行过程中临时(或者是额外)占用空间大小的量度。通俗的讲,空间复杂度是计算变量的个数。
空间复杂度的计算同样遵循大O渐进法。
例1:
除参数外,额外创建的变量有end、i、 exchange。该程序的空间复杂度为O(1)
为什么变量i、exchange占用空间大小计量单位为1,而不是N呢?
因为空间是可以共用的,没有必要重复计算。也就是说变量i 、exchange相当于占有一间房屋,当他们自身变换,比如说穿着、妆容不同时,这间房屋仍旧是一间并且还是原来的属于他们各自本身的那间房屋。
例2:
由于递归,要不断地开辟函数栈帧,每一次调用该函数都会创建一块空间。从Fac(N)调用至Fac(0)会开辟N+1块空间。即该程序的空间复杂度为O(N)。
例3:
即该程序的空间复杂度为O(N)。
例4:
该程序的空间复杂度准确值为N+2,表示为O(N)
例5:
该程序的空间复杂度为O(N)。
讲解如下:
所以,要看递归的空间复杂度,往往要看递归的深度。
空间是可以重复使用的,不可以累计。创建空间,好比租房。释放空间,好比退房。时间是一去不复返,是不可以累计的。
//补充一些计算机专业常用的单位转换:
1byte=8bit
1kb=1024byte
1mb=1024kb
1gb=1024mb
1tb=1024gb
三.顺序表
1.顺序表的概念:
2.静态顺序表声明
3.动态顺序表声明
4.动态顺序表达的增删查改
头文件
相关函数的.c文件
5.顺序表的缺点:
1.顺序表增容,会浪费时间和空间
2.顺序表头部或者中间插入,时间复杂度为O(N)。