算法的复杂度

2023-10-27

常用的算法的时间复杂度和空间复杂度:

排序法

最差时间分析 平均时间复杂度 稳定度 空间复杂度
冒泡排序 O(n2) O(n2) 稳定 O(1)
快速排序 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n)
选择排序 O(n2) O(n2) 稳定 O(1)
二叉树排序 O(n2) O(n*log2n) 不一顶 O(n)

插入排序

O(n2) O(n2) 稳定 O(1)
堆排序 O(n*log2n) O(n*log2n) 不稳定 O(1)
希尔排序 O O 不稳定 O(1)

时间复杂度 


(1)时间频度T(n)

一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 


(2)时间复杂度O(f(n))

在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。 
在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为O(1),另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n^2+3n+4与T(n)=4n^2+2n+1它们的频度不同,但时间复杂度相同,都为O(n^2)。 按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n), 线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),..., k次方阶O(n^k),指数阶O(2^n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。 

(3)多项式时间算法

p(n)是关于n的多项式,时间复杂度是O(p(n))的算法称为多项式时间算法。不能够这样限制时间复杂度的算法被称为指数时间算法。 

例如:时间复杂度为O(nlog(n))、O(n^3)的算法都是多项式时间算法;时间复杂度为O(n^log(n))、O(n!)、O(2^n)的算法是指数时间算法。

P问题:

一个优化问题如果已经找到了多项式时间算法,则称该问题为多项式时间可解问题,并将这类问题的集合记为P,因此多项式时间可解问题就称为P类问题。

一个问题如果没有找到多项式时间算法,那么直觉上它是“难解”的,但又往往无法证明多项式时间算法的不存在性。由于在寻找有效算法上的失败未必一定意味着这样的算法不存在,这就给理论工作者带来了一个难题:一方面证明一个问题不存在多项式时间算法是困难的,至今尚未给出;另一方面有越来越多的问题无法给出多项式时间算法。同时,理论工作者又渴望解决此难题。为此,在20世纪70年代提供了一个漂亮的理论,它把这种失败归结为一个深刻的数据猜想,这个理论就是NP-完全性理论。

NP问题:

若一个问题的每个实例只有“是”或“否”两种回答,则称该问题为判定问题。

若存在一个多项式 g(x) 和一个验证算法 H ,对一类判定问题A 的任何一个“是”的判定实例 I 都存在一个字符串S是I的“是”回答,满足其输入长度d(S)不超过g(d(I))(其中d(I)为I的输入长度),且验证算法验证S为I的“是”回答的计算时间不超过g(d(I)),则称判定问题A为非多项式确定问题,简称NP问题。NP类问题是比P问题更为广泛的问题类

给定一个判定问题,如果存在一个算法,对任何一个答案为“是”的实例I。该算法首先给出一个猜想,该猜想规模不超过I的输入长度的某个多项式函数,且验证猜想的正确性仅需多项式时间,则称该问题属于NP类。

简单地理解

     如果计算工作量在计算数据规模n的多项式(如nn^2n^3等)的范围内,则计算花费的机时是可以接受的,该问题称为P问题;

     有些问题尚未证实是否属于P类,又未找到有效算法,则称NP问题。

NP完全问题:

Cook在1971年给出并证明了有一类问题具有下述性质:

①这类问题中任何一个问题至今未找出多项式时间算法;

②如果这类问题中的一个问题存在有多项式时间算法,那么这类问题都有多项式时间算法,这类问题中的每一个问题称为NP完全问题,这个问题的集合简记为NPC。


时间复杂度的定义 

    一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度。

根据定义,可以归纳出基本的计算步骤 
1. 计算出基本操作的执行次数T(n) 
    基本操作即算法中的每条语句(以;号作为分割),语句的执行次数也叫做语句的频度。在做算法分析时,一般默认为考虑最坏的情况。

2. 计算出T(n)的数量级 
    求T(n)的数量级,只要将T(n)进行如下一些操作:
    忽略常量、低次幂和最高次幂的系数

    令f(n)=T(n)的数量级。

3. 用大O来表示时间复杂度 
    当n趋近于无穷大时,如果lim(T(n)/f(n))的值为不等于0的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n))。


一个示例: 
(1) int num1, num2;
(2) for(int i=0; i<n; i++){ 
(3)     num1 += 1;
(4)     for(int j=1; j<=n; j*=2){ 
(5)         num2 += num1;
(6)     }
(7) }
 

