演算法 區間資料計算

2021-09-06 10:53:39 字數 3048 閱讀 4371

最近一年多來,一直比較忙,最近一段時間終於空閒了,把以前沒寫的都補上.....

這邊隨筆主要是計算一系列資料的間隔資料。從一堆資料中查詢出每個區間的起始資料,結束資料以及資料個數,同時可以設定相應精度(小數字數)。

區間資料資料結構

1、區間資料主要包括當前區間的起始資料,結束資料以及資料個數。結構如下:

public struct intervaldata

public tkey startvalue

set

}public tkey endvalue

set

}public tvalue count

set

}}

區間資料計算演算法

首先需要注意的幾點如下:

1、區間應該大於等於1,精度必須小於等於15(double精度最大值)。

2、區間寬度需要微調,相應需要增加相對應的精度值。

3、最大值和最小值需要微調,相應需要增加或者減少相對應的精度值。

public

class

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...