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