對減面演算法的優化

2021-08-21 05:57:22 字數 1342 閱讀 6641

之前發了乙個減面演算法,但是效率不怎麼樣。最近又在優化。為了不再進行dictionary的重新排序(耗時最多的地方),改用ordereddictionary進行插入刪除操作,這樣應該能節約不少時間。稍微了解了下,ordereddictionary是採用紅黑樹的資料結構,效率應該是很不錯的。那麼,之前耗時最嚴重的重新排序變成了查詢需要插入的位置。網上找了找最常見的幾種查詢演算法,順序查詢(效率太低,淘汰),二分查詢,插值查詢,斐波拉契查詢,二叉搜尋樹查詢,平衡二叉樹查詢。。。好吧,一大堆。因為如果要用樹結構,就需要重新儲存資料,並定義結點,暫時放一邊,先實現了二分查詢和插值查詢。

public static int insertid(ref ordereddictionary costlist,float target,int min,int max)  else if (target >= (float)costlist[costlist.count-1]) 

if (min > max)

if (target == (float)costlist[mid] || (target >= (float)costlist[mid] && target <= (float)costlist[mid+1]))

else if (target > (float)costlist[mid])

else

}//插值查詢

public static int insertionsearch(ref ordereddictionary a, float value, int low, int high)

else if (value >= (float)a[high])

int mid = low +(int)((value - (float)a[low]) / ((float)a[high] - (float)a[low])) * (high - low);

if ((float)a[mid] == value || (value>= (float)a[mid] && value <= (float)a[mid+1]))

return mid;

if ((float)a[mid] > value)

return insertionsearch(ref a, value, low, mid - 1);

if ((float)a[mid] < value)

return insertionsearch(ref a, value, mid + 1, high);

return -1;

}

果然在資料比較規律的情況下插值查詢的效率比二分查詢要高。但是在資料量超過10w的時候效率還是不怎麼好。至於斐波拉契查詢,很憂傷截止發文也沒有實現出來。這裡很感謝 提供的**,學習借鑑了。

Creator3D 3D模型優化 減面

今天介紹一下最常用的優化方式 減面 減面 減少模型面數 大家可以上網上搜一下,3d max是可以對模型進行減面操作的,菜鳥3d max軟體安裝了,奈何不會用,看不懂 skinny3d 減面工具 這也是菜鳥今天推薦的工具,菜鳥感覺湊合著夠用了,只能怪自己太菜不會自己做模型,先看一下軟體的介面 很明顯可...

對A 演算法的路徑進行優化

注 優化最終路徑,必然會對演算法耗時造成一定的影響。search新增乙個引數,用來代替原本的break gap常量巨集,在search中,清理記憶體時,將地圖資料恢復。修改後的源 如下 bool castar search int x,int y,std list lresult,double db...

對dijkstra演算法的常數優化 by azui

dijkstra有乙個經典的堆優化,可以將原本n 2的複雜度優化到 n m logn,由於c 的priority queue,我們只需要自己定義乙個結構體,乙個比較函式,乙個建構函式即可。但分析傳統的堆優化dijkstra模板 可發現,由於每次鬆弛成功都要進行入堆操作,堆中元素個數最多可達到 n m...