分析:
1.
语句int num1, num2;的频度为1;
语句i=0;的频度为1;
语句i<n; i++; num1+=1; j=1; 的频度为n;
语句j<=n; j*=2; num2+=num1;的频度为n*log2n;
T(n) = 2 + 4n + 3n*log2n

2.
忽略掉T(n)中的常量、低次幂和最高次幂的系数
f(n) = n*log2n

3.
lim(T(n)/f(n)) = (2+4n+3n*log2n) / (n*log2n)
                     = 2*(1/n)*(1/log2n) + 4*(1/log2n) + 3

当n趋向于无穷大,1/n趋向于0,1/log2n趋向于0
所以极限等于3。

T(n) = O(n*log2n)

简化的计算步骤 

再来分析一下,可以看出,决定算法复杂度的是执行次数最多的语句,这里是num2 += num1,一般也是最内循环的语句。

并且,通常将求解极限是否为常量也省略掉?

于是,以上步骤可以简化为: 
1. 找到执行次数最多的语句 
2. 计算语句执行次数的数量级
3. 用大O来表示结果
 

继续以上述算法为例,进行分析:
1.
执行次数最多的语句为num2 += num1

2.
T(n) = n*log2n
f(n) = n*log2n

3.
// lim(T(n)/f(n)) = 1
T(n) = O(n*log2n)

 

--------------------------------------------------------------------------------
一些补充说明 
最坏时间复杂度 
    算法的时间复杂度不仅与语句频度有关,还与问题规模及输入实例中各元素的取值有关。一般不特别说明,讨论的时间复杂度均是最坏情况下的时间复杂度。这就保证了算法的运行时间不会比任何更长。

求数量级 
即求对数值(log),默认底数为10,简单来说就是“一个数用标准科学计数法表示后,10的指数”。例如,5000=5x10 3 (log5000=3) ,数量级为3。另外,一个未知数的数量级为其最接近的数量级,即最大可能的数量级。

求极限的技巧 
要利用好1/n。当n趋于无穷大时,1/n趋向于0 

--------------------------------------------------------------------------------
一些规则
1) 加法规则 
T(n,m) = T1(n) + T2(n) = O (max ( f(n), g(m) )

2) 乘法规则
 
T(n,m) = T1(n) * T2(m) = O (f(n) * g(m))

3) 一个特例(问题规模为常量的时间复杂度) 
在大O表示法里面有一个特例,如果T1(n) = O(c), c是一个与n无关的任意常数,T2(n) = O ( f(n) ) 则有
T(n) = T1(n) * T2(n) = O ( c*f(n) ) = O( f(n) )

也就是说,在大O表示法中,任何非0正常数都属于同一数量级,记为O(1)。

4) 一个经验规则 
复杂度与时间效率的关系:
c < log2n < n < n*log2n < n^2 < n^3 < 2^n < 3^n < n! (c是一个常量)
|--------------------------|--------------------------|-------------|
          较好                     一般              较差
其中c是一个常量,如果一个算法的复杂度为c 、 log2n 、n 、 n*log2n,那么这个算法时间效率比较高 ,如果是 2^n , 3^n ,n!,那么稍微大一些的n就会令这个算法不能动了,居于中间的几个则差强人意。


--------------------------------------------------------------------------------------------------
复杂情况的分析 

以上都是对于单个嵌套循环的情况进行分析,但实际上还可能有其他的情况,下面将例举说明。

1.并列循环的复杂度分析 
将各个嵌套循环的时间复杂度相加。

例如:

  for (i=1; i<=n; i++)
      x++;

  for (i=1; i<=n; i++)
      for (j=1; j<=n; j++)
          x++;

解:
第一个for循环
T(n) = n
f(n) = n
时间复杂度为Ο(n)

第二个for循环
T(n) = n^2
f(n) = n^2
时间复杂度为Ο(n^2)

整个算法的时间复杂度为Ο(n+n^2) = Ο(n^2)。

2.函数调用的复杂度分析 
例如:
public void printsum(int count){
    int sum = 1;
    for(int i= 0; i<n; i++){
       sum += i;
    }   
    System.out.print(sum);
}

分析:
记住,只有可运行的语句才会增加时间复杂度,因此,上面方法里的内容除了循环之外,其余的可运行语句的复杂度都是O(1)。
所以printsum的时间复杂度 = for的O(n)+O(1) = 忽略常量 = O(n)

