Algorithm 排序桶列表中求浮点数的最优搜索方法
我试图解决的问题是找到给定浮点数的桶数 假设有十个桶。Algorithm 排序桶列表中求浮点数的最优搜索方法,algorithm,sorting,search,floating-point,range,Algorithm,Sorting,Search,Floating Point,Range,我试图解决的问题是找到给定浮点数的桶数 假设有十个桶。 在bucket 0中,我将数字放在[0到1.2]的范围内 铲斗1[1.2至2.4] 铲斗2[2.4至3.6] 等等,直到 桶9[10.8至12.0] 桶被分类并具有相同的“宽度”(本例中为1.2) 使用线性搜索,计算复杂度将O(n) 使用树搜索,计算复杂度将O(logn) 是否有一种方法允许计算复杂度O(1)? 感觉应该有一些散列或数学“把戏”来提高搜索效率,但我找不到/想不出一个 从您的示例来看,这些桶的大小似乎都相同 如果是这种
在bucket 0中,我将数字放在[0到1.2]的范围内
- 铲斗1[1.2至2.4]
- 铲斗2[2.4至3.6] 等等,直到
- 桶9[10.8至12.0]
- 使用线性搜索,计算复杂度将O(n)
- 使用树搜索,计算复杂度将O(logn)
从您的示例来看,这些桶的大小似乎都相同 如果是这种情况,对于大小为
S
的桶,某些浮动f
的相关桶为:
#bucket = floor(f/S)
这基本上是“规范化”将S
指定为1,并忽略提醒
(注意,这假设间隔是单面打开的,即在您的示例中,
1.2
在bucket1中,而不是bucket0中。如果此假设不成立,则可以轻松检查和处理。)第一步:将值除以宽度:
double width = 1.2;
assert(x >= 0 && x < 12.0);
double q = x/width;
int expected_bucket = (int) q;
。。。这注意)
与]
[0.0 to 1.2)
[1.2 to 2.4)
[2.4 to 3.6)
水桶的大小总是一样的吗?如果是这样,相关的桶是
地板(f/bucket\u size)
(我想)是的,那就行了!即使bucket 0不是从0.0开始,我也可以计算f到开始值的差值,并使用该公式来查找bucket,使搜索在O(1)中运行!谢谢你的帮助!
[0.0 to 1.2)
[1.2 to 2.4)
[2.4 to 3.6)