之前发了一个减面算法,但是效率不怎么样。最近又在优化。为了不再进行Dictionary的重新排序(耗时最多的地方),改用OrderedDictionary进行插入删除操作,这样应该能节约不少时间。稍微了解了下,OrderedDictionary是采用红黑树的数据结构,效率应该是很不错的。那么,之前耗时最严重的重新排序变成了查找需要插入的位置。网上找了找最常见的几种查找算法,顺序查找(效率太低,淘汰),二分查找,插值查找,斐波拉契查找,二叉搜索树查找,平衡二叉树查找。。。好吧,一大堆。因为如果要用树结构,就需要重新存储数据,并定义结点,暂时放一边,先实现了二分查找和插值查找。
public static int InsertID(ref OrderedDictionary CostList,float target,int min,int max) {
int mid = (min + max) >>1;
if (target <= (float)CostList[0]) {
return 0;
} else if (target >= (float)CostList[CostList.Count-1]) {
return CostList.Count - 1;
}
if (min > max)
{
return 0;
}
if (target == (float)CostList[mid] || (target >= (