*这里其实可以运用公式 num = n*(n+1)/2,对算法进行优化,改为:
public void printsum(int count){
    int sum = 1;
    sum = count * (count+1)/2;   
    System.out.print(sum);
}
这样算法的时间复杂度将由原来的O(n)降为O(1),大大地提高了算法的性能。
 

3.混合情况(多个方法调用与循环)的复杂度分析 
例如:
public void suixiangMethod(int n){
    printsum(n);//1.1
    for(int i= 0; i<n; i++){
       printsum(n); //1.2
    }
    for(int i= 0; i<n; i++){
       for(int k=0; k
        System.out.print(i,k); //1.3
      }
  }
suixiangMethod 方法的时间复杂度需要计算方法体的各个成员的复杂度。
也就是1.1+1.2+1.3 = O(1)+O(n)+O(n^2) ----> 忽略常数 和 非主要项 == O(n^2)

--------------------------------------------------------------------------------------------------
更多的例子 

O(1) 
交换i和j的内容
temp=i;
i=j;
j=temp;                    

以上三条单个语句的频度为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。

O(n2) 
    sum=0;                /* 执行次数1 */
    for(i=1;i<=n;i++)      
       for(j=1;j<=n;j++) 
         sum++;       /* 执行次数n2 */
解:T(n) = 1 + n2 = O(n2)

   for (i=1;i<n;i++)
   { 
       y=y+1;        ①   
       for (j=0;j<=(2*n);j++)    
          x++;        ②      
   }         
解:  语句1的频度是n-1
         语句2的频度是(n-1)*(2n+1) = 2n^2-n-1
         T(n) = 2n^2-n-1+(n-1) = 2n^2-2
         f(n) = n^2
         lim(T(n)/f(n)) = 2 + 2*(1/n^2) = 2
         T(n) = O(n^2).

O(n)                                         
   a=0;
   b=1;                     ①
   for (i=1;i<=n;i++) ②
   {  
      s=a+b;    ③
      b=a;     ④  
      a=s;     ⑤
   }
解:  语句1的频度:2,        
         语句2的频度:n,        
         语句3的频度:n,        
         语句4的频度:n,    
         语句5的频度:n,                                  
         T(n) = 2+4n
         f(n) = n
         lim(T(n)/f(n)) = 2*(1/n) + 4 = 4
         T(n) = O(n).     
                                                                            
O(log2n) 
   i=1;       ①
   while (i<=n)
      i=i*2; ②
解: 语句1的频度是1,  
       设语句2的频度是t,  则:nt<=n;  t<=log2n
       考虑最坏情况,取最大值t=log2n,
        T(n) = 1 + log2n
        f(n) = log2n
        lim(T(n)/f(n)) = 1/log2n + 1 = 1
        T(n) = O(log2n)

 O(n3) 
   for(i=0;i<n;i++)
   {  
      for(j=0;j<i;j++)  
      {
         for(k=0;k<j;k++)
            x=x+2;  
      }
   }
解:当i=m, j=k的时候,内层循环的次数为k当i=m时, j 可以取 0,1,...,m-1 ,  所以这里最内循环共进行了0+1+...+m-1=(m-1)m/2次所以,i从0取到n, 则循环共进行了: 0+(1-1)*1/2+...+(n-1)n/2=n(n+1)(n-1)/2次
T(n) = n(n+1)(n-1)/2 = (n^3-n)/2
f(n) = n^3
所以时间复杂度为O(n^3)。


空间复杂度

类似于时间复杂度的讨论,一个算法的空间复杂度(Space Complexity)S(n)定义为该算法所耗费的存储空间,它也是问题规模n的函数。渐近空间复杂度也常常简称为空间复杂度。 
空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面。算法的输入输出数据所占用的存储空间是由要解决的问题决定的,是通过参数表由调用函数传递而来的,它不随本算法的不同而改变。存储算法本身所占用的存储空间与算法书写的长短成正比,要压缩这方面的存储空间,就必须编写出较短的算法。算法在运行过程中临时占用的存储空间随算法的不同而异,有的算法只需要占用少量的临时工作单元,而且不随问题规模的大小而改变,我们称这种算法是“就地\"进行的,是节省存储的算法,如这一节介绍过的几个算法都是如此;有的算法需要占用的临时工作单元数与解决问题的规模n有关,它随着n的增大而增大,当n较大时,将占用较多的存储单元,例如将在第九章介绍的快速排序和归并排序算法就属于这种情况。

当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1);当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为0(1og2n);当一个算法的空I司复杂度与n成线性比例关系时,可表示为0(n).若形参为数组,则只需要为它分配一个存储由实参传送来的一个地址指针的空间,即一个机器字长空间;若形参为引用方式,则也只需要为其分配存储一个地址的空间,用它来存储对应实参变量的地址,以便由系统自动引用实参变量。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法的复杂度 的相关文章

  • 数学基础--高斯分布详解

    1 简介 正态分布 xff08 Normal Distribution xff09 xff0c 又名高斯分布 xff08 Gaussian Distribution xff09 xff0c 是一个在数学 物理及工程等领域都非常重要的概率分布
  • 矩阵分解(1)-- 矩阵分解之LU、LDLT、Cholesky分解

    1 分类 矩阵分解 decomposition factorization 是多半将矩阵拆解为数个三角形矩阵 triangular matrix 依使用目的的不同 可分为几类 与线性方程解法相关的矩阵分解 LU分解 奇异值分解 QR分解 极
  • FCM——(Fuzzy C-means)模糊C均值算法

    FCM算法是一种基于划分的聚类算法 它的思想就是使得被划分到同一簇的对象之间相似度最大 而不同簇之间的相似度最小 模糊C均值算法是普通C均值算法的改进 普通C均值算法对于数据的划分是硬性的 而FCM则是一种柔性的模糊划分 模糊聚类的目标函数
  • 几何平均详解,及其与算术平均、调和平均、均方根的关系

    2 几何平均与算术平均的转换关系 附 3 2 几何平均数适用于求连乘样本的均值 它是变化的中心 代表平均变化率 算术平均数适用于求连加样本的均值 它是数值的中心 代表平均数量 中位数适合求带有离群值样本的均值 它是位置的中心 代表平均位置
  • 【随机过程】 17 -离散时间马氏链典型应用

    离散时间马尔科夫链的典型应用 文章目录 离散时间马尔科夫链的典型应用 0 概述 1 Page Rank 1 1 背景 1 2 模型建立 1 3 模型求解 2 MCMC 2 1 概述 2 2 实现思路 2 3 具体实现 2 3 1 第一步 细
  • 协方差矩阵与PCA深入原理剖析

    一 协方差矩阵 一个维度上方差的定义 协方差的定义 a 协方差就是计算了两个维度之间的相关性 即这个样本的这两个维度之间有没有关系 协方差为0 证明这两个维度之间没有关系 协方差为正 两个正相关 为负则负相关 协方差矩阵的定义 对n个维度
  • 算法的复杂度

    常用的算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O n2 O n2 稳定 O 1 快速排序 O n2 O n log2n 不稳定 O log2n O n 选择排序 O n2 O n2
  • 模拟退火算法——概率法解全局优化

    1 直观介绍 模拟退火算法来源于固体退火原理 是一种基于概率的算法 将固体加温至充分高 再让其徐徐冷却 加温时 固体内部粒子随温升变为无序状 内能增大 而徐徐冷却时粒子渐趋有序 在每个温度都达到平衡态 最后在常温时达到基态 内能减为最小 它
  • 【数学】三角函数及部分微积分函数图象整理

    三角函数及部分微积分函数图象整理 1 三角函数 1 1 cosx secx 1 2 sinx cscx 1 3 tanx cotx 1 4 s e c
  • 使用C++ Eigen库求解线性方程组Ax=b

    Eigen http eigen tuxfamily org 是常用的 C 矩阵运算库 具有很高的运算效率 大部分 需要在 C 中使用矩阵运算的库 都会选用 Eigen 作为基本代数库 例如 Google Tensorflow Google
  • 概率论与数理统计(一)随机事件,样本空间

    1 D 2 A 3 C 4 AD 5 正确答案 1 2 1 3 2 1 2 3 3 1 3 2
  • 【SLAM】卡尔曼滤波(Kalman Filter)

    卡尔曼滤波 Kalman filter 一种利用线性系统状态方程 通过系统输入输出观测数据 对系统状态进行最优估计的算法 由于观测数据中包括系统中的噪声和干扰的影响 所以最优估计也可看作是滤波过程 卡尔曼滤波器的原理解释如下 首先 我们先要
  • 数学基础(一)——最小二乘法

    最小二乘法 LS 算法 是统计分析中最常用的逼近计算的一种算法 其交替计算结果使得最终结果尽可能地逼近真实结果 LS 算法是一种数学优化技术 也是一种机器学习常用算法 它通过最小化误差的平方和寻找数据的最佳函数匹配 利用最小二乘法可以简便地
  • 数学基础课之01二进制

    关于Java的移位符 左移位 lt lt 右移位 gt gt 表示算术右移 gt gt gt 表示逻辑右移 python同Java 由于java的二进制数最高位为符号位 0为正 1为负 右移位涉及到最左补0还是补1的问题 逻辑右移直接补0即
  • 经验模式分解(EMD)——简介及Matlab工具箱安装

    最近在做脑电信号分析 在导师的建议下学习了一点经验模式分解 下面简称EMD 的皮毛 期间也是遇到了很多问题 在这里整理出来 一是为了自己备忘 二是为了能尽量帮到有需要的朋友 一 EMD简介 经验模态分解 Empirical Mode Dec
  • 非中心卡方分布

    非中心卡方分布 非中心卡方分布是卡方分布的一般化形式 如果 是 个独立的正态分布的随机变量均值为 方差为 表示为 那么随机变量 为非中心卡方分布 非中心卡方分布涉及两个参数 表示自由度 即 的数目 是和随机变量 相关的参数 由以上参数所定义
  • 傅里叶变换公式整理

    1 一维傅里叶变换 1 1 一维连续傅里叶变换 正变换 F
  • 朴素贝叶斯基本原理和预测过程、先验概率、后验概率、似然概率概念

    贝叶斯原理是英国数学家托马斯 贝叶斯提出的 贝叶斯原理 建立在主观判断的基础上 在我们不了解所有客观事实的情况下 同样可以先估计一个值 然后根据实际结果不断进行修正 举例 一个袋子里有10个球 其中6个黑球 4个白球 那么随机抓一个黑球的概
  • 对数损失和交叉熵损失

    从上述的表达式中看 两者的损失函数本质是一样的 但是这里需要注意的是通常情况下 这两种损失函数所对应的上一层结构不同 log loss经常对应的是Sigmoid函数的输出 用于二分类问题 而cross entropy loss经常对应的是S
  • 范数(简单的理解)、范数的用途、什么是范数

    没学好矩阵代数的估计范数也不是太清楚 当然学好的人也不是太多 范数主要是对矩阵和向量的一种描述 有了描述那么 大小就可以比较了 从字面理解一种比较构成规范的数 有了统一的规范 就可以比较了 例如 1比2小我们一目了然 可是 3 5 3 和

