NLP学习笔记03-算法复杂度

一 序

  虽然是在b站看的视频,但是说真的感受老师讲的真好,后面还是要去反复学习下。因为算法是大厂必考的,老师没有吹嘘哪些NB之处,而是实在的说明,时间复杂度和空间复杂度,这是任何AI工程师必须要深入理解的概念。就是你不光要读论文仰望星空,还是要脚踏实地,把实际遇到的问题工程能力落到实处。

二 时间复杂度   

  不从数学角度来看公式推导 ,不考虑前面的系数。

  • O(1):Constant Complexity 常数复杂度
  • O(log n):Logarithmic Complexity 对数复杂度
  • O(n):Linear Complexity 线性时间复杂度
  • O(n^2):N Square Complexity 平方
  • O(n^3):N Square Complexity 立方
  • O(2^n):Exponential Growth 指数
  • O(n!):Factorial 阶乘

如果不是NLP课程,单纯是算法的话,那么首推极客时间的覃超老师的算法训练营。

三 归并排序

  算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法。

分治模式在每一层递归上有三个步骤:

  • 分解(Divide):将n个元素分成个含n/2个元素的子序列。
  • 解决(Conquer):用合并排序法对两个子序列递归的排序。
  • 合并(Combine):合并两个已排序的子序列已得到排序结果。

分到一定细度的时候,每一个部分就只有一个元素了,那么我们此时不用排序,对他们进行一次简单的归并就好了。

看着比较简单,代码写起来不一定简单。感兴趣的自己动手试试吧。

根据上面的思路: 时间复杂度T(N)= 2 T(N/2)+N.  最后这个N是因为合并的时候,每个数字都要从两个子序列去比对一次。

下面是根据主定理去计算下归并排序的时间复杂度。

主定理(Master Theorem):

在这里插入图片描述

网上找了个计算过程,a=2,b=2,k=0 .属于第二种情况,代入计算即可。

四  斐波那契数列

 Fib:0,1,1,2,3,5,8,13,21,…

  • F(n) = F(n-1) + F(n-2)

2019-10-10-23-41-14.jpg

观察图,发现的规律:

  1. 每展开一层,运行的节点数就是上层的两倍,按指数级递增(从根节点开始算起)
  2. 存在重复计算的节点

如果 使用哪个默认的递归且无优化的情况,时间复杂度就是O(2^n),空间复杂度就是状态树的深度O(N).

如果使用了DP方式:(dp用了一维数组来实现)

那么 时间复杂度是: O(n) 

空间复杂度:数组的长度O(n) 

老师这里花了半小时,分别从时间复杂度(树)、空间复杂度(stack)展开去讲.

五 NP问题

 从时间复杂度来看,p^N属于指数型。这种是不可求解的。

那么需要需要近似算法,转换为N^p这种多项式问题(这种是可解决的),需要理解这种的时间复杂度,一级这种近似算法与理论算法差值。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值