假设n
(整数)个连续的长度为l
的段(浮点)。那就是:
Segment 0 = [0, l)
Segment 1 = [l, 2*l)
Segment 2 = [2*l, 3*l)
...
Segment (n-1) = [(n-1)*l, n*l)
给定一个数字x
(浮点数),我想写一个函数
int getSegmentId(double x, double l, int n)
返回x
所在段的id。
我想通过检查x
是否位于每个区间内,在O(1)中执行此操作,而不是O(log(n))。
我认为这是一个非常普遍和常见的问题,我想有一个解决方案。你有什么暗示吗?
附录
问题不在于此算法的特定实现,就像之前基于浮点运算的question一样。我只是问一下最好的 一个好的和强大的方式来实现它。
答案 0 :(得分:2)
如果每个细分受众群从i*l
开始,到(i+1)*l
结束,则我看不到问题
int s = static_cast<int>(std::floor(x / l));
应该足够了。
答案 1 :(得分:1)
int getSegmentId(double x, double l, double n)
{
if(x>=n*l){
//cout>> "Not in any segments! ";
return -1;
else
return (int) x/l ;
}