算法的好坏有两个指标:需要的内存空间(可以 理解为运行代码需要的内存空间),代码运行的时间(可以简单的理解为代码需要执行的步数)
对于时空转化也是代码优化的重要思想:
程序的设计要不就是时间换空间,要不就是用空间去换时间。并且时间和空间是可以进行相互转化的:对于执行的慢的程序,可以通过消耗内存(即构造新的数据结构)来进行优化。而消耗内存的程序,也可以多消耗时间来降低内存的消耗。
下面举个简单的例子:比如要写一个两个值互换的算法
//时间换空间
//2块内存,3次赋值运算
int a = 5;
int b = 10;
a = a+b;//得到a值为15
b = a-b;//得到b值为5
a = a-b;//得到a值为10
//空间换时间
//3块内存,2次赋值运算
int c = 5;
int d = 10;
int e = c;//得到e为5
c= d;//得到c值为10
d = e;//得到d值为
结论:第一个a和b互换值的算法:总共进行了3次加减运算和三次赋值运算,能够把a和b的值进行互换,没有开辟多余的内存空间。c和d互换的时候,多开辟了一个内存空间存储e,但是这样只需要进行三次赋值运算就可以把c和d的值进行互换。
所以第一个算法空间效率高,时间效率低,第二个算法空间效率低,时间效率高,
时间换空间:在程序当中,请求分页(锁页----pin-memory和分页相对),请求分段。
空间换时间:
- 在项目当中使用各种缓存技术.
- cv中的img2col矩阵乘法实现
分页:(充分利用虚拟内存)一种操作系统里存储器管理的一种技术,可以使电脑的主存可以使用存储在辅助存储器中的数据。操作系统会将辅助存储器(通常是磁盘)中的数据分区成固定大小的区块,称为“页”(pages)。
当不需要时,将分页由主存(通常是内存)移到辅助存储器;当需要时,再将数据取回,加载主存中。相对于分段,分页允许存储器存储于不连续的区块以维持文件系统的整齐