問答系統中的遞迴和動態規劃

2021-10-23 16:42:46 字數 1979 閱讀 2310

def

full_segmentation

(input_str, words)

:# 輸入字串 字典

if input_str =='':

return[[

]]else

: result =

for i in

range(1

,len

(input_str)+1

):if input_str[

:i]in words:

for remain_segment in full_segmentation(input_str[i:

], words)

:[input_str[

:i]]

+ remain_segment)

return result

words =

['我們'

,'學習'

,'人工'

,'智慧型'

,'人工智慧'

,'未來'

,'是'

]input_str =

'我們學習人工智慧人工智慧是未來'

# 字 字 字

def

get_best_path

(path)

: score =

path =

for i in graph.keys():

# 以字典來表示圖

if graph[i]

:for j in graph[i]

.keys():

if i not

in score.keys(

)or score[i]

> graph[i]

[j]+ score[j]

: score[i]

= graph[i]

[j]+ score[j]

path[i]

= j return path

#0 1 2 3 ....

# 字 字 字

def

path_to_segment

(path, input_str)

: segment =

i =max(path.keys())

while i >0:

segment =

[input_str[path[i]

:i]]

+ segment

i = path[i]

return segment

遞迴和動態規劃

暴力遞迴 1,把問題轉化為規模縮小了的同類問題的子問題 2,有明確的不需要繼續進行遞迴的條件 base case 3,有當得到了子問題的結果之後的決策過程 4,不記錄每乙個 子問題的解 動態規劃 1,從暴力遞迴中來 2,將每乙個子問題的解記錄下來,避免重複計算 3,把暴力遞迴的過程,抽象成了狀態表達...

遞迴和動態規劃 整數和

給你乙個陣列arr,和乙個整數aim。如果可以任意選擇arr中的數字,能不能累加得到aim,返回true或者false 類似於字串的子串,陣列中的每個數字都可以在求和結果中,也可以不在 所以使用遞迴可以求得 public static boolean issum int arr,int aim pu...

遞迴和動態規劃的初步理解

首先通過斐波那契數列引出兩個概念 斐波那契數列 已知f 0 0,f 1 1,f n f n 1 f n 2 分別用兩種不同的思想求得 f n 解決遞迴問題,首先要明確函式定義,然後尋找遞迴終止條件,最後要能夠準確的寫出遞迴子式,即明確遞迴過程。def f n if n 0 return 0if n ...