遞迴演算法的優化

2022-04-02 11:41:22 字數 819 閱讀 7686

經群裡高人點撥。決定還是先把演算法優化下試試。

遞迴演算法本身效率就比較低下,由於其便捷性,還有本人思維狹隘性,目前還無法想出替代它的方法。

只能從遞迴內部的邏輯運算和變數等開始著手。

先在各個過程裡加上計時器,看**耗時最大。例如:

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 需要注意...