zoukankan      html  css  js  c++  java
  • 算法的时间空间转换

    算法的好坏有两个指标:需要的内存空间(可以 理解为运行代码需要的内存空间),代码运行的时间(可以简单的理解为代码需要执行的步数)

    对于时空转化也是代码优化的重要思想:
    程序的设计要不就是时间换空间,要不就是用空间去换时间。并且时间和空间是可以进行相互转化的:对于执行的慢的程序,可以通过消耗内存(即构造新的数据结构)来进行优化。而消耗内存的程序,也可以多消耗时间来降低内存的消耗。

    下面举个简单的例子:比如要写一个两个值互换的算法

    //时间换空间
    //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)。
    当不需要时,将分页由主存(通常是内存)移到辅助存储器;当需要时,再将数据取回,加载主存中。相对于分段,分页允许存储器存储于不连续的区块以维持文件系统的整齐

  • 相关阅读:
    关于MOTO E2
    Visual Studio 2008 SDK 1.1 Beta 发布
    开始了新的工作
    C# 2.0 的"语法多义性"
    最近画的框架草图
    SQL数据库向ORACLE迁移注意事项
    C#中很多新的特性,提供了更好的“即兴编程”的能力。
    看了点lua相关的东西,有点想法不知能否实现?先记下来慢慢思考。
    读《企业应用架框模式》
    porting cinvoke1.0 to E2 (armlinux)
  • 原文地址:https://www.cnblogs.com/Henry-ZHAO/p/13251416.html
Copyright © 2011-2022 走看看