最近一年多來,一直比較忙,最近一段時間終於空閒了,把以前沒寫的都補上.....
這邊隨筆主要是計算一系列資料的間隔資料。從一堆資料中查詢出每個區間的起始資料,結束資料以及資料個數,同時可以設定相應精度(小數字數)。
區間資料資料結構
1、區間資料主要包括當前區間的起始資料,結束資料以及資料個數。結構如下:
public struct intervaldata
public tkey startvalue
set
}public tkey endvalue
set
}public tvalue count
set
}}
區間資料計算演算法
首先需要注意的幾點如下:
1、區間應該大於等於1,精度必須小於等於15(double精度最大值)。
2、區間寬度需要微調,相應需要增加相對應的精度值。
3、最大值和最小值需要微調,相應需要增加或者減少相對應的精度值。
publicclass
datacalculator
public
double intervalwidth
public
double maxvalue
public
double minvalue
public
const
int max_digit_scale = 15
;
public
datacalculator()
public datacalculator(int
intervalcount)
else
}//////
計算間隔資料起始點,結束點以及數量的列表。
/// ///
需要計算的數值列表。
///小數點位數。用於精確到指定位數的小數點。
///大於等於0,小於等於15。小於0時設定為0,大於15時設定為15。
///返回間隔資料列表。
public ilistdouble, int>> calculate(ilist values, int digits = 0
)
checkdoublescale(
refdigits);
adjustminandmaxvalue(values, digits);
adjustintervalwidth(digits);
return
calculateresult(values, digits);
}private ilistdouble, int>> calculateresult(ienumerable values, int
digits)
}if (index == this.intervalcount - 1 && this.maxvalue dataresult.add(
new intervaldata(startvalue, endvalue, count));
startvalue =endvalue;
}return
dataresult;
}private
void adjustintervalwidth(int
digits)
if (currentintervalwidth == 0
)
this.intervalwidth =currentintervalwidth;
}private
void adjustminandmaxvalue(ienumerable values, int
digits)
//計算最大值,將最大值增加相應的精度值,避免最大值未進入計算
double currentmaxvalue =math.round(maxvalue, digits);
if (currentmaxvalue <=maxvalue)
this.minvalue =currentminvalue;
this.maxvalue =currentmaxvalue;
}private
static
void checkdoublescale(ref
intdigits)
if (digits >max_digit_scale)
}}
具體應用
應用比較簡單,示例如下:
ilist datapoints = new list() ;var calculator = new datacalculator(5
); ilist
double, int>> datas = calculator.calculate(datapoints, 2
); stringbuilder builder = new
stringbuilder();
foreach (var data in
datas)
endvalue: count:
", data.startvalue, data.endvalue, data.count));
}string result =builder.tostring();
console.write(result);
輸出結果為:
startvalue:-4 endvalue:16.71 count:4
startvalue:16.71 endvalue:37.42 count:0
startvalue:37.42 endvalue:58.13 count:0
startvalue:58.13 endvalue:78.84 count:1
startvalue:78.84 endvalue:99.55 count:1
可以將該返回資料用於相關圖形進行繫結以及顯示。
演算法 區間資料計算
最近一年多來,一直比較忙,最近一段時間終於空閒了,把以前沒寫的都補上.這邊隨筆主要是計算一系列資料的間隔資料。從一堆資料中查詢出每個區間的起始資料,結束資料以及資料個數,同時可以設定相應精度 小數字數 區間資料資料結構 1 區間資料主要包括當前區間的起始資料,結束資料以及資料個數。結構如下 publ...
連號區間數
小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l 1的 連續 數列,則稱這個區間連號區間。當n很小的時候,小明可以很快地算出答案,但是當n...
連號區間數
小明這些天一直在思考這樣乙個奇怪而有趣的問題 在1 n的某個全排列中有多少個連號區間呢?這裡所說的連號區間的定義是 如果區間 l,r 裡的所有元素 即此排列的第l個到第r個元素 遞增排序後能得到乙個長度為r l 1的 連續 數列,則稱這個區間連號區間。當n很小的時候,小明可以很快地算出答案,但是當n...