精华内容
下载资源
问答
  • 2018-06-15 14:55:50

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

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

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

    //时间换空间
    int a = 5;
    int b = 10;
    a = a+b;//得到a值为15
    b = a-b;//得到b值为5
    a = a-b;//得到a值为10
    
    //空间换时间
    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的值进行互换。所以第一个算法空间效率高,时间效率低,第二个算法空间效率低,时间效率高,

    我们在程序当中,请求分页,请求分段,都属于用时间去换空间。在项目当中使用各种缓存技术,都属于利用空间去换时间。

    更多相关内容
  • 如何理解时间复杂度和空间复杂度

    千次阅读 2018-08-01 19:22:05
    如何理解时间复杂度和空间复杂度 算法是一种解决问题的方法,对于同一个问题,往往有很多解决办法,可是如何来评价解决方案的好坏呢?公认的好方法往往效率高,用时短。要合理的给一个算法衡量方式,往往需要从两个...

    如何理解时间复杂度和空间复杂度

    算法是一种解决问题的方法,对于同一个问题,往往有很多解决办法,可是如何来评价解决方案的好坏呢?公认的好方法往往效率高,用时短。要合理的给一个算法衡量方式,往往需要从两个方面入手:时间复杂度和空间复杂度。

    - 时间复杂度

    时间复杂度即通常所说的算法执行所需要耗费的时间,时间越短,算法越好。但是,一个算法的执行时间往往无法精确估计。通常需要在实际的计算机运行才知道具体的执行时间。但是,也可以大致进行估计,得到算法的时间复杂度。算法的执行时间往往和算法代码中语句执行的数量有关。由于一段代码中,每条语句的执行都需要时间,因此,可以这么认为,代码执行次数越多,程序耗费的时间越长,效率越差。因此,我们需要多写一些短小精悍的代码来提高代码的执行效率。

    在研究一些排序算法中,我们经常会看到这样一些时间复杂度的参数:
    例如插入排序:平均情况下,时间复杂度为O(n^2),类似的还有线性阶O(n), 对数阶O(log2 n), 线性阶O(n), 线性对数阶O(n log2 n), 平方阶O(n^2),指数阶O(2^n)。那么这些复杂度应该如何去运算呢?

    首先举几个小例子:
    一个简单的for循环

    for(int i = 0;i<6;i++){
                //生成一个97-122之间的int类型整数65-90大写
                int intVal = (int)(Math.random() * 26 + 97);
                //将intVal强制转换为char类型后连接到result后面
                result = result + (char)intVal;
    
            }

    上述代码中,总共执行了6次,对于这种常数的复杂度,经常会用O(1)来表示。

    接下来,看这个代码:

    for(int i=0;i<2; i++){
                for(int j = 0; j <n; j++){
                    System.out.print(s[i][j]);
                }
                System.out.println();
            }

    这段代码是两个for循环嵌套,它的时间复杂度很容易看出是2n,通常这种我们用O(n)进行表示,表明它是线性变化的。

    从上面举的两个例子可以看出,时间复杂度就是整个语句在执行过程中,根据所给的条件,在整个代码运行过程中所执行的次数,这个执行次数与所给的添加和执行参数的大小息息相关。

    - 空间复杂度

    空间复杂度通常指的是算法程序在计算机只想中只想所需要的存储空间。空间复杂度可从以下两个方面去描述:

    • 程序保存所需要的存储空间,即程序的大小

    • 程序在执行过程中所需要消耗的存储空间资源,例如,程序在执行过程中的中间变量
      以上两个方面的描述体现在代码中输入数据和辅助变量所占用的空间。算法的输入输出数据所占用的存储空间是由要解决的问题决定的,是通过参数表中的调用函数传递而来的。存储算法本身所占用的存储空间与算法书写的长短成正比,要压缩这方面的存储空间,就必须编写出较短的算法。算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n)= O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。在很多时候我们会采用递归算法,递归算法一般比较简短占用存储空间小,但是运行时需要一个附加堆栈,这样会占用很多临时工作区间,但是如果写成非递归方式,经常会占用很大的存储空间,但是运行时候需要的存储单元比较少。

      递归算法中,空间复杂度为递归所使用的堆栈空间的大小,它等于一次调用所分配的临时存储空间的大小乘以被调用次数。对于单线程来说,递归有运行时堆栈,求的是最深一次压栈的空间,这一空间可以容纳所有递归过程。

      快速排序

    #include <iostream>
    
    void QuickSort(int *arr, int l, int r)
    {
        int len = r;        // 存储当前数组的最后一个元素的坐标
        int num = arr[l];   // 用来存放枢轴元素
        bool dir = 0;       // 用来表示移动方向
    
        /*一趟快速排序*/
        while (l != r)
        {
            if (dir == 0)
            {
                if (arr[r] < num)
                {
                    arr[l] = arr[r];
                    dir = 1;
                }
                else
                {
                    r--;
                }
            }
            else
            {
                if (arr[l] > num)
                {
                    arr[r] = arr[l];
                    dir = 0;
                }
                else
                {
                    l++;
                }
            }
        }
        arr[l] = num;               // 将枢轴元素放入最终位置
        if (l > 1)
        {
            QuickSort(arr, 0, l - 1);
        }
        if (len - l - 1 > 1)
        {
            QuickSort(arr, l + 1, len);
        }
    }

    上述快速排序空间复杂度为O(log2n)。
    对于一个算法,其时间复杂度和空间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。另外,算法的所有性能之间都存在着或多或少的相互影响。因此,当设计一个算法(特别是大型算法)时,要综合考虑算法的各项性能,算法的使用频率,算法处理的数据量的大小,算法描述语言的特性,算法运行的机器系统环境等各方面因素,才能够设计出比较好的算法。

    下图中附一张常见算法排序的时间复杂度空间复杂度的图,仅供参考。
    这里写图片描述

    展开全文
  • 由于系统资源是有限的,为了有限的资源内,达成某些特定的性能目标,时间空间或者空间时间的方法。 时间空间通常用于嵌入式设备,或者内存、硬盘空间不足的情况,通过使用牺牲CPU的方式,获得原本需要更多...

    时间换空间

    由于系统资源是有限的,为了在有限的资源内,达成某些特定的性能目标,时间换空间或者空间换时间的方法。
    时间换空间通常用于嵌入式设备,或者内存、硬盘空间不足的情况,通过使用牺牲CPU的方式,获得原本需要更多内存或者硬盘空间才能完成的工作。
    下面是一个非常简单的时间换空间的算法,实现了a,b两个变量值的交换。交换两个变量的方法是使用一个中间变量,而引入额外的变量,而引入额外的变量意味着要使用更多的空间。采用下面的方法,则可以免去中间变量,而达到变量交换的目的,其代价是引用更多的CPU运算。

    public class Demo {
    	public static void main(String[] args) throws Exception {
    		int a=3;
    		int b=2;
    		b=a+b;
    		a=b-a;
    		b=b-a;
    		System.out.print(a+"----"+b);
    	}
    }
    结果:
    2----3
    

    性能优化的关键在于掌握各部分组件的性能平衡点,如果系统CPU资源有空闲,但是内存使用紧张,便可以使用用时间换空间的策略,达到整体的性能改良,反之,CPU资源紧张,内存资源有空闲,则可以使用空间换时间的策略,提升整体性能。

    空间换时间

    与时间换空间的方法相反,空间换时间则是尝试使用更多的内存或者磁盘空间换取CPU资源或者网络资源等,通过增加系统的内存消耗,来加快程序的运行速度。
    这种方法的典型应用就是缓存,缓存是一块额外的系统内存区,如果没有缓存,程序依然可以正常工作,但是在一般情况下,缓存中总是保存那些来之不易的数据,重新取得这些数据会花费大量的资源和时间,而通过缓存这块额外的内存,避免了频繁的资源消耗,加快了程序的运行速度。
    除了缓存外,一些算法中也可以使用这样的技术。

    展开全文
  • 空间时间时间空间

    千次阅读 2018-06-17 15:22:55
    考虑实际情况,可能会用“空间时间”或者用“时间空间”。以数组排序为例。很明显,冒泡排序,通过新增一个中间变量,用空间时间,执行速度快。而异或运算没有引入新的变量。package com.asin.java.csdn; ...
    算法有两个指标:运行时间、内存消耗。
    考虑实际情况,可能会用“空间换时间”或者用“时间换空间”。
    以数组排序为例。很明显,冒泡排序,通过新增一个中间变量,用空间换时间,执行速度快。而异或运算没有引入新的变量。
    package com.asin.java.csdn;  
      
    import java.util.Arrays;  
      
    public class AlgorithmCompare {  
        public static void main(String[] args) {  
      
            int[] num = { 2, 5, 1, 7, 3, 8, 6, 9, 0 };  
      
            long start = System.nanoTime();  //纳秒  
      
            // sortThird(num); // 191999  
            bubbleSort(num);   //   5531  
      
            long end = System.nanoTime();  
      
            System.out.println(end - start);  
        }  
      
        /** 
         * 冒泡排序,空间换时间 
         */  
        public static void bubbleSort(int[] a) {  
            int n = a.length;  
            for (int i = 0; i < n - 1; i++) {  
                for (int j = 0; j < n - 1; j++) {  
                    if (a[j] > a[j + 1]) {  
                        int temp = a[j];  
                        a[j] = a[j + 1];  
                        a[j + 1] = temp;  
                    }  
                }  
            }  
        }  
      
        /** 
         * 异或运算,时间换空间 
         */  
        private static void sortThird(int[] num) {  
            for (int i = 1; i < num.length; i++) {  
                int j = i;  
                while (true) {  
                    if (j > 0 && num[j] < num[j - 1]) {  
                        // change  
                        num[j] = num[j] ^ num[j - 1];  
                        num[j - 1] = num[j] ^ num[j - 1];  
                        num[j] = num[j] ^ num[j - 1];  
                        j--;  
                    } else {  
                        break;  
                    }  
                }  
            }  
            System.out.println("sortThird:" + Arrays.toString(num));  
        }  
    }  

    展开全文
  • 时间复杂度和空间复杂度详解

    千次阅读 多人点赞 2021-03-29 14:47:12
    时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机 行业的迅速发展,计算机的存储...
  • 理解分集首先要理解以下概念:全面解析:时延扩展与相干带宽、多普勒扩展与相干时间——无线通信基础 为什么采用分集 为了对抗无线信道的多径效应和多普勒效应,他们均会导致深度衰落。 为了克服深度衰落的影响,...
  • 走进四维空间-我们如何理解时空

    千次阅读 多人点赞 2019-02-14 20:33:15
    看完了电影,地球依旧继续流浪着走着,希望地球往半人马三星系统流浪的过程遇到三体人并学习一下如何脱水。脱水很重要。同时开一个脑洞,如果宇宙是四维的,三体人会不会就是学会脱水的地球人呢?只不过三体人...
  • 简析时间复杂度和空间复杂度

    万次阅读 多人点赞 2019-06-25 16:24:17
    一、说明 ...比如你电脑上打开计算器,如果一个普通的运算要消耗1分钟时间,那谁还会用它呢,还不如自己口算呢。 空间复杂度:就是说执行当前算法需要消耗的存储空间大小,也是越少越好。本来...
  • 算法的时间复杂度和空间复杂度计算

    万次阅读 多人点赞 2018-09-27 20:22:44
     进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n))。它表示随问题规模n的增大,算法...
  • 它是一个衡量算法优劣的重要指标,按照所需资源的又细分为时间复杂度和空间复杂度。 时间复杂度:运行算法所需的时间随着数据量变化关系,记做T(n),n为算法的规模。 空间复杂度:一个算...
  • 时间复杂度和空间复杂度的概念...时间空间(即寄存器)都是计算机资源的重要体现,而算法的复杂性就是体现运行该算法时的计算机所需的资源多少。 各种算法的复杂度如下: 时间复杂度: 1:算法的时间复杂度反映...
  • 斐波那契数的时间复杂度、空间复杂度详解

    万次阅读 多人点赞 2018-05-26 01:00:21
    这个数列的数就被称为斐波那契数。时间复杂度:时间复杂度实际就是一个函数,该函数计算的是执行基本操作的次数。时间复杂度的O渐进表示:算法语句总的执行次数是关于问题规模N的某个函数,记为f(N),N称为...
  • 数据结构与算法(一):时间复杂度和空间复杂度

    万次阅读 多人点赞 2019-03-23 15:05:22
    初学数据结构和算法的时候,大家都会接触到时间复杂度和空间复杂度这两个概念,但是学校期间估计很多同学都没有去理解其意义,认为其如同鸡肋,只是应付考试,甚至工作时间不长的同学也可能会有类似感觉:代码都写...
  • 时间复杂度和空间复杂度(超详细)

    万次阅读 多人点赞 2020-08-11 17:11:00
    时间维度事后统计法事前分析估算的方法时间复杂度(1)时间频度(2)时间复杂度大O符号表示法常见的时间复杂度量级常数阶O(1)线性阶O(n)对数阶O(logN)线性对数阶O(nlogN)平方阶O(n^2^)立方阶O(n³)、K次方阶O(n^k)二、...
  • 时间复杂度和空间复杂度的简单讲解

    万次阅读 多人点赞 2018-01-07 12:55:26
    一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。 把今年很流行,淡淡的基佬紫送给各位看官,原谅绿就算了,怕被打死。 文章最后,举例使用二分查找和斐波那契的递归和迭代方法,...
  • 重新理解函数空间(上)

    万次阅读 多人点赞 2018-08-15 20:57:57
    重新理解函数空间(上) 读论文时遇到了可再生...于是下决心花一天的时间深入理解它。万幸发现了几个非常好的教程,总算是能够较为直观的理解了,这里把自己的感想写下来。 这部分内容包括一些常见的空间的定义,包...
  • 今天遇到一个时间序列分析的任务,使用了Attention机制,看代码之后,有几个空间转置的过程其实有点懵。 所以通过查资料理解了一下空间维度转置,顺便理解了一下三维矩阵的沿着某一个轴的加法,我把自己的理...
  • 1 光谱分辨率、空间分辨率、时间分辨率 2 全色图像、多光谱图像、高光谱图像 2.1 全色图像 2.2 多光谱图像 2.3 高光谱图像 参考资料 1 光谱分辨率、空间分辨率、时间分辨率 遥感(Remote Sensing),可以理解为...
  • 混沌性时间序列的分析方法:EEMD+相空间重构

    千次阅读 多人点赞 2019-10-30 22:55:05
    上一篇文章,我们理解了混沌理论的发展、定义以及特点。接下来,要结合我的研究方向,机械振动时间序列信号的基础上,做出故障的诊断和预判。 由于篇幅的限制,本文以轴承信号为例,着重讨论混沌性的判定方法。...
  • ① 有穷性:一个算法必须重视执行有穷步之后结束,且每一步都可有穷时间内完成。 ② 确定性:算法每一条指令必须有确切的含义,读者理解时不会产生二义性。并且,任何条件下,算法只要唯一的一条执行路径,...
  • 算法的时间复杂度和空间复杂度-总结

    万次阅读 多人点赞 2016-06-04 11:04:53
    算法的时间复杂度和空间复杂度-总结  通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而证明...
  • Java 算法时间复杂度和空间复杂度

    千次阅读 2017-06-09 14:09:51
    先补充一下概念:Java 内存模型的可见性、原子性和有序性。 可见性:  可见性是一种复杂的属性,因为可见性的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的...
  • 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果...冒泡排序算法是所有排序算法最简单的(前面也提到过),生活应该也会看到气泡从水...
  • 梳理CNN经典模型的过程,我理解到其实经典模型演进的很多创新点都与改善模型计算复杂度紧密相关,因此今天就让我们对卷积神经网络的复杂度分析简单总结一下下。 本文主要关注的是针对模型本身的复杂度分析...
  • 气象EOF的理解

    万次阅读 多人点赞 2019-06-17 23:21:06
      EOF方法气象分析经常用到,接触好长时间,也没有弄清楚他到底干嘛。为什么这么做是可行的?这里面的计算都有什么意义呢?   看了一些矩阵理解方面的内容后,对EOF算是有了一些粗浅的理解,现在试着去...
  • 时间空间复杂度概述

    千次阅读 多人点赞 2018-09-06 17:25:39
    那我们可以电脑上真实的测试一下嘛,多种方法比一比,用时最少的就是最优的啦。 但是没必要,我们可以通过分析计算来确定一个方法的好坏,用O()表示,括号内填入N、1,等式子。 这到底是...
  • 课程笔记4--图像K空间理解

    万次阅读 多人点赞 2017-01-04 18:25:30
    K空间的数据分布实际上是图像空间中数据的二维傅立叶变换结果。 K空间中的数据点和图像空间中的数据点并不是一一对应的。一个K空间中的数据点对应了图像空间中所有数据点的一部分信息。事实上,K空间中的数据正是...
  • 芦金梅摘要:不同的文化形成了不同的时间观念和时间...因此我们应该了解差异的基础上理解差异,并随着国际交往的日益频繁,不断学习借鉴西方时间有益的成分。关键词:时间观;跨文化交际;交流障碍;融合时间...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 779,765
精华内容 311,906
关键字:

在空间中理解时间