随机推荐

  • python中mgrid和meshgrid的不同

    在生成插值数据时 有时会用到 mgrid 和 meshgrid 两个函数 关于插值函数的应用参见 https blog csdn net gsgbgxp article details 116145501 t7 关于两者的差别可参见 htt
  • 李宏毅 机器学习 2016 秋:2、Regression

    二 Regression Case Study 我们今天要讲的是 Regression 等一下我会举一个例子 来讲 Regression 是怎么做的 顺便引出一些 machine learning 里面 常见的重要观念 那 regressi
  • DNS服务器

    DNS服务简介 DNS Domain Nmae Server 域名服务系统 对域名进行解析 1 域名空间 根域 代表域名命名空间的根 顶级域 直接处于根域下面 以国家或地区命名 二级域 在顶级域下面 子域 主机 FQDN完全合格的域名 如w
  • Mybatis-plus查询条件拒绝自动去重

    问题描述 当进行多表数据关联时候 使用mybatis结果集封装数据 mybatis会将主键id作为map的key值 如果后面有重复的主键id 那么将会覆盖之前的数据 很显然这不是多表关联查询数据想要看到的结果 如此以来 最终结果会比实际结果
  • 浏览器的选择建议,按照这些建议选,总能找到合适的

    浏览器可以说是电脑的标配了 几乎每台电脑都安装有浏览器 最近 很多朋友询问哪些浏览器比较好用啊 今天给大家分享一下浏览器的选择建议 让大家都能选到适合自己的浏览器 同时 系统全面的介绍各家浏览器的特点 哪些值得我们花时间试用 浏览器的选择建
  • 如何在C语言中将文字显示为花里胡哨的多种颜色

    Hello大家好 最近刚刚做完C语言的课程设计 在评分标准中有一项是展示界面美观整洁 学前端的我对花里胡哨的界面情有独钟 这里为大家简单介绍三种改变字体颜色的方法 注意 本文中所有演示截图均来自VS 2022 目录 改变C语言显示界面字体颜
  • Base64转二进制文件流以及转File、图片转Base64、二进制流转Base64

    1 Base64转二进制文件流 方法一 Base64字符串转二进制流 param String dataurl Base64字符串 字符串包含Data URI scheme 例如 data image png base64 function
  • 智能硬件开发如何选择低功耗MCU?

    本文转载至 http www iot online com IC embedded 2015 090928393 html 本文将市场上典型的低功耗MCU系列进行了比较 分析得出基于ARM Cortex M0 内核的MCU系列最适合穿戴式医
  • 【GAOPS006】CRC8串行计算原理和verilog实现

    1 定义 X P N R X 被除数 P 除数 p 1 表示p bit位宽 N 商 不关心 R 余数 CRC值 2 规则 很简单就一个 1 补零 CRC8 算出来的校验和有8bit CRC16算出来的校验和有16bit 在需要计算的数据X被
  • 十、Mybatis的choose (when, otherwise)标签使用

    choose标签的作用 按顺序判断其内部when标签中的test条件出否成立 如果有一个成立 则 choose 结束 当 choose 中所有 when 的条件都不满则时 则执行 otherwise 中的sql 类似于Java 的 swit
  • 编写Java程序,建立一个人类(Person)和学生类(Student)

    编写Java程序 建立一个人类 Person 和学生类 Student 要求如下 Person中包含4个私有的数据成员name addr sex age 分别为字符串型 字符串型 字符型 整形 表示姓名 地址 性别和年龄 用一个4参构造方法
  • vue导入图标的3种方式【阿里图标】

    第一种方式 Font class css 点击 Font class 下载至本地 解压之后导入到项目 src assets icon 这个是 iconfont css 文件 font face font family iconfont Pr
  • Java面向对象之函数式编程

    1 函数式编程 在数学中 函数就是有输入量 输出量的一套计算方案 也就是 用什么东西做什么事情 相对而言 面向对象过分强调 必须通过对象的形式来做事情 而函数式思想则尽量忽略面向对象的复杂语法 强调做什么 而不是以什么形式来做 1 1 做什
  • MongoDB 数据库操作汇总

    本篇主要用于汇总MongoDB专栏 提供快速访问链接 一 安装与基本介绍 MongoDB安装与使用 MongoDB 中的基本概念 MongoDB 数据库操作 MongoDB 集合操作 二 CRUD操作 MongoDB 插入文档 插入一个 批
  • 【论文阅读】Mixed Precision Training

    GiantPandaCV导语 混合精度是一个非常简单并且实用的技术 由百度和谷歌联合发表于ICLR2018 可以让模型以半精度的方式训练模型 既能够降低显存占用 又可以保持精度 这篇文章不是最先提出使用更低精度来进行训练 但是其影响力比较深
  • 该文件没有与之关联的应用程序来执行该操作。请安装应用,请在"默认应用设置"页面中创建关联

    最近在win10新安装的一个应用程序 在程序中打开指定文件时报了 该文件没有与之关联的应用程序来执行该操作 请安装应用 请在默认应用设置 页面中创建关联 原因是该文件没有默认的打开程序 如果是txt或xml这些文件 可以右击这个文件 设置其
  • vscode缩进和Eslint缩进问题解决

    vscode缩进和Eslint缩进问题解决 vscode更改换行时的缩进 如果更改失效 取消该属性勾选 Eslint 缩进校验修改
  • 解决问题记录2:项目内使用lombok的@Log4j2失效

    问题描述 在使用Log4j2注解后 程序中使用log 启动加载时报错 找不到相对的依赖 检查lombok的依赖是正确的添加的 问题解决 尝试了网上的众多方法都没有解决 后想到是否是有其他的jar内做了lombok的依赖 导致依赖到了其他ja
  • JSP使用最简单的echarts图入门

    jsp使用最简单的echarts图表 jsp项目中应用最简单的一个折线图 柱状图等 一 echarts官网使用 首先打开echarts的api官方文档 官网 https echarts apache org examples zh inde
  • 算法的复杂度

    常用的算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O n2 O n2 稳定 O 1 快速排序 O n2 O n log2n 不稳定 O log2n O n 选择排序 O n2 O n2