02 NLP訓練營 遞迴演算法複雜度

2021-10-03 03:14:19 字數 2887 閱讀 7186

遞迴實現與迴圈實現

問答系統介紹

公式輸入請參考:

歸併排序直接看資料結構了解什麼意思,後面的主定理master theorem是專門用來算遞迴演算法的複雜度的方法,具體看這裡:

master—theorem 主定理的證明和使用

我就偷懶不寫公式了。

總之,主定理裡面三個條件算出來的,誰大就要誰作為時間複雜度標準,相等就隨意取乙個。

補充一點點:

序列依次為1,1,2,3,5,8,13,21,…

問題:怎麼求出序列中第n個數?

def

fib(n)

:# base case

if n<3:

return

1return fib(n-2)

+fib(n-1)

print

(fib(30)

)|

這個演算法不適合使用主定理來解演算法複雜度。可以用畫圖的方式來看看

條件是:

f (n

)=f(

n−2)

+f(n

−1)且

有f(2

)=f(

1)=1

f(n)=f(n-2)+f(n-1)且有f(2)=f(1)=1

f(n)=f

(n−2

)+f(

n−1)

且有f(

2)=f

(1)=

1求f(8)

第一層要乙個加法(f(6)+f(7)),對應時間複雜度中的乙個操作(2

02^0

20次操作),第二層要兩次(2

12^1

21次操作),依次下去是2n−

12^2n−1

注意算f(n),那麼樹有n-2層,因為有兩層是已知的。但是複雜度來說常數項可以忽略,所以複雜度就是2n2^

2n遞迴呼叫的空間複雜度涉及到棧記憶體,後進先出,呼叫函式要逐個入棧,如果計算f(8)其實只用8個記憶體空間。

從上面的**和圖可以看出來,使用遞迴來解決斐波那契數列很簡便,**也不用寫很多,但是這個過程畫成圖了以後我們發現,其中一些計算重複了很多次,例如f(4)在計算f(5)的時候用了一次,在計算f(6)的時候用了兩次,每次都重複計算,所以很慢。如果能只計算一次,那麼就會大大加快計算的速度。

如果遞迴的計算n=50,普通機器裡面宕機。。

這種復用的計算方式就叫動態規劃dp。原理就是維護乙個二維陣列,把計算的結果儲存到陣列中,避免重複計算。

import numpy as np

deffib

(n):

tmp=np.zeros(n)

tmp[0]

=temp[1]

=1for i in

range(2

,n):

tmp[il=tmp[i-2]

+tmp[i-1]

return tmp[n-1]

deffib

(n):

a,b=1,

1 c=

0for i in

range(2

,n):

c=a+b

a=bb=c

return c

以上兩個演算法的結果都一樣,不過第乙個空間複雜度要高一點,它陣列要長一些

思考題:怎麼在o(1

)o(1)

o(1)

先要有語料庫(knowledge base)

例如1.本課程是線上課程還是線下課程?

回答:線上課程為主

2.課程有助教嗎?

回答:每門課程都配備***教

3.學習週期是多久啊?

回答:通常來講在3-4個月不等

4.如果不滿意可以退款嗎?回答:前兩周提供無條件退款

5.老師都是什麼背景啊?

回答:絕大部分都是全美前10學校的博士

6.課程會有考試嗎?

回答:有的。一般包括期中和期末

7.我只有程式設計基礎,可以報名嗎?

回答:對於初級的專案班只要求程式設計基礎

8.課程有實操嗎?

回答:大部分都是實操,動手能力是最重要的

9.課程為什麼貴?

回答:跟別的知識付費不一樣,我們會提供很多教學服務,輔助完成學員做完所有的專案

10.課程學完了能做什麼?

回答:可以找相關崗位的工作問題不大

11.課程多久開一次啊?

回答:我們每個月開一期,但**通常會不斷公升高

大概流程如下:

1、分詞

2、預處理:拼寫糾錯,不同時態詞語的還原,定冠詞等無意義詞的過濾,特殊詞(例如一些html標籤)的過濾,同義詞替換處理。。。

3、文字的向量表示:boolean vector,count vector,tfidf,word2vec,seq2seq等。

4、計算相似度(給定連個向量):歐式距離,cos距離,笛卡爾距離。

5、排序

6、返回結果

最後看看關於問答系統現在兩個思路:

現有的方法

知識圖譜

文字的表示

實體抽取

相似度計算

關係抽取

把整體流程貼一下,下節從分詞開始。

演算法複雜度 02

確定一種標準和確定的方法來確定演算法的效能 速度和記憶體來確定演算法的效能 1.大o表示法 乙個演算法的增長速率或者乙個演算法的增長規律非常重要,因為當輸入資料量變得無窮大時,它可以用來描述演算法的效率到底有多高。o表示法正是這樣一種表示演算法增長規律的方法。我們通常使用演算法的最壞情況複雜度,記為...

時間複雜度與空間複雜度,遞迴演算法

lina acm 演算法複雜度分為時間複雜度和空間複雜度。下面摘錄其含義 時間複雜度是指執行演算法所需要的計算工作量。重點在其計算方法 乙個演算法中的語句執行次數稱為語句頻度或時間頻度。記為t n 一般情況下,演算法的基本操作重複執行的次數是模組n的某乙個函式f n 因此,演算法的時間複雜度記做 t...

遞迴演算法時間複雜度

開篇前言 為什麼寫這篇文章?筆者目前在學習各種各樣的演算法,在這個過程中,頻繁地碰到到遞迴思想和分治思想,驚訝於這兩種的思想的偉大與奇妙的同時,經常要面對的乙個問題就是,對於乙個給定的遞迴演算法或者用分治思想縮小問題規模的演算法,如何求解這個演算法的時間複雜度呢?在google過很多的博文後,感覺這...