2013-02-22 71 views
-2

我有一个浮点数组Float_t xbins[41],它定义了40个bin,即浮点范围。 例如y在bin 7中,如果y > xbins[7] && !(y > xbins[8])如何确定一个浮球应该在哪个舱中? C++

如何确定,而不必40 if语句给定的浮动应该属于什么仓?

请用C++回答,因为我不说其他语言。

+4

我不知道你想要什么。 – RvdK 2013-02-22 11:11:06

+0

您没有告诉我应该选择“垃圾箱”的标准,那么我们如何告诉您更好的方法来实施这些标准呢? – PlasmaHH 2013-02-22 11:11:52

+0

每个垃圾桶的浮动范围是多少?它们是完全武断的,还是可以计算垃圾箱的数量? – JasonD 2013-02-22 11:12:16

回答

4

如果数组进行排序,然后做一个二进制搜索找到正确的垃圾桶。你需要组合std::sort(如果没有排序),然后像std::lower_bound,来定位。您需要确保operator<正确实施为Float_t

+0

谢谢,std :: lower_bound似乎是我需要的。 – user2099143 2013-02-22 11:26:03

+1

这41个浮点数可以定义40个bin的唯一方法就是对数组进行排序。 – 2013-02-22 11:27:27

0

由于事实证明,箱不是均匀间隔的,但有整数界限,可能最快的方法是有一个(反)查找表,显然有大约100个条目。一个需要基本上比较两个较低的较高边界的比较。

如果阵列界限用公式导出,它可以是可以写入的逆公式优于LUT方法。

对于一般情况二进制搜索是一种方式 - 甚至可以通过执行线性插值来改进一点,而不是将范围精确地细分为一半。与二进制搜索的O(logn)相比,速度(如果数据不是病态的)将是O(loglogn)。

相关问题