【问题标题】:Searching a sorted array of floating point numbers搜索已排序的浮点数数组
【发布时间】:2012-12-24 18:05:39
【问题描述】:

在任何数值库(MKL、Boost、GSL、..etc)中是否有一个优化的函数可以搜索一个排序的浮点数数组以找到与给定浮点数最接近的匹配项? 另一个可以为我解决相同问题的函数将从自定义离散概率分布生成随机样本。

【问题讨论】:

  • Binary search 基本上给了你。它为您提供 2 个候选者(如果数字不在列表中):一个上一个下一个,只需找出其中最接近的一个
  • 您可以使用 STL 中的std::lower_bound,它有效地实现了二分搜索,按照@amit 的建议找到两个最接近的候选者。

标签: c++ arrays search boost


【解决方案1】:

将 cmets (of me & @betabandido) 包装成答案:

您基本上需要找到 2 个候选者,最接近的“上”元素和最接近的“下”元素(假设该元素不在列表中)。这可以有效地使用Binary Search 来实现(O(logN)

通过std::lower_bound()可以得到数组中较高的元素,较低的是数组中它之前的元素。

比较两个候选人 - 最接近给定浮点数的候选人就是你的答案。

【讨论】:

  • lower_bound 是否也适用于数组或仅适用于向量等数据结构?
  • @Tarek 这是标准库算法的优点,它们几乎适用于任何东西。只需使用 std::begin(array)std::end(array) 来获取迭代器范围,或者,如果您没有 C++11 或数组是动态分配的(尽管我首先会质疑,但就这样吧),分别使用arrayarray+size
猜你喜欢
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 2017-12-19
  • 2012-11-27
  • 2011-07-10
  • 2014-01-22
  • 2020-08-13
  • 1970-01-01
相关资源
最近更新 更多