我有一个浮点数组Float_t xbins[41]
,它定义了40个二进制数,即浮点范围。
例如。如果y
,则y > xbins[7] && !(y > xbins[8])
位于第7栏。
如果没有40 if语句,如何确定给定浮点数应该属于哪个bin?
请用C ++回答,因为我不会说其他语言。
答案 0 :(得分:4)
如果数组已排序,则执行二进制搜索以找到正确的bin。您需要std::sort
(如果没有排序),然后找std::lower_bound
之类的组合来定位。您需要确保operator<
正确实施Float_t
。
答案 1 :(得分:0)
事实证明,这些区间不是均匀间隔但是有整数边界,最可能的方法是有一个(逆)查找表,显然有大约100个条目。人们需要对较低和较低的基本进行两次比较。更高的界限。
如果使用公式导出数组边界,则可以编写一个优于LUT方法的反公式。
对于一般情况,二进制搜索是这样的 - 甚至可以通过线性插值来改进一点,而不是将范围精确地细分为一半。速度(如果数据不是病态的)将是O(loglogn),而O(logn)则是二进制搜索。