經群裡高人點撥。決定還是先把演算法優化下試試。
遞迴演算法本身效率就比較低下,由於其便捷性,還有本人思維狹隘性,目前還無法想出替代它的方法。
只能從遞迴內部的邏輯運算和變數等開始著手。
先在各個過程裡加上計時器,看**耗時最大。例如:
timer = new stopwatch();timer.start();
times[0] = (int)timer.elapsed.totalmilliseconds;
searchall(starttile, paths);
times[0] = (int)timer.elapsed.totalmilliseconds - times[0];
然後反覆比較、修改,作出優化如下:
1.dictionary改為linkedlist。
字典拷貝耗費大量的時間,約佔總時間的30%。由於目前邏輯得到的資料是鏈狀的,因此根本不需要它。
修改後提公升約30%效能。
2.foreach改為for。
這是網上查到的。說這2個效率差10%左右。改了下試試果然如此。
3.邏輯優化:這就和遞迴無關了。將之前2個可能造成多餘計算的地方修改了。
最終計算速度減少為之前的1/2。淚流滿面……
不過即便如此,大圖的計算還是讓人抓狂的。有機會要改改演算法才行。
其中linkedlist的拷貝仍然很耗時,也約佔總時間的30%。
另外採納某群友的建議,加了個計算貨架數最少路徑的功能,將rmb進行到底》<
用了此功能後算出的路徑也就1~2個了。很好選擇。
接下來就是雙格貨架的問題了。頭疼。。。
演算法優化 遞迴演算法的優化策略
在處理演算法問題時候,用的非常多的一種策略就是遞迴演算法了。但是遞迴演算法雖然簡單有效,但是該演算法的演算法效果總是有點差強人意。本文主要講述從兩個方向優化遞迴演算法,希望本文能給讀者一些thinking。持續更新中 總結 示例 遞迴演算法我又把它稱為迭代演算法,因為大致思路都差不多 迭代 從已知推...
遞迴演算法的優化
遞迴計算n 的階乘 param n return public long test long n else 優化計算 n 的階乘,尾遞迴 param n param result 1 return public long newtest long n,long result else 分析 上述 就...
遞迴 遞迴演算法的非遞迴優化
一 遞迴 在方法內部呼叫自身方法的過程稱為遞迴,下面給出乙個遞迴方法的示例。class program 使用遞迴,實現求前n項和 public static int getsum int n int result getsum n 1 在方法體中呼叫方法本身 return result n 需要注意...