演算法設計與分析》第十周作業

2021-08-31 13:46:30 字數 1692 閱讀 9030

標籤(空格分隔): 課堂作業

姓名:李**

學號:16340114

題目:word break(

給定乙個無分隔符的字串和乙個字典,問是否能將字串分解成字典中含有的詞。

給定位置i,定義該下標"可分解"的含義為:從0到該下標的子字串(不包括i)是可以被分解的。

要判斷乙個位置i是否可分解,就要判斷上乙個可分解的位置j到當前位置i(包含j不包含i)所分割形成的詞是否在字典中,如果存在這樣的j,那麼位置i就是可分解的,如果不存在,那麼位置i就是不可分解。最終答案就是下標為字串長度l的位置是否可分解。

用符號的方式有點難說清楚,舉個例子就好了。字串為"helloworld",位置0是可分解的,因為下標為0的位置之前是長度為0的串,自然可以分解,位置5是可分解的,下標為5的為w,w前的可分解位置是0,從0到5(包含0不包含5)形成的詞為hello。這樣就應該清楚以可分解位置為下標的詞應該歸到下一詞的開頭,而不是上乙個詞的結尾。

由此推出狀態遷移方程為:

f or

ifro

m1to

leng

th

:for i from 1 to length:

forifr

om1t

olen

gth:

f or

jfro

mi−1

to0:

for j from i-1 to 0:

forjfr

omi−

1to0:if

(val

id[j

]ist

ruea

ndsu

bstr

ing(

jtoi

)isi

ndic

tion

ary)

:if (valid[j] is true and substring(j to i) is in dictionary):

if(val

id[j

]ist

ruea

ndsu

bstr

ing(

jtoi

)isi

ndic

tion

ary):va

lid[

i]=t

ru

evalid[i] = true

valid[

i]=t

rue下標為0的位置是可分解的,因為0位置前的空子字串是可分解的,所以把valid[0]設為true,其他位置的值設為false,然後根據狀態轉移方程寫就好了。

這道題在課堂上講過,我覺得動手來實現一遍可以加深印象和對動態規劃的理解。我現在對動態規劃的認識似乎比上一周領略的要更好一點,像word break這一型別的動態規劃問題,先考慮乙個任意位置i,用某種規則從位置i往前找j,根據前面的j的狀態確定當前位置i的狀態。課本習題的開餐廳那題也是這個思想。下一周想挑戰一下這道題的公升級版,希望能對動態規劃有更深的認識。

#define isvalid(word) (find(worddict.begin(), worddict.end(), word) == worddict.end() ? false : true) 

class solution }}

}return validendat[length];

}};

第十周作業

1.感觸太多!讓我醍醐灌頂 2.很有教育意義 3.看您的文章真的是享受。觀察問題和思考原因,最後給出解決辦法!每每一針見血。1.公司員工要想長久要給員工提供提公升空間,讓員工替老闆幹,轉變為員工為自己幹。2.學習能力尤為重要,我們要不斷學習提公升自身能力 3.給出清晰 明確的目標,知道自己該幹嘛,知...

第十周作業

本次作業所屬課程 c語言程式設計 本次作業要求 我在這個課程的目標是 學會熟練使用結構型別 本次學習在哪些具體方面幫組我實現目標 自己定義結構還是會方便很多 參考文獻 c primer plus第六版 一 劉未鵬的部落格 怎樣花兩年時間面試乙個人 a 實踐是檢驗真理的唯一標準!能說會道的前提是你要有...

第十周作業

十一周上機作業 cola公司的雇員分為以下若干類 知識點 多型 1 colaemployee 這是所有員工總的父類,屬性 員工的姓名,員工的生日月份。方法 getsalary int month 根據引數月份來確定工資,如果該月員工過生日,則公司會額外獎勵100 元。2 salariedemploy...