昨天在PKU上做了一題2187,限時(shí)3s。算法主要耗時(shí)在多次求不同整數(shù)的平方。當(dāng)用pow函數(shù)求時(shí),超時(shí);而直接乘才232ms。相差也太大了吧。于是就寫(xiě)了一段代碼來(lái)測(cè)試pow的性能首先產(chǎn)生10000個(gè)隨機(jī)整數(shù),然后重復(fù)1000次求整數(shù)的平方
在做PKU2762時(shí),需要建鄰接表。于是按部就班寫(xiě)了下面一個(gè)插入邊到鄰接表中的函數(shù):
完成完整的程序提交上去,得到結(jié)果Memory:25796K Time:375MSLanguage:C++ Result:Accepted再對(duì)比別人的程序Memory:296K Time:109MS無(wú)論是時(shí)間還是空間都相差很大。于是就考慮怎么優(yōu)化自己的程序。第一個(gè)問(wèn)題:規(guī)模只有1000,為什么會(huì)用那么多內(nèi)存呢?仔細(xì)一想數(shù)據(jù)是多case的,每次插入新節(jié)點(diǎn)時(shí)都要?jiǎng)討B(tài)創(chuàng)建一個(gè)節(jié)點(diǎn)。一來(lái)動(dòng)態(tài)創(chuàng)建耗時(shí)間,二來(lái)每個(gè)case結(jié)束的鄰接表中的節(jié)點(diǎn)沒(méi)有釋放,故耗費(fèi)大量?jī)?nèi)存。然后就想到了下面的算法,首先初始化一塊內(nèi)存Graph use[100*VMAX];這樣每次需要新節(jié)點(diǎn)時(shí),就從use中獲取。如果use使用完畢就再動(dòng)態(tài)創(chuàng)建。依此算法優(yōu)化后,得到的結(jié)果比較滿意Memory:1000K Time:218MSLanguage:C++ Result:Accepted