精华内容
下载资源
问答
  • 时间复杂度理解

    千次阅读 2015-10-20 17:37:14
    时间复杂度的简单理解和计算方法
    困扰我好久的时间复杂度理解,从接触这个概念到今天已经实习,我从来没理解过到底啥是时间复杂度。
    今天在公司看代码感觉有点恶心了,看了会儿时间复杂度相关的事情,有了一点儿理解,做个笔记。

    时间复杂度:
    时间复杂度衡量的是一个算法在执行时间(速度)上的优劣,一个程序运行的总时间主要和两点有关:
    • 执行每条语句的耗时
    • 执行每条语句的频率-即执行次数
    执行次数的表达式一般是冗长的数学表达式,例如一个三层循环的程序,内循环的执行次数为 N(N-1)(N-2) = N^3/6-N^2/2+N/3,一般在这种表达式中首项之后的其他项都相对较小(例如,当N=1000时,-N^2/2+N/3远小于N^3/6),所以我们忽略那些影响很小的,只抓住影响最大的那一项进行分析。

    所以,时间复杂度是运算次数表达式中受N的变化影响最大的那一项。

    计算方法:
    1. 找到算法中的基本语句
      • 算法中执行次数最多的那条语句就是基本语句,通常是最内层循环的循环体。
    2. 计算基本语句的执行次数的数量级;
      • 只需计算基本语句执行次数的数量级,原因是上面提到的可以忽略那些影响小的项。
    3. 用大Ο记号表示算法的时间性能
      • 将基本语句执行次数的数量级放入大Ο记号中。
    注:如果算法中包含嵌套的循环,则基本语句通常是最内层的循环体,如果算法中包含并列的循环,则将并列循环的时间复杂度相加。例如:
      for (i=1; i<=n; i++)
          x++;
    
      for (i=1; i<=n; i++)
          for (j=1; j<=n; j++)
              x++;

    第一个for循环的时间复杂度为Ο(n),第二个for循环的时间复杂度为Ο(n2),则整个算法的时间复杂度为Ο(n+n^2)=Ο(n^2)。

    常见时间复杂度:
    常见时间复杂度总结
    描述 时间复杂度 说明
    常数级别 O(1) 普通语句
    对数级别 O(logN) 二分策略
    线性级别 O(N)
    循环
    线性对数级别 O(NlogN)
    分治(归并排序)
    平方级别 O(N^2)
    双层循环
    立方级别 O(N^3)
    三层循环
    指数级别 O(2^N)
    穷举查找(检查所有子集)
    展开全文
  • 我对建立时间和保持时间理解

    万次阅读 2015-08-02 16:53:10
    这篇文章主要是谈谈我对建立时间和保持时间理解

            这篇文章主要是谈谈我对建立时间和保持时间的理解,文中前四张图片是引用特权同学《FPGA实战演练逻辑篇51:建立时间和保持时间》http://bbs.elecfans.com/jishu_499719_1_1.html (出处: 中国电子技术论坛)一书。我将以这四张图片及其延伸为例,进行推导。

            先说一下建立时间和保持时间的定义。定义都是一致,无异议的,即:

            建立时间(Tsu)是指在时钟上升沿到来之前数据必须保持稳定的时间。

            保持时间(Th)是指在时钟上升沿到来以后数据必须保持稳定的时间。

            它们的存在其实就是为了保证在采样点附近的数据是稳定的,所以对采样点前后的稳态时间做出了要求。

    图1

            图1是硬件电路图。

    图2 正常工作时的时序逻辑

            图2是能满足建立时间和保持时间要求、正常工作时图1中电路的时序逻辑。其中clk为寄存器reg1和reg2的同步时钟,reg1out是寄存器reg1的输出,reg2out是寄存器reg2的输出,它们也同时是与门的输入。reg3in是与门的输出,同时也是寄存器reg3的输入。clk_r3是寄存器reg3的时钟,本来应该与clk是同步的,但是因为线路延迟所以会落后clk一点。reg3out是寄存器reg3的输出。所有的寄存器都是在时钟上升沿对输入端的数据进行锁存。在clk_r3的上升沿上以及前后共有三条虚线,前两条构成的区间代表芯片要求的建立时间,后两条为保持时间,它们都是保证逻辑正常的最小值,可以从芯片的datasheet中查到。

    图3 建立时间正常示意图

            图3中用红色线段标注了5个时间点,从左往右依次为A-E。区间AB是data delay,即数据延迟;区间CE是time delay,即时钟延迟;区间DE即为建立时间(保证工作的最小值)。前两者是实际存在的,可以测量。由此我们可以写出以下公式。








            由此四个式子可以推出:




            这就是我们判断建立时间是否违规的依据。若不满足该不等式,则建立时间违规。




           

    图4 建立时间违规

            图4是建立时间违规的例子。可以看到红圈内部reg3in在建立时间的区间内发生了改变,这会导致采样结果不确定。

    图5 建立时间违规示意图

            图5中不满足上述不等式,所以违规。

            同理进行保持时间的推导。

    图6 保持时间正常示意图

            图6中区间AB为data delay;区间CD为time delay;区间DE为保持时间(保证正常工作的最小值)。





            由此推出:



            这是我们判断保持时间是否违规的依据。若不满足这个不等式,则保持时间违规。

    图7 保持时间违规

            图7中红圈内部保持时间违规。


    图8 保持时间违规示意图

            图8不满足上述不等式,故违规。


           

    
    
    展开全文
  • 建立时间和保持时间的深入理解

    千次阅读 2019-03-28 18:38:09
    什么是建立时间和保持时间 建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够, 数据将不能在这个时钟上升沿被打入触发器。 保持时间(hold time)是指在...

    什么是建立时间和保持时间

    建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够, 

                                           数据将不能在这个时钟上升沿被打入触发器。

    保持时间(hold time是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,

                                         数据同样不能被打出触发器。

    传输延时(transmission delay数据相对于时钟上升沿tc-q后从触发器输出至Q端,则tc-q称为寄存器的传输延时

       恢复时间(recovery time是复位/置位信号无效到时钟翻转的时间,也称为复位/置位信号的建立时间

       清除时间(recoval time是时钟边沿之后复位/置位信号必须仍然保持有效的时间,也称为复位/置位信号的保持时间

     

     

    最小时钟周期

                                      T≥tc-q max+ tp-logic max + tsu

          当两级触发器之间的数据传输在一个时钟周期内完成时,其传输周期为最小。而当tc-q + tp-logic + tsu大于T时,后 续的触发器的setup时间将得不到满足。组合逻辑的传输延时为tp-logic

    最大时钟频率

                                      f≥1 / (tc-q + tp-logic + tsu)

    最小维持时间

                                     tc-q min + tp-logic min + tsu min ≥ t hold

    当电路的hold时间大于tc-q min + tp-logic min + tsu min时,可能出现因为数据传递过快,也就是在后一级触发器采样的时候,有可能出现一个时钟沿传递两个数据的情况,后一级触发器采样数据可能误采样,导致有效数据被覆盖。

     

    展开全文
  • 时间复杂度分析 理解

    千次阅读 2018-10-12 15:24:39
    在java中摸索几年,在看一些文章中,时间复杂度的词频挺高,决定是时候看下了,而且也是基础,但当是回温一下大学的知识,不能全还给老师,哈哈 概念 **时间复杂度:**用来定性的描述算法的执行时间的一个函数,更类似于一个...

    前言

    在java中摸索几年,在看一些文章中,时间复杂度的词频挺高,是时候看下了,而且也是基础,当是回温一下大学的知识,不能全还给老师,哈哈

    概念

    **时间复杂度:**用来定性的描述算法的执行时间的一个函数,更类似于一个耗时的趋势,函数表示为: O(f(n))

    名词解释:
    n:问题的规模,重复执行的次数
    T(n):一段程序运行,各种操作代码所执行的总次数
    f(n): 存在的某个函数,使得T(n)/f(n)=非零常数, 那么f(n)称为T(n)的同数量级函数
    O:大O符号,一种符号,表示渐进于无穷的行为

    穿起来:
    算法中各种代码操作所执行的总次数用T(n)表示,存在某个函数f(n),使得T(n)/f(n)=非零常数,那么f(n)称为T(n)的同数量级函数(类想一下,在坐标轴中,当入参n趋于无穷时,两条曲线的商为常数),即:T(n)=O(f(n)),O(f(n))就是时间复杂度.O符号表示一个渐进常数. 在这个函数中可以忽略低阶项和首项系数,中文例二解释.

    正文

    1.没怎么研究过算法,但算法是程序的灵魂,算法决定性能,算法分为时间复杂度和空间复杂度,这也是常说"时间换空间,空间换时间"由来了
    2.看上面概念已经基本知道时间复杂度是个什么东西了,下面看些例子,由简入深.
    2.1 时间复杂度为:O(1)

        public void fun1() {
            int n = 100;//没有入参变量,执行规模永远为1行
        }
    

    2.2 时间复杂度为:O(n)

      public void fun1() {
            int n = 100;//执行次数:1
            int sum = 0;//执行次数:1
            for (int j = 1; j <= n; ++j) {//执行次数:n
                sum += j;//执行次数:n
            }
        }
    

    所以T(n)=1+1+n+n=2n+2 = n,即时间复杂度为:O(n),时间复杂度是表示一个函数的趋势,并不代表具体值,当n趋于无穷大时,可以忽略低阶项和首项系数

    2.3 时间复杂度为:O(n²)

     public void fun1() {
            int n = 100;//执行次数:1
            int sum = 0;//执行次数:1
            for (int i = 1; i <= n; ++i) {//执行次数:n
                for (int j = 1; j <= n; ++j) {//执行次数:n*n
                    sum += j;//执行次数:n*n
                }
            }
        }
    

    T(n)=1+1+n+nn+nn=2n²+2n+2=n²

    常规的代码的算法是有规律的:看几重循环:只有一重则时间复杂度为O(n),二重为O(n^2);如果有二分则为O(logn),二分例如快速幂、二分查找,如果一个for循环套一个二分,那么时间复杂度则为O(nlogn)。

    分类:

    常见时间复杂度有(按增长率):
    1.常数阶O(1)
    2.对数阶O(logn)
    3.线性阶O(n)
    4.线性对数阶O(nlog2n)
    5.k方阶:O(n^k),一般控制k的大小,否则就和指数阶一样了,这是很可怕的
    6.指数阶:O(2^n),一般不用,性能太差

    |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    我不能保证理解都是对的和实践都是最佳的,这是个人的一些理解和实践,如发现问题,请联系笔者做出更改,交流->分享->进步.

    认真工作,热爱生活.享受现在,拥抱未来~

    |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    展开全文
  • 学数字电路设计或者面试相关岗位的时候,都需要理解掌握建立时间和保持时间的概念,而这个东西我觉得还挺绕的,看的时候都明白,转过身就忘了,每次要用的时候又到处找资料,理解半天,非常的浪费时间,所以这里用我...
  • 如何理解时间复杂度和空间复杂度

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

    万次阅读 2019-10-16 14:00:11
    时钟同步和时间同步 先说一下基本概念:时钟同步是指频率同步;时间同步是指相位同步。(补充一下:相位同步的前提是频率必须同步,怕一些初入通信行业的小伙伴不太熟悉这两个概念。) 上图是频率同步(时钟同步)...
  • Blog:http://jackei.cnblogs.com描述性统计与性能结果分析——《LoadRunner 没有告诉你的》之一 LoadRunner中的...为什么要有90%用户响应时间?因为在评估一次测试的结果时,仅仅有平均事务响应时间是不够的。为...
  • Pandas时间序列 :rolling 用法快速理解

    万次阅读 多人点赞 2019-04-20 18:44:13
    相信初学Pandas时间序列时,会遇到rolling函数,不知道该怎么理解,对吧? 让我们用最简单的例子来说明吧。 代码如下: import pandas as pd # 导入 pandas index = pd.date_range('2019-01-01',periods=20) ...
  • 建立时间(Tsu:set up time): 是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被稳定的打入触发器,Tsu就是指这个最小的稳定时间。保持时间(Th:...
  • 自由空间中是没有多径效应的,有了这些障碍物,同一时刻从发送天线出来电磁波就延不同的方向在不同的时间到达接收天线,在天线上场效应进行叠加而产生了多径分量的混合。换句话说,就是这种复杂多样
  • 时间管理四象限法则该如何理解

    万次阅读 2018-10-08 11:17:16
    在我们日常工作生活当中,想要提高工作效率,过上有序的生活,告别忙盲茫,就必须得坚持时间管理,合理科学分配自己的时间时间管理方法很多,这里给大家介绍时间管理四象限法则。 那么什么是时间管理四象限法则呢...
  • 堆排序时间复杂度的理解

    万次阅读 2013-01-12 15:20:11
    堆排序  这里不再赘述堆的定义 和堆排序的讲解,详见海子的博客...   难点:1. 对堆的理解:  从堆的定义可以看出,堆有两个性质:i. 完全二叉树
  • 怎样理解时间序列的“平稳性”?

    万次阅读 多人点赞 2018-12-10 20:40:01
    1.时间序列数据(time-series data) ,亦即单一变量按时间的先后次序产生的数据。 2.截面数据(cross-sectional data) ,亦即多个变量在同一个时间点(截面空间)上产生的数据。 3.平行/面板数据(panel data/time...
  • 当今最常见时频分析方法主要有...频率分辨率和时间分辨率作为时频分析中两个重要的指标,在时频分析中起着重要的作用。 频率分辨率 解释一:在使用DFT时,在频率轴上的所能得到的最小频率间隔。   其中N为采样点数
  • #calling pacf function from stattool lag_pacf = pacf(y5, nlags=50, method='ols') #PLOT PACF plt.figure(figsize=(16, 7)) plt.plot(lag_pacf, marker="o") plt.axhline(y=0,linestyle='--',color='gray') ...
  • for循环时间复杂度算法理解

    万次阅读 多人点赞 2016-05-11 16:04:38
    1. 一次循环for(int i=0;i;i++) { //这里运行次数为N次 }2. 二次循环for(int i=0;i;i++) { for(int j=i;j;j++) { //此处运行次数:N+N-1+N-2+...+1=1+2+3+...+N=N(N+1)/2 } } ... for(int j=i+
  • 关于物联网卡的一点理解

    千次阅读 2018-02-02 12:39:51
    短暂的做过一段时间的物联网卡云平台,有一点自己的理解记录下便于一起探讨。 公司目前的物联网卡主要就是以下几个操作流程: ① 从运营商那里拿卡,导入云平台,卡主要信息包括sim卡号、iccid、imsi,卡类型,卡...
  • [数据结构] 时间复杂度的理解

    千次阅读 2016-11-27 08:00:15
    时间复杂度:函数计算之行的基本次数 面试tip:面试官问及时间复杂度不一定只有最坏的,一般人一般会直接答最坏的,其实还有最好和平均。 例如:在一个长度为N的线性表中搜索一个数据x。 最坏:没有找到,到最后...
  • 深入理解Java并发之synchronized实现原理

    万次阅读 多人点赞 2017-06-04 17:44:44
    【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) ... 出自【zejian的博客】...深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深...
  • ffmpeg关于timebase的理解

    万次阅读 多人点赞 2017-03-22 17:24:26
    ffmpeg关于timebase的理解 一:ffmpeg的分层结构 写这篇文章的时候先把ffmpeg分层问题大致说明一下,我们按照最常见的 "转码程序" 和 "摄像头采集" 以及 "播放器" 三个模型总结。 1:转码 转码基本流程:flv格式...
  • 关于白噪声的理解

    千次阅读 2016-02-02 23:35:51
    关于白噪声的理解
  • 构造PERT图,需要明确四个概念:事件、活动、松弛时间和关键路线。 事件(Events)表示主要活动结束的那一点; 活动(Activities)表示从一个事件到另一个事件之间的过程; 松弛时间(slac...
  • 关于补码的个人理解

    万次阅读 2019-12-11 09:53:44
    关于补码的个人理解 读书的时候一直被补码的概念困扰,不知道为什么会有这种奇葩的表示方法,只知道如何计算补码应付考试,后来在读很多其它书籍的时候,都谈到了补码的概念,我觉得是时候好好理清思路了。 我们都...
  • select trunc(sysdate+1) from dual; select trunc(sysdate)+1 from dual;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,095,885
精华内容 838,354
关键字:

关于时间的理解