遞迴實現與迴圈實現
問答系統介紹
公式輸入請參考:
歸併排序直接看資料結構了解什麼意思,後面的主定理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過很多的博文後,感覺這...