NLP深入学习——算法复杂度计算(归并排序与斐波那契数)



返回主目录

这是一个系列的文章,点击返回综合目录页


归并排序(merge sort)复杂度计算


举一个栗子说明算法思路:
在这里插入图片描述
简化上述流程,并给出复杂度,假设需要计算的复杂度为T(n):
在这里插入图片描述
主定理(Master Theorem) 解答:
在这里插入图片描述
代入计算:
在这里插入图片描述


斐波那契数 (Fibonanci number)复杂度计算


序列为1, 1, 2, 3,5,8, 13, 21,…
问:怎么求出序列中的第N个数?
f(n)= f(n-2)+ f(n-1)

def fib(n) :
	if n<3:
		return 1
	return fib(n-2)+fib(n-1)
	 
print (fib(8) )

时间复杂度:O(2^n)
在这里插入图片描述
空间复杂度:O(n)
在这里插入图片描述
循环实现:
通过维护一个数组:

import numpy as np
def fib2(n) :
	tmp = np.zeros(n)
	tmp[0] = 1
	tmp[1] = 1
	for i in range(2,n) :
		tmp[i] = tmp[i-2]+tmp[i-1]
	return tmp[n-1]

改进版本,只维护前两个值:

def fib3(n):
    a, b = 1, 1
    result = 0
    for i in range(2, n):
        result = a + b
        a = b
        b = result
    return result

利用公式,到达时间复杂度 O(1)
由:
F ( n ) = c 1 x 1 n + c 2 x 2 n F(n) = c_1x_1^n + c_2x_2^n F(n)=c1x1n+c2x2n x 1 = 1 + 5 2 , x 2 = 1 − 5 2 x_1=\frac{1+\sqrt{5}}{2}, x_2=\frac{1-\sqrt{5}}{2} x1=21+5 x2=215 c 1 = 1 5 , c 2 = − 1 5 c_1=\cfrac{1}{\sqrt{5}}, c_2=-\cfrac{1}{\sqrt{5}} c1=5 1c2=5 1
得出:
F ( n ) = 1 5 [ ( 1 + 5 2 ) n − ( 1 − 5 2 ) n ] F(n) = \cfrac{1}{\sqrt{5}}\left[(\frac{1+\sqrt{5}}{2})^n - (\frac{1-\sqrt{5}}{2})^n \right] F(n)=5 1[(21+5 )n(215 )n]

代码表示 :

def fib4(n):
    a = math.sqrt(5)
    return (math.pow((1 + a) / 2, n) - math.pow((1 - a) / 2, n)) / a
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值